Remove getItems() in GuiGrid, should fix null ptrs and flickering
This commit is contained in:
@@ -28,6 +28,8 @@ public class GuiGrid extends GuiBase {
|
|||||||
private ContainerGrid container;
|
private ContainerGrid container;
|
||||||
private TileGrid grid;
|
private TileGrid grid;
|
||||||
|
|
||||||
|
private List<StorageItem> items = new ArrayList<StorageItem>();
|
||||||
|
|
||||||
private GuiTextField searchField;
|
private GuiTextField searchField;
|
||||||
|
|
||||||
private int hoveringSlotId;
|
private int hoveringSlotId;
|
||||||
@@ -60,6 +62,56 @@ public class GuiGrid extends GuiBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(int x, int y) {
|
public void update(int x, int y) {
|
||||||
|
items.clear();
|
||||||
|
|
||||||
|
if (grid.isConnected()) {
|
||||||
|
items.addAll(grid.getController().getItems());
|
||||||
|
|
||||||
|
if (!searchField.getText().trim().isEmpty()) {
|
||||||
|
Iterator<StorageItem> t = items.iterator();
|
||||||
|
|
||||||
|
while (t.hasNext()) {
|
||||||
|
StorageItem item = t.next();
|
||||||
|
|
||||||
|
if (!item.toItemStack().getDisplayName().toLowerCase().contains(searchField.getText().toLowerCase())) {
|
||||||
|
t.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(items, new Comparator<StorageItem>() {
|
||||||
|
@Override
|
||||||
|
public int compare(StorageItem o1, StorageItem o2) {
|
||||||
|
if (o1 != null && o2 != null) {
|
||||||
|
if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_ASCENDING) {
|
||||||
|
return o2.toItemStack().getDisplayName().compareTo(o1.toItemStack().getDisplayName());
|
||||||
|
} else if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_DESCENDING) {
|
||||||
|
return o1.toItemStack().getDisplayName().compareTo(o2.toItemStack().getDisplayName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (grid.getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) {
|
||||||
|
Collections.sort(items, new Comparator<StorageItem>() {
|
||||||
|
@Override
|
||||||
|
public int compare(StorageItem o1, StorageItem o2) {
|
||||||
|
if (o1 != null && o2 != null) {
|
||||||
|
if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_ASCENDING) {
|
||||||
|
return Integer.valueOf(o2.getQuantity()).compareTo(o1.getQuantity());
|
||||||
|
} else if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_DESCENDING) {
|
||||||
|
return Integer.valueOf(o1.getQuantity()).compareTo(o2.getQuantity());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
scrollbar.setCanScroll(getRows() > getVisibleRows());
|
scrollbar.setCanScroll(getRows() > getVisibleRows());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,12 +124,12 @@ public class GuiGrid extends GuiBase {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int max = (int) Math.ceil((float) getItems().size() / (float) 9);
|
int max = (int) Math.ceil((float) items.size() / (float) 9);
|
||||||
|
|
||||||
return max < 0 ? 0 : max;
|
return max < 0 ? 0 : max;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isHoveringOverValidSlot(List<StorageItem> items) {
|
private boolean isHoveringOverValidSlot() {
|
||||||
return grid.isConnected() && isHoveringOverSlot() && hoveringSlotId < items.size();
|
return grid.isConnected() && isHoveringOverSlot() && hoveringSlotId < items.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,8 +176,6 @@ public class GuiGrid extends GuiBase {
|
|||||||
int x = 8;
|
int x = 8;
|
||||||
int y = 20;
|
int y = 20;
|
||||||
|
|
||||||
List<StorageItem> items = getItems();
|
|
||||||
|
|
||||||
hoveringSlotId = -1;
|
hoveringSlotId = -1;
|
||||||
|
|
||||||
int slot = getOffset() * 9;
|
int slot = getOffset() * 9;
|
||||||
@@ -189,7 +239,7 @@ public class GuiGrid extends GuiBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isHoveringOverValidSlot(items)) {
|
if (isHoveringOverValidSlot()) {
|
||||||
drawTooltip(mouseX, mouseY, items.get(hoveringSlotId).toItemStack());
|
drawTooltip(mouseX, mouseY, items.get(hoveringSlotId).toItemStack());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,64 +248,6 @@ public class GuiGrid extends GuiBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<StorageItem> getItems() {
|
|
||||||
List<StorageItem> items = new ArrayList<StorageItem>();
|
|
||||||
|
|
||||||
if (!grid.isConnected()) {
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized (grid.getController()) {
|
|
||||||
items.addAll(grid.getController().getItems());
|
|
||||||
|
|
||||||
if (!searchField.getText().trim().isEmpty()) {
|
|
||||||
Iterator<StorageItem> t = items.iterator();
|
|
||||||
|
|
||||||
while (t.hasNext()) {
|
|
||||||
StorageItem item = t.next();
|
|
||||||
|
|
||||||
if (!item.toItemStack().getDisplayName().toLowerCase().contains(searchField.getText().toLowerCase())) {
|
|
||||||
t.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Collections.sort(items, new Comparator<StorageItem>() {
|
|
||||||
@Override
|
|
||||||
public int compare(StorageItem o1, StorageItem o2) {
|
|
||||||
if (o1 != null && o2 != null) {
|
|
||||||
if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_ASCENDING) {
|
|
||||||
return o2.toItemStack().getDisplayName().compareTo(o1.toItemStack().getDisplayName());
|
|
||||||
} else if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_DESCENDING) {
|
|
||||||
return o1.toItemStack().getDisplayName().compareTo(o2.toItemStack().getDisplayName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (grid.getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) {
|
|
||||||
Collections.sort(items, new Comparator<StorageItem>() {
|
|
||||||
@Override
|
|
||||||
public int compare(StorageItem o1, StorageItem o2) {
|
|
||||||
if (o1 != null && o2 != null) {
|
|
||||||
if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_ASCENDING) {
|
|
||||||
return Integer.valueOf(o2.getQuantity()).compareTo(o1.getQuantity());
|
|
||||||
} else if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_DESCENDING) {
|
|
||||||
return Integer.valueOf(o1.getQuantity()).compareTo(o2.getQuantity());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(int mouseX, int mouseY, int clickedButton) throws IOException {
|
public void mouseClicked(int mouseX, int mouseY, int clickedButton) throws IOException {
|
||||||
super.mouseClicked(mouseX, mouseY, clickedButton);
|
super.mouseClicked(mouseX, mouseY, clickedButton);
|
||||||
@@ -267,7 +259,7 @@ public class GuiGrid extends GuiBase {
|
|||||||
|
|
||||||
if (isHoveringOverSlot() && container.getPlayer().inventory.getItemStack() != null) {
|
if (isHoveringOverSlot() && container.getPlayer().inventory.getItemStack() != null) {
|
||||||
RefinedStorage.NETWORK.sendToServer(new MessageStoragePush(controller.getPos().getX(), controller.getPos().getY(), controller.getPos().getZ(), -1, clickedButton == 1));
|
RefinedStorage.NETWORK.sendToServer(new MessageStoragePush(controller.getPos().getX(), controller.getPos().getY(), controller.getPos().getZ(), -1, clickedButton == 1));
|
||||||
} else if (isHoveringOverValidSlot(getItems()) && container.getPlayer().inventory.getItemStack() == null) {
|
} else if (isHoveringOverValidSlot() && container.getPlayer().inventory.getItemStack() == null) {
|
||||||
boolean half = clickedButton == 1;
|
boolean half = clickedButton == 1;
|
||||||
boolean shift = GuiScreen.isShiftKeyDown();
|
boolean shift = GuiScreen.isShiftKeyDown();
|
||||||
boolean one = clickedButton == 2;
|
boolean one = clickedButton == 2;
|
||||||
|
|||||||
Reference in New Issue
Block a user