DREAMFIRE Docs ← Back to site
Loading...
Searching...
No Matches
InventoryContents.java
Go to the documentation of this file.
1package com.dreamfirestudios.dreamcore.DreamSmartInvs.content;
2
3import com.dreamfirestudios.dreamcore.DreamSmartInvs.ClickableItem;
4import com.dreamfirestudios.dreamcore.DreamSmartInvs.SmartInventory;
5import org.bukkit.Bukkit;
6import org.bukkit.entity.Player;
7import org.bukkit.inventory.Inventory;
8import org.bukkit.inventory.ItemStack;
9
10import java.util.HashMap;
11import java.util.Map;
12import java.util.Optional;
13import java.util.UUID;
14
15public interface InventoryContents {
16
19
20 Optional<SlotIterator> iterator(String id);
21
22 SlotIterator newIterator(String id, SlotIterator.Type type, int startRow, int startColumn);
23 SlotIterator newIterator(SlotIterator.Type type, int startRow, int startColumn);
24
25 SlotIterator newIterator(String id, SlotIterator.Type type, SlotPos startPos);
27
29
30 Optional<SlotPos> firstEmpty();
31
32 ClickableItem GetItemStack(int row, int column);
33 Optional<ClickableItem> get(int row, int column);
34 Optional<ClickableItem> get(SlotPos slotPos);
35
36 InventoryContents set(int row, int column, ClickableItem item);
38
40
45
46 InventoryContents fillRect(int fromRow, int fromColumn,
47 int toRow, int toColumn, ClickableItem item);
49
50 <T> T property(String name);
51 <T> T property(String name, T def);
52
53 InventoryContents setProperty(String name, Object value);
54
55 class Impl implements InventoryContents {
56
57 private SmartInventory inv;
58 private UUID player;
59
60 private ClickableItem[][] contents;
61
62 @Override
63 public ClickableItem GetItemStack(int row, int column){
64 if(contents.length == 0) return null;
65 if((row < contents.length) && (column < contents[0].length)){
66 return contents[row][column];
67 }
68 return null;
69 }
70
71 private Pagination pagination = new Pagination.Impl();
72 private Map<String, SlotIterator> iterators = new HashMap<>();
73 private Map<String, Object> properties = new HashMap<>();
74
75 public Impl(SmartInventory inv, UUID player) {
76 this.inv = inv;
77 this.player = player;
78 this.contents = new ClickableItem[inv.getRows()][inv.getColumns()];
79 }
80
81 @Override
82 public SmartInventory inventory() { return inv; }
83
84 @Override
85 public Pagination pagination() { return pagination; }
86
87 @Override
88 public Optional<SlotIterator> iterator(String id) {
89 return Optional.ofNullable(this.iterators.get(id));
90 }
91
92 @Override
93 public SlotIterator newIterator(String id, SlotIterator.Type type, int startRow, int startColumn) {
94 SlotIterator iterator = new SlotIterator.Impl(this, inv,
95 type, startRow, startColumn);
96
97 this.iterators.put(id, iterator);
98 return iterator;
99 }
100
101 @Override
102 public SlotIterator newIterator(String id, SlotIterator.Type type, SlotPos startPos) {
103 return newIterator(id, type, startPos.getRow(), startPos.getColumn());
104 }
105
106 @Override
107 public SlotIterator newIterator(SlotIterator.Type type, int startRow, int startColumn) {
108 return new SlotIterator.Impl(this, inv, type, startRow, startColumn);
109 }
110
111 @Override
113 return newIterator(type, startPos.getRow(), startPos.getColumn());
114 }
115
116 @Override
117 public ClickableItem[][] all() { return contents; }
118
119 @Override
120 public Optional<SlotPos> firstEmpty() {
121 for (int row = 0; row < contents.length; row++) {
122 for(int column = 0; column < contents[0].length; column++) {
123 if(!this.get(row, column).isPresent())
124 return Optional.of(new SlotPos(row, column));
125 }
126 }
127
128 return Optional.empty();
129 }
130
131 @Override
132 public Optional<ClickableItem> get(int row, int column) {
133 if(row >= contents.length)
134 return Optional.empty();
135 if(column >= contents[row].length)
136 return Optional.empty();
137
138 return Optional.ofNullable(contents[row][column]);
139 }
140
141 @Override
142 public Optional<ClickableItem> get(SlotPos slotPos) {
143 return get(slotPos.getRow(), slotPos.getColumn());
144 }
145
146 @Override
147 public InventoryContents set(int row, int column, ClickableItem item) {
148 if(row >= contents.length)
149 return this;
150 if(column >= contents[row].length)
151 return this;
152
153 contents[row][column] = item;
154 update(row, column, item != null ? item.getItem() : null);
155 return this;
156 }
157
158 @Override
159 public InventoryContents set(SlotPos slotPos, ClickableItem item) {
160 return set(slotPos.getRow(), slotPos.getColumn(), item);
161 }
162
163 @Override
165 for(int row = 0; row < contents.length; row++) {
166 for(int column = 0; column < contents[0].length; column++) {
167 if(contents[row][column] == null) {
168 set(row, column, item);
169 return this;
170 }
171 }
172 }
173
174 return this;
175 }
176
177 @Override
179 for(int row = 0; row < contents.length; row++)
180 for(int column = 0; column < contents[row].length; column++)
181 set(row, column, item);
182
183 return this;
184 }
185
186 @Override
188 if(row >= contents.length)
189 return this;
190
191 for(int column = 0; column < contents[row].length; column++)
192 set(row, column, item);
193
194 return this;
195 }
196
197 @Override
198 public InventoryContents fillColumn(int column, ClickableItem item) {
199 for(int row = 0; row < contents.length; row++)
200 set(row, column, item);
201
202 return this;
203 }
204
205 @Override
207 fillRect(0, 0, inv.getRows() - 1, inv.getColumns() - 1, item);
208 return this;
209 }
210
211 @Override
212 public InventoryContents fillRect(int fromRow, int fromColumn, int toRow, int toColumn, ClickableItem item) {
213 for(int row = fromRow; row <= toRow; row++) {
214 for(int column = fromColumn; column <= toColumn; column++) {
215 if(row != fromRow && row != toRow && column != fromColumn && column != toColumn)
216 continue;
217
218 set(row, column, item);
219 }
220 }
221
222 return this;
223 }
224
225 @Override
227 return fillRect(fromPos.getRow(), fromPos.getColumn(), toPos.getRow(), toPos.getColumn(), item);
228 }
229
230 @SuppressWarnings("unchecked")
231 @Override
232 public <T> T property(String name) {
233 return (T) properties.get(name);
234 }
235
236 @SuppressWarnings("unchecked")
237 @Override
238 public <T> T property(String name, T def) {
239 return properties.containsKey(name) ? (T) properties.get(name) : def;
240 }
241
242 @Override
243 public InventoryContents setProperty(String name, Object value) {
244 properties.put(name, value);
245 return this;
246 }
247
248 private void update(int row, int column, ItemStack item) {
249 Player currentPlayer = Bukkit.getPlayer(player);
250 if(!inv.getManager().getOpenedPlayers(inv).contains(currentPlayer))
251 return;
252
253 Inventory topInventory = currentPlayer.getOpenInventory().getTopInventory();
254 topInventory.setItem(inv.getColumns() * row + column, item);
255 }
256
257 }
258
259}
InventoryContents fillRect(SlotPos fromPos, SlotPos toPos, ClickableItem item)
SlotIterator newIterator(SlotIterator.Type type, int startRow, int startColumn)
SlotIterator newIterator(SlotIterator.Type type, SlotPos startPos)
SlotIterator newIterator(String id, SlotIterator.Type type, int startRow, int startColumn)
InventoryContents fillRect(int fromRow, int fromColumn, int toRow, int toColumn, ClickableItem item)
SlotIterator newIterator(String id, SlotIterator.Type type, SlotPos startPos)
SlotIterator newIterator(String id, SlotIterator.Type type, int startRow, int startColumn)
SlotIterator newIterator(SlotIterator.Type type, SlotPos startPos)
InventoryContents fillRect(SlotPos fromPos, SlotPos toPos, ClickableItem item)
InventoryContents fillRow(int row, ClickableItem item)
InventoryContents fillRect(int fromRow, int fromColumn, int toRow, int toColumn, ClickableItem item)
InventoryContents setProperty(String name, Object value)
SlotIterator newIterator(SlotIterator.Type type, int startRow, int startColumn)
InventoryContents fillColumn(int column, ClickableItem item)
SlotIterator newIterator(String id, SlotIterator.Type type, SlotPos startPos)