Bring grid sorting performance back up to par with previous version and update changelog
This commit is contained in:
@@ -1,5 +1,10 @@
|
|||||||
# Refined Storage Changelog
|
# Refined Storage Changelog
|
||||||
|
|
||||||
|
### 1.5.33
|
||||||
|
- Added Crafter Manager (raoulvdberge)
|
||||||
|
- Fixed Disk Manipulator not extracting items (ineternet)
|
||||||
|
- Various internal refactors (raoulvdberge)
|
||||||
|
|
||||||
### 1.5.32
|
### 1.5.32
|
||||||
- Added Spanish translation (Samuelrock)
|
- Added Spanish translation (Samuelrock)
|
||||||
- Fixed issue where the Pattern Grid can only overwrite patterns when blank ones are present (ineternet)
|
- Fixed issue where the Pattern Grid can only overwrite patterns when blank ones are present (ineternet)
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class ContainerCrafterManager extends ContainerBase {
|
public class ContainerCrafterManager extends ContainerBase {
|
||||||
public class Listener implements IContainerListener {
|
public class CrafterManagerListener implements IContainerListener {
|
||||||
private IContainerListener base;
|
private IContainerListener base;
|
||||||
private boolean receivedContainerData;
|
private boolean receivedContainerData;
|
||||||
|
|
||||||
public Listener(IContainerListener base) {
|
public CrafterManagerListener(IContainerListener base) {
|
||||||
this.base = base;
|
this.base = base;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,16 +35,16 @@ public class ContainerCrafterManager extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendAllContents(Container containerToSend, NonNullList<ItemStack> itemsList) {
|
public void sendAllContents(Container container, NonNullList<ItemStack> items) {
|
||||||
if (receivedContainerData) {
|
if (receivedContainerData) {
|
||||||
base.sendAllContents(containerToSend, itemsList);
|
base.sendAllContents(container, items);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendSlotContents(Container containerToSend, int slotInd, ItemStack stack) {
|
public void sendSlotContents(Container container, int slotInd, ItemStack stack) {
|
||||||
if (receivedContainerData) {
|
if (receivedContainerData) {
|
||||||
base.sendSlotContents(containerToSend, slotInd, stack);
|
base.sendSlotContents(container, slotInd, stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,13 +53,13 @@ public class ContainerCrafterManager extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendWindowProperty(Container containerIn, int varToUpdate, int newValue) {
|
public void sendWindowProperty(Container container, int varToUpdate, int newValue) {
|
||||||
base.sendWindowProperty(containerIn, varToUpdate, newValue);
|
base.sendWindowProperty(container, varToUpdate, newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendAllWindowProperties(Container containerIn, IInventory inventory) {
|
public void sendAllWindowProperties(Container container, IInventory inventory) {
|
||||||
base.sendAllWindowProperties(containerIn, inventory);
|
base.sendAllWindowProperties(container, inventory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ public class ContainerCrafterManager extends ContainerBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addListener(IContainerListener listener) {
|
public void addListener(IContainerListener listener) {
|
||||||
super.addListener(new Listener(listener));
|
super.addListener(new CrafterManagerListener(listener));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<IContainerListener> getListeners() {
|
public List<IContainerListener> getListeners() {
|
||||||
@@ -116,7 +116,6 @@ public class ContainerCrafterManager extends ContainerBase {
|
|||||||
int x = 8;
|
int x = 8;
|
||||||
|
|
||||||
for (Map.Entry<String, Integer> entry : containerData.entrySet()) {
|
for (Map.Entry<String, Integer> entry : containerData.entrySet()) {
|
||||||
// @todo: Test on servers
|
|
||||||
boolean visible = I18n.format(entry.getKey()).toLowerCase().contains(display.getSearchFieldText().toLowerCase());
|
boolean visible = I18n.format(entry.getKey()).toLowerCase().contains(display.getSearchFieldText().toLowerCase());
|
||||||
|
|
||||||
IItemHandlerModifiable dummy;
|
IItemHandlerModifiable dummy;
|
||||||
|
|||||||
@@ -8,12 +8,73 @@ import com.raoulvdberge.refinedstorage.gui.grid.sorting.GridSorterName;
|
|||||||
import com.raoulvdberge.refinedstorage.gui.grid.sorting.IGridSorter;
|
import com.raoulvdberge.refinedstorage.gui.grid.sorting.IGridSorter;
|
||||||
import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack;
|
import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public abstract class GridViewBase implements IGridView {
|
public abstract class GridViewBase implements IGridView {
|
||||||
protected void sortAndFilter(GuiGrid gui, List<IGridStack> stacks, List<IGridSorter> sorters) {
|
private GuiGrid gui;
|
||||||
|
private boolean canCraft;
|
||||||
|
|
||||||
|
private List<IGridSorter> sorters;
|
||||||
|
private SorterThread sorterThread = new SorterThread();
|
||||||
|
|
||||||
|
private List<IGridStack> stacks;
|
||||||
|
protected Map<Integer, IGridStack> map = new HashMap<>();
|
||||||
|
|
||||||
|
public GridViewBase(GuiGrid gui, List<IGridSorter> sorters) {
|
||||||
|
this.gui = gui;
|
||||||
|
this.sorters = sorters;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<IGridStack> getStacks() {
|
||||||
|
return stacks;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sort() {
|
||||||
|
if (!sorterThread.sorting) {
|
||||||
|
new Thread(sorterThread, "RS grid sorting").start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateUI(GuiGrid gui) {
|
||||||
|
if (gui.getScrollbar() != null) {
|
||||||
|
gui.getScrollbar().setEnabled(gui.getRows() > gui.getVisibleRows());
|
||||||
|
gui.getScrollbar().setMaxOffset(gui.getRows() - gui.getVisibleRows());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gui.getTabPageLeft() != null) {
|
||||||
|
gui.getTabPageLeft().visible = gui.getGrid().getTotalTabPages() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gui.getTabPageRight() != null) {
|
||||||
|
gui.getTabPageRight().visible = gui.getGrid().getTotalTabPages() > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCanCraft(boolean canCraft) {
|
||||||
|
this.canCraft = canCraft;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canCraft() {
|
||||||
|
return canCraft;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SorterThread implements Runnable {
|
||||||
|
private boolean sorting;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
this.sorting = true;
|
||||||
|
|
||||||
|
List<IGridStack> stacks = new ArrayList<>();
|
||||||
|
|
||||||
|
if (gui.getGrid().isActive()) {
|
||||||
|
stacks.addAll(map.values());
|
||||||
|
|
||||||
IGrid grid = gui.getGrid();
|
IGrid grid = gui.getGrid();
|
||||||
|
|
||||||
List<Predicate<IGridStack>> filters = GridFilterParser.getFilters(
|
List<Predicate<IGridStack>> filters = GridFilterParser.getFilters(
|
||||||
@@ -45,18 +106,11 @@ public abstract class GridViewBase implements IGridView {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateUI(GuiGrid gui) {
|
GridViewBase.this.stacks = stacks;
|
||||||
if (gui.getScrollbar() != null) {
|
|
||||||
gui.getScrollbar().setEnabled(gui.getRows() > gui.getVisibleRows());
|
|
||||||
gui.getScrollbar().setMaxOffset(gui.getRows() - gui.getVisibleRows());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gui.getTabPageLeft() != null) {
|
updateUI(gui);
|
||||||
gui.getTabPageLeft().visible = gui.getGrid().getTotalTabPages() > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gui.getTabPageRight() != null) {
|
this.sorting = false;
|
||||||
gui.getTabPageRight().visible = gui.getGrid().getTotalTabPages() > 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,26 +5,11 @@ import com.raoulvdberge.refinedstorage.gui.grid.sorting.IGridSorter;
|
|||||||
import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackFluid;
|
import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackFluid;
|
||||||
import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack;
|
import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class GridViewFluid extends GridViewBase {
|
public class GridViewFluid extends GridViewBase {
|
||||||
private Map<Integer, GridStackFluid> map = new HashMap<>();
|
|
||||||
private List<IGridStack> stacks;
|
|
||||||
private GuiGrid gui;
|
|
||||||
private List<IGridSorter> sorters;
|
|
||||||
private boolean canCraft;
|
|
||||||
|
|
||||||
public GridViewFluid(GuiGrid gui, List<IGridSorter> sorters) {
|
public GridViewFluid(GuiGrid gui, List<IGridSorter> sorters) {
|
||||||
this.sorters = sorters;
|
super(gui, sorters);
|
||||||
this.gui = gui;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<IGridStack> getStacks() {
|
|
||||||
return stacks;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -32,16 +17,16 @@ public class GridViewFluid extends GridViewBase {
|
|||||||
map.clear();
|
map.clear();
|
||||||
|
|
||||||
for (IGridStack stack : stacks) {
|
for (IGridStack stack : stacks) {
|
||||||
map.put(stack.getHash(), (GridStackFluid) stack);
|
map.put(stack.getHash(), stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postChange(IGridStack stack, int delta) {
|
public void postChange(IGridStack stack, int delta) {
|
||||||
GridStackFluid existing = map.get(stack.getHash());
|
GridStackFluid existing = (GridStackFluid) map.get(stack.getHash());
|
||||||
|
|
||||||
if (existing == null) {
|
if (existing == null) {
|
||||||
map.put(stack.getHash(), (GridStackFluid) stack);
|
map.put(stack.getHash(), stack);
|
||||||
} else {
|
} else {
|
||||||
if (existing.getStack().amount + delta <= 0) {
|
if (existing.getStack().amount + delta <= 0) {
|
||||||
map.remove(existing.getHash());
|
map.remove(existing.getHash());
|
||||||
@@ -52,29 +37,4 @@ public class GridViewFluid extends GridViewBase {
|
|||||||
existing.setTrackerEntry(stack.getTrackerEntry());
|
existing.setTrackerEntry(stack.getTrackerEntry());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCanCraft(boolean canCraft) {
|
|
||||||
this.canCraft = canCraft;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canCraft() {
|
|
||||||
return canCraft;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sort() {
|
|
||||||
List<IGridStack> stacks = new ArrayList<>();
|
|
||||||
|
|
||||||
if (gui.getGrid().isActive()) {
|
|
||||||
stacks.addAll(map.values());
|
|
||||||
|
|
||||||
new Thread(() -> sortAndFilter(gui, stacks, sorters)).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.stacks = stacks;
|
|
||||||
|
|
||||||
updateUI(gui);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,26 +5,11 @@ import com.raoulvdberge.refinedstorage.gui.grid.sorting.IGridSorter;
|
|||||||
import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackItem;
|
import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackItem;
|
||||||
import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack;
|
import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class GridViewItem extends GridViewBase {
|
public class GridViewItem extends GridViewBase {
|
||||||
private Map<Integer, GridStackItem> map = new HashMap<>();
|
|
||||||
private List<IGridStack> stacks;
|
|
||||||
private GuiGrid gui;
|
|
||||||
private List<IGridSorter> sorters;
|
|
||||||
private boolean canCraft;
|
|
||||||
|
|
||||||
public GridViewItem(GuiGrid gui, List<IGridSorter> sorters) {
|
public GridViewItem(GuiGrid gui, List<IGridSorter> sorters) {
|
||||||
this.gui = gui;
|
super(gui, sorters);
|
||||||
this.sorters = sorters;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<IGridStack> getStacks() {
|
|
||||||
return stacks;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -37,18 +22,18 @@ public class GridViewItem extends GridViewBase {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
map.put(stack.getHash(), (GridStackItem) stack);
|
map.put(stack.getHash(), stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postChange(IGridStack stack, int delta) {
|
public void postChange(IGridStack stack, int delta) {
|
||||||
GridStackItem existing = map.get(stack.getHash());
|
GridStackItem existing = (GridStackItem) map.get(stack.getHash());
|
||||||
|
|
||||||
if (existing == null) {
|
if (existing == null) {
|
||||||
((GridStackItem) stack).getStack().setCount(delta);
|
((GridStackItem) stack).getStack().setCount(delta);
|
||||||
|
|
||||||
map.put(stack.getHash(), (GridStackItem) stack);
|
map.put(stack.getHash(), stack);
|
||||||
} else {
|
} else {
|
||||||
if (existing.getStack().getCount() + delta <= 0) {
|
if (existing.getStack().getCount() + delta <= 0) {
|
||||||
if (existing.isCraftable()) {
|
if (existing.isCraftable()) {
|
||||||
@@ -69,29 +54,4 @@ public class GridViewItem extends GridViewBase {
|
|||||||
existing.setTrackerEntry(stack.getTrackerEntry());
|
existing.setTrackerEntry(stack.getTrackerEntry());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCanCraft(boolean canCraft) {
|
|
||||||
this.canCraft = canCraft;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canCraft() {
|
|
||||||
return canCraft;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sort() {
|
|
||||||
List<IGridStack> stacks = new ArrayList<>();
|
|
||||||
|
|
||||||
if (gui.getGrid().isActive()) {
|
|
||||||
stacks.addAll(map.values());
|
|
||||||
|
|
||||||
new Thread(() -> sortAndFilter(gui, stacks, sorters)).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.stacks = stacks;
|
|
||||||
|
|
||||||
updateUI(gui);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ public class MessageCrafterManagerRequestSlotData extends MessageHandlerPlayerTo
|
|||||||
protected void handle(MessageCrafterManagerRequestSlotData message, EntityPlayerMP player) {
|
protected void handle(MessageCrafterManagerRequestSlotData message, EntityPlayerMP player) {
|
||||||
if (player.openContainer instanceof ContainerCrafterManager) {
|
if (player.openContainer instanceof ContainerCrafterManager) {
|
||||||
for (IContainerListener listener : ((ContainerCrafterManager) player.openContainer).getListeners()) {
|
for (IContainerListener listener : ((ContainerCrafterManager) player.openContainer).getListeners()) {
|
||||||
ContainerCrafterManager.Listener crafterListener = (ContainerCrafterManager.Listener) listener;
|
ContainerCrafterManager.CrafterManagerListener crafterCrafterManagerListener = (ContainerCrafterManager.CrafterManagerListener) listener;
|
||||||
|
|
||||||
if (crafterListener.getPlayer() == player) {
|
if (crafterCrafterManagerListener.getPlayer() == player) {
|
||||||
crafterListener.setReceivedContainerData();
|
crafterCrafterManagerListener.setReceivedContainerData();
|
||||||
crafterListener.sendAllContents(player.openContainer, player.openContainer.getInventory());
|
crafterCrafterManagerListener.sendAllContents(player.openContainer, player.openContainer.getInventory());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user