From a500d0f5923d3469aa1b325d52fe086f5acfd85e Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Sun, 27 Oct 2013 17:47:17 -0400 Subject: [PATCH] Edit/delete filter packets --- .../client/gui/GuiItemStackFilter.java | 17 +++- .../mekanism/client/gui/GuiOreDictFilter.java | 16 +++- common/mekanism/common/HashList.java | 10 ++ common/mekanism/common/Mekanism.java | 2 + .../common/network/PacketEditFilter.java | 93 +++++++++++++++++++ .../common/network/PacketNewFilter.java | 21 ++--- 6 files changed, 143 insertions(+), 16 deletions(-) create mode 100644 common/mekanism/common/network/PacketEditFilter.java diff --git a/common/mekanism/client/gui/GuiItemStackFilter.java b/common/mekanism/client/gui/GuiItemStackFilter.java index 3381f0ace..e5cbb00af 100644 --- a/common/mekanism/client/gui/GuiItemStackFilter.java +++ b/common/mekanism/client/gui/GuiItemStackFilter.java @@ -3,10 +3,10 @@ package mekanism.client.gui; import mekanism.api.EnumColor; import mekanism.api.Object3D; import mekanism.client.render.MekanismRenderer; -import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; import mekanism.common.inventory.container.ContainerFilter; +import mekanism.common.network.PacketEditFilter; import mekanism.common.network.PacketLogisticalSorterGui; import mekanism.common.network.PacketLogisticalSorterGui.SorterGuiPacket; import mekanism.common.network.PacketNewFilter; @@ -79,15 +79,26 @@ public class GuiItemStackFilter extends GuiMekanism { if(filter.itemType != null) { - PacketHandler.sendPacket(Transmission.SERVER, new PacketNewFilter().setParams(Object3D.get(tileEntity), filter)); + if(isNew) + { + PacketHandler.sendPacket(Transmission.SERVER, new PacketNewFilter().setParams(Object3D.get(tileEntity), filter)); + } + else { + PacketHandler.sendPacket(Transmission.SERVER, new PacketEditFilter().setParams(Object3D.get(tileEntity), false, filter)); + } + PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, 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; } } + else if(guibutton.id == 1) + { + PacketHandler.sendPacket(Transmission.SERVER, new PacketEditFilter().setParams(Object3D.get(tileEntity), true, filter)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, Object3D.get(tileEntity), 0)); + } } @Override diff --git a/common/mekanism/client/gui/GuiOreDictFilter.java b/common/mekanism/client/gui/GuiOreDictFilter.java index 6f960b941..ce4718661 100644 --- a/common/mekanism/client/gui/GuiOreDictFilter.java +++ b/common/mekanism/client/gui/GuiOreDictFilter.java @@ -10,6 +10,7 @@ import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; import mekanism.common.inventory.container.ContainerFilter; +import mekanism.common.network.PacketEditFilter; import mekanism.common.network.PacketLogisticalSorterGui; import mekanism.common.network.PacketLogisticalSorterGui.SorterGuiPacket; import mekanism.common.network.PacketNewFilter; @@ -122,15 +123,26 @@ public class GuiOreDictFilter extends GuiMekanism { if(filter.oreDictName != null && !filter.oreDictName.isEmpty()) { - PacketHandler.sendPacket(Transmission.SERVER, new PacketNewFilter().setParams(Object3D.get(tileEntity), filter)); + if(isNew) + { + PacketHandler.sendPacket(Transmission.SERVER, new PacketNewFilter().setParams(Object3D.get(tileEntity), filter)); + } + else { + PacketHandler.sendPacket(Transmission.SERVER, new PacketEditFilter().setParams(Object3D.get(tileEntity), false, filter)); + } + PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, 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; } } + else if(guibutton.id == 1) + { + PacketHandler.sendPacket(Transmission.SERVER, new PacketEditFilter().setParams(Object3D.get(tileEntity), true, filter)); + PacketHandler.sendPacket(Transmission.SERVER, new PacketLogisticalSorterGui().setParams(SorterGuiPacket.SERVER, Object3D.get(tileEntity), 0)); + } } @Override diff --git a/common/mekanism/common/HashList.java b/common/mekanism/common/HashList.java index 98403b187..b23e845bf 100644 --- a/common/mekanism/common/HashList.java +++ b/common/mekanism/common/HashList.java @@ -43,6 +43,16 @@ public class HashList implements Iterable } } + public void remove(int index) + { + list.remove(index); + } + + public void remove(T obj) + { + list.remove(obj); + } + public int indexOf(T obj) { return list.indexOf(obj); diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 9357b080b..b9f3a615f 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -57,6 +57,7 @@ import mekanism.common.network.PacketConfiguratorState; import mekanism.common.network.PacketControlPanel; import mekanism.common.network.PacketDataRequest; import mekanism.common.network.PacketDigitUpdate; +import mekanism.common.network.PacketEditFilter; import mekanism.common.network.PacketElectricBowState; import mekanism.common.network.PacketElectricChest; import mekanism.common.network.PacketLogisticalSorterGui; @@ -1150,6 +1151,7 @@ public class Mekanism PacketHandler.registerPacket(PacketWalkieTalkieState.class); PacketHandler.registerPacket(PacketLogisticalSorterGui.class); PacketHandler.registerPacket(PacketNewFilter.class); + PacketHandler.registerPacket(PacketEditFilter.class); //Donators donators.add("mrgreaper"); diff --git a/common/mekanism/common/network/PacketEditFilter.java b/common/mekanism/common/network/PacketEditFilter.java new file mode 100644 index 000000000..1bc486939 --- /dev/null +++ b/common/mekanism/common/network/PacketEditFilter.java @@ -0,0 +1,93 @@ +package mekanism.common.network; + +import java.io.DataOutputStream; +import java.util.ArrayList; + +import mekanism.api.Object3D; +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; + +import com.google.common.io.ByteArrayDataInput; + +import cpw.mods.fml.common.FMLCommonHandler; + +public class PacketEditFilter implements IMekanismPacket +{ + public Object3D object3D; + + public TransporterFilter edited; + + public boolean delete; + + @Override + public String getName() + { + return "EditFilter"; + } + + @Override + public IMekanismPacket setParams(Object... data) + { + object3D = (Object3D)data[0]; + delete = (Boolean)data[1]; + edited = (TransporterFilter)data[2]; + + return this; + } + + @Override + public void read(ByteArrayDataInput dataStream, EntityPlayer player, World world) throws Exception + { + object3D = new Object3D(dataStream.readInt(), dataStream.readInt(), dataStream.readInt(), dataStream.readInt()); + + delete = dataStream.readBoolean(); + edited = TransporterFilter.readFromPacket(dataStream); + + World worldServer = FMLCommonHandler.instance().getMinecraftServerInstance().worldServerForDimension(object3D.dimensionId); + + if(worldServer != null && object3D.getTileEntity(worldServer) instanceof TileEntityLogisticalSorter) + { + TileEntityLogisticalSorter sorter = (TileEntityLogisticalSorter)object3D.getTileEntity(worldServer); + TransporterFilter filter = TransporterFilter.readFromPacket(dataStream); + + if(!sorter.filters.contains(filter)) + { + return; + } + + int index = sorter.filters.indexOf(filter); + + sorter.filters.remove(index); + + if(!delete) + { + sorter.filters.add(index, edited); + } + + for(EntityPlayer iterPlayer : sorter.playersUsing) + { + PacketHandler.sendPacket(Transmission.SINGLE_CLIENT, new PacketTileEntity().setParams(Object3D.get(sorter), sorter.getFilterPacket(new ArrayList())), iterPlayer); + } + } + } + + @Override + public void write(DataOutputStream dataStream) throws Exception + { + dataStream.writeInt(object3D.xCoord); + dataStream.writeInt(object3D.yCoord); + dataStream.writeInt(object3D.zCoord); + + dataStream.writeInt(object3D.dimensionId); + + dataStream.writeBoolean(delete); + + ArrayList data = new ArrayList(); + edited.write(data); + PacketHandler.encode(data.toArray(), dataStream); + } +} diff --git a/common/mekanism/common/network/PacketNewFilter.java b/common/mekanism/common/network/PacketNewFilter.java index e5e806fdd..6f0e884a2 100644 --- a/common/mekanism/common/network/PacketNewFilter.java +++ b/common/mekanism/common/network/PacketNewFilter.java @@ -24,7 +24,7 @@ public class PacketNewFilter implements IMekanismPacket @Override public String getName() { - return "FilterUpdate"; + return "NewFilter"; } @Override @@ -39,22 +39,21 @@ public class PacketNewFilter implements IMekanismPacket @Override public void read(ByteArrayDataInput dataStream, EntityPlayer player, World world) throws Exception { - int x = dataStream.readInt(); - int y = dataStream.readInt(); - int z = dataStream.readInt(); + object3D = new Object3D(dataStream.readInt(), dataStream.readInt(), dataStream.readInt(), dataStream.readInt()); - int id = dataStream.readInt(); + World worldServer = FMLCommonHandler.instance().getMinecraftServerInstance().worldServerForDimension(object3D.dimensionId); - World worldServer = FMLCommonHandler.instance().getMinecraftServerInstance().worldServerForDimension(id); - - if(worldServer != null && worldServer.getBlockTileEntity(x, y, z) instanceof TileEntityLogisticalSorter) + if(worldServer != null && object3D.getTileEntity(worldServer) instanceof TileEntityLogisticalSorter) { - TileEntityLogisticalSorter sorter = (TileEntityLogisticalSorter)worldServer.getBlockTileEntity(x, y, z); + TileEntityLogisticalSorter sorter = (TileEntityLogisticalSorter)object3D.getTileEntity(worldServer); TransporterFilter filter = TransporterFilter.readFromPacket(dataStream); - sorter.filters.add(filter); + //sorter.filters.add(filter); - PacketHandler.sendPacket(Transmission.SINGLE_CLIENT, new PacketTileEntity().setParams(Object3D.get(sorter), sorter.getFilterPacket(new ArrayList())), player); + for(EntityPlayer iterPlayer : sorter.playersUsing) + { + PacketHandler.sendPacket(Transmission.SINGLE_CLIENT, new PacketTileEntity().setParams(Object3D.get(sorter), sorter.getFilterPacket(new ArrayList())), iterPlayer); + } } }