33import fr .minuskube .inv .ClickableItem ;
44import fr .minuskube .inv .InventoryManager ;
55import fr .minuskube .inv .SmartInventory ;
6+ import org .bukkit .inventory .Inventory ;
67import org .bukkit .inventory .ItemStack ;
78
89import java .util .HashMap ;
@@ -15,21 +16,33 @@ public interface InventoryContents {
1516 Pagination pagination ();
1617
1718 Optional <SlotIterator > iterator (String id );
19+
1820 SlotIterator newIterator (String id , SlotIterator .Type type , int startRow , int startColumn );
1921 SlotIterator newIterator (SlotIterator .Type type , int startRow , int startColumn );
2022
23+ SlotIterator newIterator (String id , SlotIterator .Type type , SlotPos startPos );
24+ SlotIterator newIterator (SlotIterator .Type type , SlotPos startPos );
25+
2126 ClickableItem [][] all ();
2227
28+ Optional <SlotPos > firstEmpty ();
29+
2330 Optional <ClickableItem > get (int row , int column );
31+ Optional <ClickableItem > get (SlotPos slotPos );
32+
2433 InventoryContents set (int row , int column , ClickableItem item );
34+ InventoryContents set (SlotPos slotPos , ClickableItem item );
35+
2536 InventoryContents add (ClickableItem item );
2637
2738 InventoryContents fill (ClickableItem item );
2839 InventoryContents fillRow (int row , ClickableItem item );
2940 InventoryContents fillColumn (int column , ClickableItem item );
3041 InventoryContents fillBorders (ClickableItem item );
42+
3143 InventoryContents fillRect (int fromRow , int fromColumn ,
3244 int toRow , int toColumn , ClickableItem item );
45+ InventoryContents fillRect (SlotPos fromPos , SlotPos toPos , ClickableItem item );
3346
3447 <T > T property (String name );
3548 <T > T property (String name , T def );
@@ -70,14 +83,36 @@ public SlotIterator newIterator(String id, SlotIterator.Type type, int startRow,
7083 return iterator ;
7184 }
7285
86+ @ Override
87+ public SlotIterator newIterator (String id , SlotIterator .Type type , SlotPos startPos ) {
88+ return newIterator (id , type , startPos .getRow (), startPos .getColumn ());
89+ }
90+
7391 @ Override
7492 public SlotIterator newIterator (SlotIterator .Type type , int startRow , int startColumn ) {
7593 return new SlotIterator .Impl (this , inv , type , startRow , startColumn );
7694 }
7795
96+ @ Override
97+ public SlotIterator newIterator (SlotIterator .Type type , SlotPos startPos ) {
98+ return newIterator (type , startPos .getRow (), startPos .getColumn ());
99+ }
100+
78101 @ Override
79102 public ClickableItem [][] all () { return contents ; }
80103
104+ @ Override
105+ public Optional <SlotPos > firstEmpty () {
106+ for (int column = 0 ; column < contents [0 ].length ; column ++) {
107+ for (int row = 0 ; row < contents .length ; row ++) {
108+ if (!this .get (row , column ).isPresent ())
109+ return Optional .of (new SlotPos (row , column ));
110+ }
111+ }
112+
113+ return Optional .empty ();
114+ }
115+
81116 @ Override
82117 public Optional <ClickableItem > get (int row , int column ) {
83118 if (row >= contents .length )
@@ -88,6 +123,11 @@ public Optional<ClickableItem> get(int row, int column) {
88123 return Optional .ofNullable (contents [row ][column ]);
89124 }
90125
126+ @ Override
127+ public Optional <ClickableItem > get (SlotPos slotPos ) {
128+ return get (slotPos .getRow (), slotPos .getColumn ());
129+ }
130+
91131 @ Override
92132 public InventoryContents set (int row , int column , ClickableItem item ) {
93133 if (row >= contents .length )
@@ -100,6 +140,11 @@ public InventoryContents set(int row, int column, ClickableItem item) {
100140 return this ;
101141 }
102142
143+ @ Override
144+ public InventoryContents set (SlotPos slotPos , ClickableItem item ) {
145+ return set (slotPos .getRow (), slotPos .getColumn (), item );
146+ }
147+
103148 @ Override
104149 public InventoryContents add (ClickableItem item ) {
105150 for (int column = 0 ; column < contents [0 ].length ; column ++) {
@@ -162,6 +207,11 @@ public InventoryContents fillRect(int fromRow, int fromColumn, int toRow, int to
162207 return this ;
163208 }
164209
210+ @ Override
211+ public InventoryContents fillRect (SlotPos fromPos , SlotPos toPos , ClickableItem item ) {
212+ return fillRect (fromPos .getRow (), fromPos .getColumn (), toPos .getRow (), toPos .getColumn (), item );
213+ }
214+
165215 @ SuppressWarnings ("unchecked" )
166216 @ Override
167217 public <T > T property (String name ) {
@@ -184,7 +234,10 @@ private void update(int row, int column, ItemStack item) {
184234 InventoryManager manager = inv .getManager ();
185235
186236 manager .getOpenedPlayers (inv )
187- .forEach (p -> p .getOpenInventory ().getTopInventory ().setItem (9 * row + column , item ));
237+ .forEach (player -> {
238+ Inventory topInventory = player .getOpenInventory ().getTopInventory ();
239+ topInventory .setItem (inv .getColumns () * row + column , item );
240+ });
188241 }
189242
190243 }
0 commit comments