diff --git a/common/mekanism/client/gui/GuiItemStackFilter.java b/common/mekanism/client/gui/GuiItemStackFilter.java index eccd8da0d..4d1bf2882 100644 --- a/common/mekanism/client/gui/GuiItemStackFilter.java +++ b/common/mekanism/client/gui/GuiItemStackFilter.java @@ -8,6 +8,7 @@ import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; import mekanism.common.inventory.container.ContainerFilter; import mekanism.common.network.PacketLogisticalSorterGui; +import mekanism.common.network.PacketNewFilter; import mekanism.common.network.PacketRobit; import mekanism.common.network.PacketRobit.RobitPacketType; import mekanism.common.tileentity.TileEntityLogisticalSorter; @@ -26,6 +27,8 @@ public class GuiItemStackFilter extends GuiMekanism { public TileEntityLogisticalSorter tileEntity; + public boolean isNew = false; + public ItemStackFilter filter = new ItemStackFilter(); public String status = EnumColor.DARK_GREEN + "All OK"; @@ -45,6 +48,8 @@ public class GuiItemStackFilter extends GuiMekanism super(new ContainerFilter(player.inventory)); tileEntity = tentity; + isNew = true; + filter.color = TransporterUtils.colors.get(0); } @@ -73,7 +78,16 @@ public class GuiItemStackFilter extends GuiMekanism if(guibutton.id == 0) { - //PacketFilterUpdate TODO + if(filter.itemType != null) + { + PacketHandler.sendPacket(Transmission.SERVER, new PacketNewFilter().setParams(Object3D.get(tileEntity), filter)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(Object3D.get(tileEntity), 0)); + mc.thePlayer.openGui(Mekanism.instance, 26, mc.theWorld, tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + } + else { + status = EnumColor.DARK_RED + "No item"; + ticker = 20; + } } } @@ -83,7 +97,7 @@ public class GuiItemStackFilter extends GuiMekanism int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); - fontRenderer.drawString("Edit ItemStack Filter", 43, 6, 0x404040); + fontRenderer.drawString((isNew ? "New" : "Edit") + " ItemStack Filter", 43, 6, 0x404040); fontRenderer.drawString("Status: " + status, 35, 20, 0x00CD00); fontRenderer.drawString("ItemStack Details:", 35, 32, 0x00CD00); diff --git a/common/mekanism/client/gui/GuiLogisticalSorter.java b/common/mekanism/client/gui/GuiLogisticalSorter.java index 89a9a7bc1..384ba0aa9 100644 --- a/common/mekanism/client/gui/GuiLogisticalSorter.java +++ b/common/mekanism/client/gui/GuiLogisticalSorter.java @@ -1,12 +1,16 @@ package mekanism.client.gui; +import java.util.ArrayList; + import mekanism.api.Object3D; -import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; import mekanism.common.inventory.container.ContainerNull; import mekanism.common.network.PacketLogisticalSorterGui; import mekanism.common.tileentity.TileEntityLogisticalSorter; +import mekanism.common.transporter.ItemStackFilter; +import mekanism.common.transporter.OreDictFilter; +import mekanism.common.transporter.TransporterFilter; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.client.gui.GuiButton; @@ -73,7 +77,9 @@ public class GuiLogisticalSorter extends GuiMekanism fontRenderer.drawString("Logistical Sorter", 43, 6, 0x404040); fontRenderer.drawString("Filters:", 11, 17, 0x00CD00); - fontRenderer.drawString("- " + tileEntity.filters.size(), 11, 26, 0x00CD00); + fontRenderer.drawString("T: " + tileEntity.filters.size(), 11, 26, 0x00CD00); + fontRenderer.drawString("IS: " + getItemStackFilters().size(), 11, 35, 0x00CD00); + fontRenderer.drawString("OD: " + getOreDictFilters().size(), 11, 44, 0x00CD00); super.drawGuiContainerForegroundLayer(mouseX, mouseY); } @@ -89,4 +95,34 @@ public class GuiLogisticalSorter extends GuiMekanism int guiHeight = (height - ySize) / 2; drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize); } + + public ArrayList getItemStackFilters() + { + ArrayList list = new ArrayList(); + + for(TransporterFilter filter : tileEntity.filters) + { + if(filter instanceof ItemStackFilter) + { + list.add(filter); + } + } + + return list; + } + + public ArrayList getOreDictFilters() + { + ArrayList list = new ArrayList(); + + for(TransporterFilter filter : tileEntity.filters) + { + if(filter instanceof OreDictFilter) + { + list.add(filter); + } + } + + return list; + } } \ No newline at end of file diff --git a/common/mekanism/client/gui/GuiOreDictFilter.java b/common/mekanism/client/gui/GuiOreDictFilter.java index f85bb6c7c..b0a9cd9e8 100644 --- a/common/mekanism/client/gui/GuiOreDictFilter.java +++ b/common/mekanism/client/gui/GuiOreDictFilter.java @@ -11,6 +11,7 @@ import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; import mekanism.common.inventory.container.ContainerFilter; import mekanism.common.network.PacketLogisticalSorterGui; +import mekanism.common.network.PacketNewFilter; import mekanism.common.tileentity.TileEntityLogisticalSorter; import mekanism.common.transporter.OreDictFilter; import mekanism.common.util.MekanismUtils; @@ -30,6 +31,8 @@ public class GuiOreDictFilter extends GuiMekanism { public TileEntityLogisticalSorter tileEntity; + public boolean isNew = false; + public OreDictFilter filter = new OreDictFilter(); private GuiTextField oreDictText; @@ -59,6 +62,8 @@ public class GuiOreDictFilter extends GuiMekanism super(new ContainerFilter(player.inventory)); tileEntity = tentity; + isNew = true; + filter.color = TransporterUtils.colors.get(0); } @@ -114,7 +119,16 @@ public class GuiOreDictFilter extends GuiMekanism if(guibutton.id == 0) { - //PacketFilterUpdate TODO + if(filter.oreDictName != null && !filter.oreDictName.isEmpty()) + { + PacketHandler.sendPacket(Transmission.SERVER, new PacketNewFilter().setParams(Object3D.get(tileEntity), filter)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(Object3D.get(tileEntity), 0)); + mc.thePlayer.openGui(Mekanism.instance, 26, mc.theWorld, tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + } + else { + status = EnumColor.DARK_RED + "No key"; + ticker = 20; + } } } @@ -124,7 +138,7 @@ public class GuiOreDictFilter extends GuiMekanism int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); - fontRenderer.drawString("Edit OreDict Filter", 43, 6, 0x404040); + fontRenderer.drawString((isNew ? "New" : "Edit") + " OreDict Filter", 43, 6, 0x404040); fontRenderer.drawString("Status: " + status, 35, 20, 0x00CD00); fontRenderer.drawString("Key: " + filter.oreDictName, 35, 32, 0x00CD00); diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 8773e0a47..499a67e75 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -59,7 +59,7 @@ import mekanism.common.network.PacketDataRequest; import mekanism.common.network.PacketDigitUpdate; import mekanism.common.network.PacketElectricBowState; import mekanism.common.network.PacketElectricChest; -import mekanism.common.network.PacketFilterUpdate; +import mekanism.common.network.PacketNewFilter; import mekanism.common.network.PacketLogisticalSorterGui; import mekanism.common.network.PacketPortableTeleport; import mekanism.common.network.PacketPortalFX; @@ -1139,7 +1139,7 @@ public class Mekanism PacketHandler.registerPacket(PacketRedstoneControl.class); PacketHandler.registerPacket(PacketWalkieTalkieState.class); PacketHandler.registerPacket(PacketLogisticalSorterGui.class); - PacketHandler.registerPacket(PacketFilterUpdate.class); + PacketHandler.registerPacket(PacketNewFilter.class); //Donators donators.add("mrgreaper"); diff --git a/common/mekanism/common/network/PacketFilterUpdate.java b/common/mekanism/common/network/PacketNewFilter.java similarity index 62% rename from common/mekanism/common/network/PacketFilterUpdate.java rename to common/mekanism/common/network/PacketNewFilter.java index 8f42dfee4..bd6b69efd 100644 --- a/common/mekanism/common/network/PacketFilterUpdate.java +++ b/common/mekanism/common/network/PacketNewFilter.java @@ -1,10 +1,13 @@ package mekanism.common.network; import java.io.DataOutputStream; +import java.util.ArrayList; import mekanism.api.Object3D; -import mekanism.common.Mekanism; +import mekanism.common.PacketHandler; +import mekanism.common.PacketHandler.Transmission; import mekanism.common.tileentity.TileEntityLogisticalSorter; +import mekanism.common.transporter.TransporterFilter; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; @@ -12,12 +15,14 @@ import com.google.common.io.ByteArrayDataInput; import cpw.mods.fml.common.FMLCommonHandler; -public class PacketFilterUpdate implements IMekanismPacket +public class PacketNewFilter implements IMekanismPacket { public Object3D object3D; public int type; + public TransporterFilter filter; + @Override public String getName() { @@ -28,7 +33,7 @@ public class PacketFilterUpdate implements IMekanismPacket public IMekanismPacket setParams(Object... data) { object3D = (Object3D)data[0]; - type = (Integer)data[1]; + filter = (TransporterFilter)data[1]; return this; } @@ -48,7 +53,12 @@ public class PacketFilterUpdate implements IMekanismPacket if(worldServer != null && worldServer.getBlockTileEntity(x, y, z) instanceof TileEntityLogisticalSorter) { - player.openGui(Mekanism.instance, 26+type, worldServer, x, y, z); + TileEntityLogisticalSorter sorter = (TileEntityLogisticalSorter)worldServer.getBlockTileEntity(x, y, z); + TransporterFilter filter = TransporterFilter.readFromPacket(dataStream); + + sorter.filters.add(filter); + + PacketHandler.sendPacket(Transmission.SINGLE_CLIENT, new PacketTileEntity().setParams(Object3D.get(sorter), sorter.getFilterPacket(new ArrayList())), player); } } @@ -61,6 +71,8 @@ public class PacketFilterUpdate implements IMekanismPacket dataStream.writeInt(object3D.dimensionId); - dataStream.writeInt(type); + ArrayList data = new ArrayList(); + filter.write(data); + PacketHandler.encode(data.toArray(), dataStream); } } diff --git a/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java b/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java index 922e8d3c9..ead1687c5 100644 --- a/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java +++ b/common/mekanism/common/tileentity/TileEntityLogisticalSorter.java @@ -97,6 +97,11 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen delayTicks = 10; } } + + if(playersUsing.size() > 0) + { + PacketHandler.sendPacket(Transmission.CLIENTS_RANGE, new PacketTileEntity().setParams(Object3D.get(this), getGenericPacket(new ArrayList())), Object3D.get(this), 50D); + } } } @@ -145,19 +150,42 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen { super.handlePacketData(dataStream); - isActive = dataStream.readBoolean(); - controlType = RedstoneControl.values()[dataStream.readInt()]; + int type = dataStream.readInt(); - filters.clear(); - - int amount = dataStream.readInt(); - - for(int i = 0; i < amount; i++) + if(type == 0) { - filters.add(TransporterFilter.readFromPacket(dataStream)); + isActive = dataStream.readBoolean(); + controlType = RedstoneControl.values()[dataStream.readInt()]; + + filters.clear(); + + int amount = dataStream.readInt(); + + for(int i = 0; i < amount; i++) + { + filters.add(TransporterFilter.readFromPacket(dataStream)); + } + + MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord); + } + else if(type == 1) + { + isActive = dataStream.readBoolean(); + controlType = RedstoneControl.values()[dataStream.readInt()]; + + MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord); + } + else if(type == 2) + { + filters.clear(); + + int amount = dataStream.readInt(); + + for(int i = 0; i < amount; i++) + { + filters.add(TransporterFilter.readFromPacket(dataStream)); + } } - - MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord); } @Override @@ -165,8 +193,40 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen { super.getNetworkedData(data); + data.add(0); + data.add(isActive); data.add(controlType.ordinal()); + + data.add(filters.size()); + + for(TransporterFilter filter : filters) + { + filter.write(data); + } + + return data; + } + + public ArrayList getGenericPacket(ArrayList data) + { + super.getNetworkedData(data); + + data.add(1); + + data.add(isActive); + data.add(controlType.ordinal()); + + return data; + + } + + public ArrayList getFilterPacket(ArrayList data) + { + super.getNetworkedData(data); + + data.add(2); + data.add(filters.size()); for(TransporterFilter filter : filters) @@ -206,7 +266,7 @@ public class TileEntityLogisticalSorter extends TileEntityElectricBlock implemen { if(!worldObj.isRemote) { - PacketHandler.sendPacket(Transmission.CLIENTS_RANGE, new PacketTileEntity().setParams(Object3D.get(this), getNetworkedData(new ArrayList())), Object3D.get(this), 50D); + PacketHandler.sendPacket(Transmission.CLIENTS_RANGE, new PacketTileEntity().setParams(Object3D.get(this), getFilterPacket(new ArrayList())), Object3D.get(this), 50D); } } diff --git a/common/mekanism/common/transporter/ItemStackFilter.java b/common/mekanism/common/transporter/ItemStackFilter.java index 48425a81d..9843a1c2c 100644 --- a/common/mekanism/common/transporter/ItemStackFilter.java +++ b/common/mekanism/common/transporter/ItemStackFilter.java @@ -23,11 +23,12 @@ public class ItemStackFilter extends TransporterFilter { super.write(nbtTags); + nbtTags.setInteger("type", 0); itemType.writeToNBT(nbtTags); } @Override - public void read(NBTTagCompound nbtTags) + protected void read(NBTTagCompound nbtTags) { super.read(nbtTags); @@ -37,6 +38,8 @@ public class ItemStackFilter extends TransporterFilter @Override public void write(ArrayList data) { + data.add(0); + super.write(data); data.add(itemType.itemID); @@ -45,7 +48,7 @@ public class ItemStackFilter extends TransporterFilter } @Override - public void read(ByteArrayDataInput dataStream) + protected void read(ByteArrayDataInput dataStream) { super.read(dataStream); diff --git a/common/mekanism/common/transporter/OreDictFilter.java b/common/mekanism/common/transporter/OreDictFilter.java index 8c56be936..d50823f47 100644 --- a/common/mekanism/common/transporter/OreDictFilter.java +++ b/common/mekanism/common/transporter/OreDictFilter.java @@ -57,11 +57,12 @@ public class OreDictFilter extends TransporterFilter { super.write(nbtTags); + nbtTags.setInteger("type", 1); nbtTags.setString("oreDictName", oreDictName); } @Override - public void read(NBTTagCompound nbtTags) + protected void read(NBTTagCompound nbtTags) { super.read(nbtTags); @@ -71,13 +72,15 @@ public class OreDictFilter extends TransporterFilter @Override public void write(ArrayList data) { + data.add(1); + super.write(data); data.add(oreDictName); } @Override - public void read(ByteArrayDataInput dataStream) + protected void read(ByteArrayDataInput dataStream) { super.read(dataStream); diff --git a/common/mekanism/common/transporter/TransporterFilter.java b/common/mekanism/common/transporter/TransporterFilter.java index 5caa5e963..fe1b8e5d7 100644 --- a/common/mekanism/common/transporter/TransporterFilter.java +++ b/common/mekanism/common/transporter/TransporterFilter.java @@ -3,7 +3,6 @@ package mekanism.common.transporter; import java.util.ArrayList; import mekanism.api.EnumColor; -import mekanism.common.Teleporter.Code; import mekanism.common.util.TransporterUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -24,7 +23,7 @@ public class TransporterFilter nbtTags.setInteger("color", TransporterUtils.colors.indexOf(color)); } - public void read(NBTTagCompound nbtTags) + protected void read(NBTTagCompound nbtTags) { color = TransporterUtils.colors.get(nbtTags.getInteger("color")); } @@ -34,14 +33,25 @@ public class TransporterFilter data.add(TransporterUtils.colors.indexOf(color)); } - public void read(ByteArrayDataInput dataStream) + protected void read(ByteArrayDataInput dataStream) { color = TransporterUtils.colors.get(dataStream.readInt()); } public static TransporterFilter readFromNBT(NBTTagCompound nbtTags) { - TransporterFilter filter = new TransporterFilter(); + int type = nbtTags.getInteger("type"); + + TransporterFilter filter = null; + + if(type == 0) + { + filter = new ItemStackFilter(); + } + else { + filter = new OreDictFilter(); + } + filter.read(nbtTags); return filter; @@ -49,7 +59,19 @@ public class TransporterFilter public static TransporterFilter readFromPacket(ByteArrayDataInput dataStream) { - TransporterFilter filter = new TransporterFilter(); + int type = dataStream.readInt(); + + TransporterFilter filter = null; + + if(type == 0) + { + filter = new ItemStackFilter(); + } + else if(type == 1) + { + filter = new OreDictFilter(); + } + filter.read(dataStream); return filter;