Fixed crash when quickly toggling sorting direction in Grid, fixes #186

This commit is contained in:
Raoul Van den Berge
2016-07-22 14:33:01 +02:00
parent b3885bf90d
commit 224e5e6eff
12 changed files with 80 additions and 49 deletions

View File

@@ -1,5 +1,10 @@
# Refined Storage Changelog # Refined Storage Changelog
### 0.8.13
**Bugfixes**
- Fixed rendering crash with Disk Drive
- Fixed crash when quickly toggling sorting direction in Grid
### 0.8.12 ### 0.8.12
**Bugfixes** **Bugfixes**
- Fixed dupe bug when shift clicking output slot in grid - Fixed dupe bug when shift clicking output slot in grid

View File

@@ -14,7 +14,7 @@ import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import refinedstorage.apiimpl.storage.ClientStack; import refinedstorage.gui.grid.ClientStack;
import refinedstorage.proxy.CommonProxy; import refinedstorage.proxy.CommonProxy;
import java.util.ArrayList; import java.util.ArrayList;

View File

@@ -9,6 +9,7 @@ import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.IGuiHandler; import net.minecraftforge.fml.common.network.IGuiHandler;
import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageGui;
import refinedstorage.container.*; import refinedstorage.container.*;
import refinedstorage.gui.grid.GuiGrid;
import refinedstorage.tile.*; import refinedstorage.tile.*;
import refinedstorage.tile.controller.TileController; import refinedstorage.tile.controller.TileController;
import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.TileGrid;

View File

@@ -1,4 +1,4 @@
package refinedstorage.apiimpl.storage; package refinedstorage.gui.grid;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@@ -12,12 +12,6 @@ public class ClientStack {
private ItemStack stack; private ItemStack stack;
private boolean craftable; private boolean craftable;
public ClientStack(int id, ItemStack stack, boolean craftable) {
this.id = id;
this.stack = stack;
this.craftable = craftable;
}
public ClientStack(ByteBuf buf) { public ClientStack(ByteBuf buf) {
stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt()); stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt());
stack.setTagCompound(ByteBufUtils.readTag(buf)); stack.setTagCompound(ByteBufUtils.readTag(buf));

View File

@@ -1,4 +1,4 @@
package refinedstorage.gui; package refinedstorage.gui.grid;
import com.google.common.primitives.Ints; import com.google.common.primitives.Ints;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
@@ -8,8 +8,8 @@ import net.minecraftforge.fml.client.FMLClientHandler;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.apiimpl.network.GridHandler; import refinedstorage.apiimpl.network.GridHandler;
import refinedstorage.apiimpl.storage.ClientStack;
import refinedstorage.container.ContainerCraftingSettings; import refinedstorage.container.ContainerCraftingSettings;
import refinedstorage.gui.GuiBase;
import refinedstorage.network.MessageGridCraftingStart; import refinedstorage.network.MessageGridCraftingStart;
import java.io.IOException; import java.io.IOException;

View File

@@ -1,4 +1,4 @@
package refinedstorage.gui; package refinedstorage.gui.grid;
import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreen;
@@ -13,9 +13,12 @@ import net.minecraftforge.fml.common.FMLCommonHandler;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.api.network.GridExtractFlags; import refinedstorage.api.network.GridExtractFlags;
import refinedstorage.apiimpl.storage.ClientStack;
import refinedstorage.block.EnumGridType; import refinedstorage.block.EnumGridType;
import refinedstorage.container.ContainerGrid; import refinedstorage.container.ContainerGrid;
import refinedstorage.gui.GuiBase;
import refinedstorage.gui.Scrollbar;
import refinedstorage.gui.grid.sorting.GridSortingName;
import refinedstorage.gui.grid.sorting.GridSortingQuantity;
import refinedstorage.gui.sidebutton.*; import refinedstorage.gui.sidebutton.*;
import refinedstorage.jei.RefinedStorageJEIPlugin; import refinedstorage.jei.RefinedStorageJEIPlugin;
import refinedstorage.network.MessageGridCraftingClear; import refinedstorage.network.MessageGridCraftingClear;
@@ -30,38 +33,8 @@ import java.io.IOException;
import java.util.*; import java.util.*;
public class GuiGrid extends GuiBase { public class GuiGrid extends GuiBase {
private Comparator<ClientStack> quantityComparator = new Comparator<ClientStack>() { private GridSortingQuantity quantitySorting = new GridSortingQuantity();
@Override private GridSortingName nameSorting = new GridSortingName();
public int compare(ClientStack left, ClientStack right) {
int leftSize = left.getStack().stackSize;
int rightSize = right.getStack().stackSize;
if (leftSize == rightSize) {
return 0;
}
if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_ASCENDING) {
return (leftSize > rightSize) ? 1 : -1;
} else if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_DESCENDING) {
return (rightSize > leftSize) ? 1 : -1;
}
return 0;
}
};
private Comparator<ClientStack> nameComparator = new Comparator<ClientStack>() {
@Override
public int compare(ClientStack left, ClientStack right) {
if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_ASCENDING) {
return left.getStack().getDisplayName().compareTo(right.getStack().getDisplayName());
} else if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_DESCENDING) {
return right.getStack().getDisplayName().compareTo(left.getStack().getDisplayName());
}
return 0;
}
};
private GuiTextField searchField; private GuiTextField searchField;
@@ -171,10 +144,13 @@ public class GuiGrid extends GuiBase {
} }
} }
Collections.sort(items, nameComparator); nameSorting.setSortingDirection(grid.getSortingDirection());
quantitySorting.setSortingDirection(grid.getSortingDirection());
Collections.sort(items, nameSorting);
if (grid.getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) { if (grid.getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) {
Collections.sort(items, quantityComparator); Collections.sort(items, quantitySorting);
} }
} }

View File

@@ -0,0 +1,13 @@
package refinedstorage.gui.grid.sorting;
import refinedstorage.gui.grid.ClientStack;
import java.util.Comparator;
public abstract class GridSorting implements Comparator<ClientStack> {
protected int sortingDirection;
public void setSortingDirection(int sortingDirection) {
this.sortingDirection = sortingDirection;
}
}

View File

@@ -0,0 +1,20 @@
package refinedstorage.gui.grid.sorting;
import refinedstorage.gui.grid.ClientStack;
import refinedstorage.tile.grid.TileGrid;
public class GridSortingName extends GridSorting {
@Override
public int compare(ClientStack left, ClientStack right) {
String leftName = left.getStack().getDisplayName();
String rightName = right.getStack().getDisplayName();
if (sortingDirection == TileGrid.SORTING_DIRECTION_ASCENDING) {
return leftName.compareTo(rightName);
} else if (sortingDirection == TileGrid.SORTING_DIRECTION_DESCENDING) {
return rightName.compareTo(leftName);
}
return 0;
}
}

View File

@@ -0,0 +1,22 @@
package refinedstorage.gui.grid.sorting;
import refinedstorage.gui.grid.ClientStack;
import refinedstorage.tile.grid.TileGrid;
public class GridSortingQuantity extends GridSorting {
@Override
public int compare(ClientStack left, ClientStack right) {
int leftSize = left.getStack().stackSize;
int rightSize = right.getStack().stackSize;
if (leftSize != rightSize) {
if (sortingDirection == TileGrid.SORTING_DIRECTION_ASCENDING) {
return (leftSize > rightSize) ? 1 : -1;
} else if (sortingDirection == TileGrid.SORTING_DIRECTION_DESCENDING) {
return (rightSize > leftSize) ? 1 : -1;
}
}
return 0;
}
}

View File

@@ -3,7 +3,7 @@ package refinedstorage.gui.sidebutton;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.gui.GuiBase; import refinedstorage.gui.GuiBase;
import refinedstorage.gui.GuiGrid; import refinedstorage.gui.grid.GuiGrid;
import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.TileGrid;
public class SideButtonGridSearchBoxMode extends SideButton { public class SideButtonGridSearchBoxMode extends SideButton {

View File

@@ -7,7 +7,7 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkMaster;
import refinedstorage.apiimpl.storage.ClientStack; import refinedstorage.gui.grid.ClientStack;
public class MessageGridDelta implements IMessage, IMessageHandler<MessageGridDelta, IMessage> { public class MessageGridDelta implements IMessage, IMessageHandler<MessageGridDelta, IMessage> {
private INetworkMaster network; private INetworkMaster network;

View File

@@ -7,7 +7,7 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkMaster;
import refinedstorage.apiimpl.storage.ClientStack; import refinedstorage.gui.grid.ClientStack;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;