From 293b8c08f1f2185343874826168f89e81618111b Mon Sep 17 00:00:00 2001 From: TehStoneMan Date: Sun, 5 Apr 2015 23:03:56 +1000 Subject: [PATCH] Sorting buttons now work Got the sorting buttons to work. Clicking on the arrow buttons on a filter panel will now move that filter up or down in the filter list. Without having made any changed to how filters are processed, filters higher in the list will naturally be processed before later filters, thereby making it like a priority system. For example, if an item matches two filters, the higher priority filter will take that item before the lower filter, in that way seperating a specific item from a broader (wildcard) specified filter. --- .../client/gui/GuiLogisticalSorter.java | 16 ++++++++++++++ src/main/java/mekanism/common/HashList.java | 15 +++++++++++++ .../tile/TileEntityLogisticalSorter.java | 21 +++++++++++++++---- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/mekanism/client/gui/GuiLogisticalSorter.java b/src/main/java/mekanism/client/gui/GuiLogisticalSorter.java index 12be32088..c923768d0 100644 --- a/src/main/java/mekanism/client/gui/GuiLogisticalSorter.java +++ b/src/main/java/mekanism/client/gui/GuiLogisticalSorter.java @@ -210,12 +210,28 @@ public class GuiLogisticalSorter extends GuiMekanism final int arrowX = filterX + filterW - 12; if( getFilterIndex() + i > 0 ) if( xAxis >= arrowX && xAxis <= arrowX + 10 && yAxis >= yStart + 14 && yAxis <= yStart + 20 ) + { // Process up button click + final ArrayList data = new ArrayList(); + data.add( 3 ); + data.add( getFilterIndex() + i ); + + Mekanism.packetHandler.sendToServer( new TileEntityMessage( Coord4D.get( tileEntity ), data ) ); + SoundHandler.playSound( "gui.button.press" ); return; + } if( getFilterIndex() + i < tileEntity.filters.size() - 1 ) if( xAxis >= arrowX && xAxis <= arrowX + 10 && yAxis >= yStart + 21 && yAxis <= yStart + 27 ) + { // Process down button click + final ArrayList data = new ArrayList(); + data.add( 4 ); + data.add( getFilterIndex() + i ); + + Mekanism.packetHandler.sendToServer( new TileEntityMessage( Coord4D.get( tileEntity ), data ) ); + SoundHandler.playSound( "gui.button.press" ); return; + } final TransporterFilter filter = tileEntity.filters.get( getFilterIndex() + i ); diff --git a/src/main/java/mekanism/common/HashList.java b/src/main/java/mekanism/common/HashList.java index 3c100f242..6d9305850 100644 --- a/src/main/java/mekanism/common/HashList.java +++ b/src/main/java/mekanism/common/HashList.java @@ -3,6 +3,8 @@ package mekanism.common; import java.util.ArrayList; import java.util.Iterator; +import mekanism.common.content.transporter.TransporterFilter; + public class HashList implements Iterable { private ArrayList list = new ArrayList(256); @@ -90,6 +92,19 @@ public class HashList implements Iterable { return list.size(); } + + public void swap( int source, int target ) + { + // Make sure both source and target ar legal values + if( source == target ) return; + if( source < 0 || target < 0 ) return; + if( source >= list.size() || target >= list.size() ) return; + + // Perform swap + T temp = list.get( source ); + list.set( source, list.get( target ) ); + list.set( target, temp ); + } @Override public int hashCode() diff --git a/src/main/java/mekanism/common/tile/TileEntityLogisticalSorter.java b/src/main/java/mekanism/common/tile/TileEntityLogisticalSorter.java index ce1677d40..43b5d0aed 100644 --- a/src/main/java/mekanism/common/tile/TileEntityLogisticalSorter.java +++ b/src/main/java/mekanism/common/tile/TileEntityLogisticalSorter.java @@ -3,6 +3,8 @@ package mekanism.common.tile; import java.util.ArrayList; import java.util.EnumSet; +import com.sun.media.jfxmedia.logging.Logger; + import mekanism.api.Coord4D; import mekanism.api.EnumColor; import mekanism.api.IFilterAccess; @@ -23,7 +25,6 @@ import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.util.InventoryUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.TransporterUtils; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.IInventory; @@ -33,7 +34,6 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.common.util.ForgeDirection; - import io.netty.buffer.ByteBuf; public class TileEntityLogisticalSorter extends TileEntityElectricBlock implements IRedstoneControl, IActiveState, IFilterAccess, ISustainedData @@ -292,7 +292,20 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen roundRobin = !roundRobin; rrIndex = 0; } - + else if(type == 3) + { + // Move filter up + int filterIndex = dataStream.readInt(); + filters.swap( filterIndex, filterIndex - 1 ); + openInventory(); + } + else if(type == 4) + { + // Move filter down + int filterIndex = dataStream.readInt(); + filters.swap( filterIndex, filterIndex + 1 ); + openInventory(); + } return; } @@ -461,7 +474,7 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen return stack; } - + @Override public boolean canExtractItem(int slotID, ItemStack itemstack, int side) {