Skip to content

Commit c6bf68e

Browse files
committed
Fix #4, fix #8, add SlotPos with overloads, rename allowOverride getter
1 parent 04e8903 commit c6bf68e

File tree

4 files changed

+119
-23
lines changed

4 files changed

+119
-23
lines changed

src/main/java/fr/minuskube/inv/InventoryManager.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,14 @@
99
import org.bukkit.event.EventHandler;
1010
import org.bukkit.event.EventPriority;
1111
import org.bukkit.event.Listener;
12-
import org.bukkit.event.inventory.InventoryAction;
13-
import org.bukkit.event.inventory.InventoryClickEvent;
14-
import org.bukkit.event.inventory.InventoryCloseEvent;
15-
import org.bukkit.event.inventory.InventoryDragEvent;
16-
import org.bukkit.event.inventory.InventoryOpenEvent;
17-
import org.bukkit.event.inventory.InventoryType;
12+
import org.bukkit.event.inventory.*;
1813
import org.bukkit.event.player.PlayerQuitEvent;
1914
import org.bukkit.event.server.PluginDisableEvent;
2015
import org.bukkit.plugin.PluginManager;
2116
import org.bukkit.plugin.java.JavaPlugin;
2217
import org.bukkit.scheduler.BukkitRunnable;
2318

24-
import java.util.ArrayList;
25-
import java.util.Arrays;
26-
import java.util.HashMap;
27-
import java.util.HashSet;
28-
import java.util.List;
29-
import java.util.Map;
30-
import java.util.Optional;
19+
import java.util.*;
3120

3221
public class InventoryManager {
3322

@@ -121,6 +110,7 @@ public void onInventoryClick(InventoryClickEvent e) {
121110

122111
if(e.getAction() == InventoryAction.COLLECT_TO_CURSOR ||
123112
e.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY) {
113+
124114
e.setCancelled(true);
125115
return;
126116
}
@@ -144,6 +134,8 @@ public void onInventoryClick(InventoryClickEvent e) {
144134
.forEach(listener -> ((InventoryListener<InventoryClickEvent>) listener).accept(e));
145135

146136
contents.get(p).get(row, column).ifPresent(item -> item.run(e));
137+
138+
p.updateInventory();
147139
}
148140
}
149141

src/main/java/fr/minuskube/inv/content/InventoryContents.java

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import fr.minuskube.inv.ClickableItem;
44
import fr.minuskube.inv.InventoryManager;
55
import fr.minuskube.inv.SmartInventory;
6+
import org.bukkit.inventory.Inventory;
67
import org.bukkit.inventory.ItemStack;
78

89
import 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
}

src/main/java/fr/minuskube/inv/content/SlotIterator.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import fr.minuskube.inv.ClickableItem;
44
import fr.minuskube.inv.SmartInventory;
5-
import org.apache.commons.lang3.tuple.Pair;
65

76
import java.util.HashSet;
87
import java.util.Optional;
@@ -22,6 +21,7 @@ enum Type {
2221
SlotIterator next();
2322

2423
SlotIterator blacklist(int row, int column);
24+
SlotIterator blacklist(SlotPos slotPos);
2525

2626
int row();
2727
SlotIterator row(int row);
@@ -31,7 +31,7 @@ enum Type {
3131

3232
boolean ended();
3333

34-
boolean allowOverride();
34+
boolean doesAllowOverride();
3535
SlotIterator allowOverride(boolean override);
3636

3737

@@ -44,7 +44,7 @@ class Impl implements SlotIterator {
4444
private int row, column;
4545
private boolean allowOverride;
4646

47-
private Set<Pair<Integer, Integer>> blacklisted = new HashSet<>();
47+
private Set<SlotPos> blacklisted = new HashSet<>();
4848

4949
public Impl(InventoryContents contents, SmartInventory inv,
5050
Type type, int startRow, int startColumn) {
@@ -100,8 +100,8 @@ public SlotIterator previous() {
100100
break;
101101
}
102102
}
103-
while((row != 0 || column != 0) && blacklisted.contains(Pair.of(row, column))
104-
&& (allowOverride || !this.get().isPresent()));
103+
while((row != 0 || column != 0) && (blacklisted.contains(SlotPos.of(row, column))
104+
|| (!allowOverride && this.get().isPresent())));
105105

106106
return this;
107107
}
@@ -127,18 +127,23 @@ public SlotIterator next() {
127127
break;
128128
}
129129
}
130-
while(!ended() && blacklisted.contains(Pair.of(row, column))
131-
&& (allowOverride || !this.get().isPresent()));
130+
while(!ended() && (blacklisted.contains(SlotPos.of(row, column))
131+
|| (!allowOverride && this.get().isPresent())));
132132

133133
return this;
134134
}
135135

136136
@Override
137137
public SlotIterator blacklist(int row, int column) {
138-
this.blacklisted.add(Pair.of(row, column));
138+
this.blacklisted.add(SlotPos.of(row, column));
139139
return this;
140140
}
141141

142+
@Override
143+
public SlotIterator blacklist(SlotPos slotPos) {
144+
return blacklist(slotPos.getRow(), slotPos.getColumn());
145+
}
146+
142147
@Override
143148
public int row() { return row; }
144149

@@ -164,7 +169,7 @@ public boolean ended() {
164169
}
165170

166171
@Override
167-
public boolean allowOverride() { return allowOverride; }
172+
public boolean doesAllowOverride() { return allowOverride; }
168173

169174
@Override
170175
public SlotIterator allowOverride(boolean override) {
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package fr.minuskube.inv.content;
2+
3+
import org.apache.commons.lang3.builder.EqualsBuilder;
4+
import org.apache.commons.lang3.builder.HashCodeBuilder;
5+
6+
public class SlotPos {
7+
8+
private final int row;
9+
private final int column;
10+
11+
public SlotPos(int row, int column) {
12+
this.row = row;
13+
this.column = column;
14+
}
15+
16+
@Override
17+
public boolean equals(Object object) {
18+
if (this == object)
19+
return true;
20+
if (object == null || getClass() != object.getClass())
21+
return false;
22+
23+
SlotPos slotPos = (SlotPos) object;
24+
25+
return new EqualsBuilder()
26+
.append(row, slotPos.row)
27+
.append(column, slotPos.column)
28+
.isEquals();
29+
}
30+
31+
@Override
32+
public int hashCode() {
33+
return new HashCodeBuilder(17, 37)
34+
.append(row)
35+
.append(column)
36+
.toHashCode();
37+
}
38+
39+
public int getRow() { return row; }
40+
public int getColumn() { return column; }
41+
42+
public static SlotPos of(int row, int column) {
43+
return new SlotPos(row, column);
44+
}
45+
46+
}

0 commit comments

Comments
 (0)