CVE-2023-38689 (published 2023-08-04T17:15Z)

Logistics Pipes is a modification (a.k.a. mod) for the computer game Minecraft Java Edition. The mod used Java's `ObjectInputStream#readObject` on untrusted data coming from clients or servers over the network resulting in possible remote code execution when sending specifically crafted network packets after connecting. The affected versions were released between 2013 and 2016 and the issue (back then unknown) was fixed in 2016 by a refactoring of the network IO code.  \nThe issue is present in all Logistics Pipes versions ranged from 0.7.0.91 prior to 0.10.0.71, which were downloaded from different platforms summing up to multi-million downloads. For Minecraft version 1.7.10 the issue was fixed in build 0.10.0.71. Everybody on Minecraft 1.7.10 should check their version number of Logistics Pipes in their modlist and update, if the version number is smaller than 0.10.0.71. Any newer supported Minecraft version (like 1.12.2) never had a Logistics Pipes version with vulnerable code. The best available workaround for vulnerable versions is to play in singleplayer only or update to newer Minecraft versions and modpacks.

CVSS v3 base score: 9.8, CRITICAL (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)

Weakness information:
cwe_id: CWE-502
cwe_name: Deserialization of Untrusted Data
description: The product deserializes untrusted data without sufficiently verifying that the resulting data will be valid.
extended_description: 
            It is often convenient to serialize objects for communication or to save them for later use. However, deserialized data or code can often be modified without using the provided accessor functions if it does not use cryptography to protect itself. Furthermore, any cryptography would still be client-side security -- which is a dangerous security assumption.
            Data that is untrusted can not be trusted to be well-formed.
            When developers place no restrictions on "gadget chains," or series of instances and method invocations that can self-execute during the deserialization process (i.e., before the object is returned to the caller), it is sometimes possible for attackers to leverage them to perform unauthorized actions, like generating a shell.
         
         

Fix information:
repo_url: https://github.com/RS485/LogisticsPipes
commit_details: repo_url: https://github.com/RS485/LogisticsPipes
author: theZorro266
author_date: 2016-05-18 13:27:11+02:00
msg: Remove IOException escalation
repository: repo_url: https://github.com/RS485/LogisticsPipes
repo_name: RS485/LogisticsPipes
description: The RS485 take on LogisticsPipes -- ESTḌ 2012
repo_language: Java
owner: RS485
file_changes: filename: TrackingTask.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.blocks.stats;
 
-import java.io.IOException;
-
 import net.minecraft.item.ItemStack;
 import net.minecraft.nbt.NBTTagCompound;
 
@@ -59,13 +57,13 @@ public class TrackingTask {
 		item.makeNormalStack(1).writeToNBT(nbt);
 	}
 
-	public void writeToLPData(LPDataOutput output) throws IOException {
+	public void writeToLPData(LPDataOutput output) {
 		output.writeLongArray(amountRecorded);
 		output.writeInt(arrayPos);
 		output.writeItemIdentifier(item);
 	}
 
-	public void readFromLPData(LPDataInput input) throws IOException {
+	public void readFromLPData(LPDataInput input) {
 		amountRecorded = input.readLongArray();
 		arrayPos = input.readInt();
 		item = input.readItemIdentifier();

programming_language: Java
filename: PlayerConfig.java
change_type: ModificationType.MODIFY
diff: @@ -55,10 +55,6 @@ public class PlayerConfig {
 		playerIdent = ident;
 	}
 
-	public void setUseNewRenderer(boolean flag) {
-		useNewRenderer = flag;
-	}
-
 	public void setUseFallbackRenderer(boolean flag) {
 		useFallbackRenderer = flag;
 	}
@@ -75,14 +71,14 @@ public class PlayerConfig {
 		MainProxy.sendPacketToServer(PacketHandler.getPacket(PlayerConfigToServerPacket.class).setConfig(this));
 	}
 
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeBoolean(useNewRenderer);
 		output.writeBoolean(useFallbackRenderer);
 		output.writeInt(renderPipeDistance);
 		output.writeInt(renderPipeContentDistance);
 	}
 
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		useNewRenderer = input.readBoolean();
 		useFallbackRenderer = input.readBoolean();
 		renderPipeDistance = input.readInt();
@@ -218,4 +214,8 @@ public class PlayerConfig {
 	public boolean isUseNewRenderer() {
 		return useNewRenderer && SimpleServiceLocator.cclProxy.isActivated();
 	}
+
+	public void setUseNewRenderer(boolean flag) {
+		useNewRenderer = flag;
+	}
 }

programming_language: Java
filename: IClientState.java
change_type: ModificationType.MODIFY
diff: @@ -1,13 +1,11 @@
 package logisticspipes.interfaces;
 
-import java.io.IOException;
-
 import network.rs485.logisticspipes.util.LPDataInput;
 import network.rs485.logisticspipes.util.LPDataOutput;
 
 public interface IClientState {
 
-	void writeData(LPDataOutput output) throws IOException;
+	void writeData(LPDataOutput output);
 
-	void readData(LPDataInput input) throws IOException;
+	void readData(LPDataInput input);
 }

programming_language: Java
filename: IReadListObject.java
change_type: ModificationType.MODIFY
diff: @@ -1,10 +1,8 @@
 package logisticspipes.network;
 
-import java.io.IOException;
-
 import network.rs485.logisticspipes.util.LPDataInput;
 
 public interface IReadListObject<T> {
 
-	T readObject(LPDataInput input) throws IOException;
+	T readObject(LPDataInput input);
 }

programming_language: Java
filename: IWriteListObject.java
change_type: ModificationType.MODIFY
diff: @@ -1,10 +1,8 @@
 package logisticspipes.network;
 
-import java.io.IOException;
-
 import network.rs485.logisticspipes.util.LPDataOutput;
 
 public interface IWriteListObject<T> {
 
-	void writeObject(LPDataOutput output, T object) throws IOException;
+	void writeObject(LPDataOutput output, T object);
 }

programming_language: Java
filename: NewGuiHandler.java
change_type: ModificationType.MODIFY
diff: @@ -36,6 +36,8 @@ public class NewGuiHandler {
 	public static List<GuiProvider> guilist;
 	public static Map<Class<? extends GuiProvider>, GuiProvider> guimap;
 
+	private NewGuiHandler() { }
+
 	@SuppressWarnings("unchecked")
 	// Suppressed because this cast should never fail.
 	public static <T extends GuiProvider> T getGui(Class<T> clazz) {
@@ -64,7 +66,6 @@ public class NewGuiHandler {
 		}
 	}
 
-	@SneakyThrows(IOException.class)
 	public static void openGui(GuiProvider guiProvider, EntityPlayer oPlayer) {
 		if (!(oPlayer instanceof EntityPlayerMP)) {
 			throw new UnsupportedOperationException("Gui can only be opened on the server side");
@@ -96,7 +97,6 @@ public class NewGuiHandler {
 		player.openContainer.addCraftingToCrafters(player);
 	}
 
-	@SneakyThrows(IOException.class)
 	@SideOnly(Side.CLIENT)
 	public static void openGui(GUIPacket packet, EntityPlayer player) {
 		int guiID = packet.getGuiID();

programming_language: Java
filename: PacketHandler.java
change_type: ModificationType.MODIFY
diff: @@ -39,11 +39,12 @@ import network.rs485.logisticspipes.util.LPDataInput;
 @Sharable
 public class PacketHandler extends MessageToMessageCodec<FMLProxyPacket, ModernPacket> {
 
+	public static final Map<Integer, StackTraceElement[]> debugMap = new HashMap<>();
+	//TODO correct to work with WeakReference (See FML original)
+	protected static final AttributeKey<ThreadLocal<FMLProxyPacket>> INBOUNDPACKETTRACKER = new AttributeKey<>("lp:inboundpacket");
 	public static List<ModernPacket> packetlist;
 	public static Map<Class<? extends ModernPacket>, ModernPacket> packetmap;
-
 	private static int packetDebugID = 1;
-	public static final Map<Integer, StackTraceElement[]> debugMap = new HashMap<>();
 
 	@SuppressWarnings("unchecked")
 	// Suppressed because this cast should never fail.
@@ -60,18 +61,6 @@ public class PacketHandler extends MessageToMessageCodec<FMLProxyPacket, ModernP
 		return packet;
 	}
 
-	//horrible hack to carry the proper player for the side along...
-	static class InboundModernPacketWrapper {
-
-		final ModernPacket packet;
-		final EntityPlayer player;
-
-		InboundModernPacketWrapper(ModernPacket p, EntityPlayer e) {
-			packet = p;
-			player = e;
-		}
-	}
-
 	/*
 	 * enumerates all ModernPackets, sets their IDs and populate packetlist/packetmap
 	 */
@@ -97,15 +86,6 @@ public class PacketHandler extends MessageToMessageCodec<FMLProxyPacket, ModernP
 		}
 	}
 
-	//TODO correct to work with WeakReference (See FML original)
-	protected static final AttributeKey<ThreadLocal<FMLProxyPacket>> INBOUNDPACKETTRACKER = new AttributeKey<>("lp:inboundpacket");
-
-	@Override
-	public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
-		super.handlerAdded(ctx);
-		ctx.attr(PacketHandler.INBOUNDPACKETTRACKER).set(new ThreadLocal<>());
-	}
-
 	//Used to provide the Description packet
 	public static FMLProxyPacket toFMLPacket(ModernPacket msg) throws Exception {
 		return PacketHandler.toFMLPacket(msg, MainProxy.networkChannelName);
@@ -121,6 +101,44 @@ public class PacketHandler extends MessageToMessageCodec<FMLProxyPacket, ModernP
 		return new FMLProxyPacket(buffer, channel);
 	}
 
+	//hacky callback to process packets coming from by the packetbufferhandler decompressors
+	//TODO replace with proper netty implementation
+	public static void onPacketData(final LPDataInput data, final EntityPlayer player) {
+		if (player == null) {
+			return;
+		}
+		final int packetID = data.readShort();
+		final ModernPacket packet = PacketHandler.packetlist.get(packetID).template();
+		packet.setDebugId(data.readInt());
+		packet.readData(data);
+		PacketHandler.onPacketData(packet, player);
+	}
+
+	private static void onPacketData(ModernPacket packet, final EntityPlayer player) {
+		try {
+			packet.processPacket(player);
+			if (LPConstants.DEBUG) {
+				PacketHandler.debugMap.remove(packet.getDebugId());
+			}
+		} catch (DelayPacketException e) {
+			if (packet.retry() && MainProxy.isClient(player.getEntityWorld())) {
+				SimpleServiceLocator.clientBufferHandler.queueFailedPacket(packet, player);
+			} else if (LPConstants.DEBUG) {
+				LogisticsPipes.log.error(packet.getClass().getName());
+				LogisticsPipes.log.error(packet.toString());
+				e.printStackTrace();
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	@Override
+	public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
+		super.handlerAdded(ctx);
+		ctx.attr(PacketHandler.INBOUNDPACKETTRACKER).set(new ThreadLocal<>());
+	}
+
 	@Override
 	protected final void encode(ChannelHandlerContext ctx, ModernPacket msg, List<Object> out) throws Exception {
 		FMLProxyPacket proxy = PacketHandler.toFMLPacket(msg, ctx.channel().attr(NetworkRegistry.FML_CHANNEL).get());
@@ -150,35 +168,15 @@ public class PacketHandler extends MessageToMessageCodec<FMLProxyPacket, ModernP
 		super.exceptionCaught(ctx, cause);
 	}
 
-	//hacky callback to process packets coming from by the packetbufferhandler decompressors
-	//TODO replace with proper netty implementation
-	public static void onPacketData(final LPDataInput data, final EntityPlayer player) throws IOException {
-		if (player == null) {
-			return;
-		}
-		final int packetID = data.readShort();
-		final ModernPacket packet = PacketHandler.packetlist.get(packetID).template();
-		packet.setDebugId(data.readInt());
-		packet.readData(data);
-		PacketHandler.onPacketData(packet, player);
-	}
+	//horrible hack to carry the proper player for the side along...
+	static class InboundModernPacketWrapper {
 
-	private static void onPacketData(ModernPacket packet, final EntityPlayer player) {
-		try {
-			packet.processPacket(player);
-			if (LPConstants.DEBUG) {
-				PacketHandler.debugMap.remove(packet.getDebugId());
-			}
-		} catch (DelayPacketException e) {
-			if (packet.retry() && MainProxy.isClient(player.getEntityWorld())) {
-				SimpleServiceLocator.clientBufferHandler.queueFailedPacket(packet, player);
-			} else if (LPConstants.DEBUG) {
-				LogisticsPipes.log.error(packet.getClass().getName());
-				LogisticsPipes.log.error(packet.toString());
-				e.printStackTrace();
-			}
-		} catch (Exception e) {
-			throw new RuntimeException(e);
+		final ModernPacket packet;
+		final EntityPlayer player;
+
+		InboundModernPacketWrapper(ModernPacket p, EntityPlayer e) {
+			packet = p;
+			player = e;
 		}
 	}
 }

programming_language: Java
filename: BooleanModuleCoordinatesGuiProvider.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractguis;
 
-import java.io.IOException;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -10,22 +8,22 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public abstract class BooleanModuleCoordinatesGuiProvider extends ModuleCoordinatesGuiProvider {
 
-	public BooleanModuleCoordinatesGuiProvider(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private boolean flag;
 
+	public BooleanModuleCoordinatesGuiProvider(int id) {
+		super(id);
+	}
+
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(flag);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		flag = input.readBoolean();
 	}

programming_language: Java
filename: CoordinatesGuiProvider.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractguis;
 
-import java.io.IOException;
-
 import net.minecraft.tileentity.TileEntity;
 import net.minecraft.world.World;
 
@@ -18,10 +16,6 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 @ToString
 public abstract class CoordinatesGuiProvider extends GuiProvider {
 
-	public CoordinatesGuiProvider(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private int posX;
@@ -32,8 +26,12 @@ public abstract class CoordinatesGuiProvider extends GuiProvider {
 	@Setter
 	private int posZ;
 
+	public CoordinatesGuiProvider(int id) {
+		super(id);
+	}
+
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 
 		output.writeInt(posX);
 		output.writeInt(posY);
@@ -41,7 +39,7 @@ public abstract class CoordinatesGuiProvider extends GuiProvider {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 
 		posX = input.readInt();
 		posY = input.readInt();

programming_language: Java
filename: CoordinatesPopupGuiProvider.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractguis;
 
-import java.io.IOException;
-
 import net.minecraft.tileentity.TileEntity;
 import net.minecraft.world.World;
 
@@ -19,10 +17,6 @@ import network.rs485.logisticspipes.world.DoubleCoordinates;
 @ToString
 public abstract class CoordinatesPopupGuiProvider extends PopupGuiProvider {
 
-	public CoordinatesPopupGuiProvider(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private int posX;
@@ -33,8 +27,12 @@ public abstract class CoordinatesPopupGuiProvider extends PopupGuiProvider {
 	@Setter
 	private int posZ;
 
+	public CoordinatesPopupGuiProvider(int id) {
+		super(id);
+	}
+
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 
 		output.writeInt(posX);
 		output.writeInt(posY);
@@ -42,7 +40,7 @@ public abstract class CoordinatesPopupGuiProvider extends PopupGuiProvider {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 
 		posX = input.readInt();
 		posY = input.readInt();

programming_language: Java
filename: GuiProvider.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractguis;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.inventory.Container;
 import net.minecraftforge.common.util.FakePlayer;
@@ -21,9 +19,9 @@ public abstract class GuiProvider {
 		this.id = id;
 	}
 
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	/**
 	 * @return LogisticsBaseGuiScreen

programming_language: Java
filename: ModuleCoordinatesGuiProvider.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractguis;
 
-import java.io.IOException;
-
 import net.minecraft.world.World;
 
 import lombok.Getter;
@@ -19,27 +17,26 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public abstract class ModuleCoordinatesGuiProvider extends CoordinatesGuiProvider {
 
-	public ModuleCoordinatesGuiProvider(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private ModulePositionType slot;
-
 	@Getter
 	@Setter
 	private int positionInt;
 
+	public ModuleCoordinatesGuiProvider(int id) {
+		super(id);
+	}
+
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeEnum(slot);
 		output.writeInt(positionInt);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		slot = input.readEnum(ModulePositionType.class);
 		positionInt = input.readInt();

programming_language: Java
filename: ModuleInHandGuiProvider.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractguis;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.item.ItemStack;
 
@@ -18,22 +16,22 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public abstract class ModuleInHandGuiProvider extends GuiProvider {
 
-	public ModuleInHandGuiProvider(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private int invSlot;
 
+	public ModuleInHandGuiProvider(int id) {
+		super(id);
+	}
+
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(invSlot);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		invSlot = input.readInt();
 	}

programming_language: Java
filename: NBTModuleCoordinatesGuiProvider.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractguis;
 
-import java.io.IOException;
-
 import net.minecraft.nbt.NBTTagCompound;
 
 import lombok.Getter;
@@ -21,13 +19,13 @@ public abstract class NBTModuleCoordinatesGuiProvider extends ModuleCoordinatesG
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeNBTTagCompound(nbt);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		nbt = input.readNBTTagCompound();
 	}

programming_language: Java
filename: UpgradeCoordinatesGuiProvider.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractguis;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.inventory.Slot;
 
@@ -16,22 +14,22 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public abstract class UpgradeCoordinatesGuiProvider extends CoordinatesPopupGuiProvider {
 
-	public UpgradeCoordinatesGuiProvider(int id) {
-		super(id);
-	}
-
 	@Getter(AccessLevel.PROTECTED)
 	@Setter(AccessLevel.PRIVATE)
 	private int positionInt;
 
+	public UpgradeCoordinatesGuiProvider(int id) {
+		super(id);
+	}
+
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(positionInt);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		positionInt = input.readInt();
 	}

programming_language: Java
filename: BitSetCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
 import java.util.BitSet;
 
 import lombok.Getter;
@@ -20,13 +19,13 @@ public abstract class BitSetCoordinatesPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBitSet(getFlags());
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		setFlags(input.readBitSet());
 	}

programming_language: Java
filename: BooleanModuleCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -19,13 +17,13 @@ public abstract class BooleanModuleCoordinatesPacket extends ModuleCoordinatesPa
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(flag);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		flag = input.readBoolean();
 	}

programming_language: Java
filename: CoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import net.minecraft.tileentity.TileEntity;
 import net.minecraft.world.World;
 
@@ -18,16 +16,6 @@ import network.rs485.logisticspipes.world.DoubleCoordinates;
 @ToString
 public abstract class CoordinatesPacket extends ModernPacket {
 
-	public enum LTGPCompletionCheck {
-		NONE,
-		PIPE,
-		TRANSPORT
-	}
-
-	public CoordinatesPacket(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private int posX;
@@ -38,8 +26,12 @@ public abstract class CoordinatesPacket extends ModernPacket {
 	@Setter
 	private int posZ;
 
+	public CoordinatesPacket(int id) {
+		super(id);
+	}
+
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 
 		output.writeInt(posX);
 		output.writeInt(posY);
@@ -47,7 +39,7 @@ public abstract class CoordinatesPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 
 		posX = input.readInt();
 		posY = input.readInt();
@@ -173,4 +165,10 @@ public abstract class CoordinatesPacket extends ModernPacket {
 	protected void targetNotFound(String message) {
 		throw new TargetNotFoundException(message, this);
 	}
+
+	public enum LTGPCompletionCheck {
+		NONE,
+		PIPE,
+		TRANSPORT
+	}
 }

programming_language: Java
filename: DirectionModuleCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import net.minecraftforge.common.util.ForgeDirection;
 
 import lombok.Getter;
@@ -21,13 +19,13 @@ public abstract class DirectionModuleCoordinatesPacket extends ModuleCoordinates
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeForgeDirection(direction);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		direction = input.readForgeDirection();
 	}

programming_language: Java
filename: GenericPacket.java
change_type: ModificationType.DELETE
diff: @@ -1,57 +0,0 @@
-package logisticspipes.network.abstractpackets;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-
-import lombok.Getter;
-
-import network.rs485.logisticspipes.util.LPDataInput;
-import network.rs485.logisticspipes.util.LPDataOutput;
-
-public abstract class GenericPacket extends ModernPacket {
-
-	@Getter
-	private Object[] args;
-
-	public GenericPacket(int id) {
-		super(id);
-	}
-
-	@Override
-	public void readData(LPDataInput input) throws IOException {
-		int size = input.readInt();
-		args = new Object[size];
-		for (int i = 0; i < size; i++) {
-			byte[] bytes = input.readByteArray();
-			ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
-			ObjectInput in = new ObjectInputStream(bis);
-			try {
-				Object o = in.readObject();
-				args[i] = o;
-			} catch (ClassNotFoundException e) {
-				throw new UnsupportedOperationException(e);
-			}
-		}
-	}
-
-	@Override
-	public void writeData(LPDataOutput output) throws IOException {
-		output.writeInt(args.length);
-		for (Object arg : args) {
-			ByteArrayOutputStream bos = new ByteArrayOutputStream();
-			ObjectOutput out = new ObjectOutputStream(bos);
-			out.writeObject(arg);
-			output.writeByteArray(bos.toByteArray());
-		}
-	}
-
-	public GenericPacket setArgs(Object... input) {
-		args = input;
-		return this;
-	}
-}

programming_language: unknown
filename: Integer2CoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -19,13 +17,13 @@ public abstract class Integer2CoordinatesPacket extends IntegerCoordinatesPacket
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		setInteger2(input.readInt());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(getInteger2());
 	}

programming_language: Java
filename: Integer2ModuleCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -19,13 +17,13 @@ public abstract class Integer2ModuleCoordinatesPacket extends IntegerModuleCoord
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		setInteger2(input.readInt());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(getInteger2());
 	}

programming_language: Java
filename: IntegerCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -19,13 +17,13 @@ public abstract class IntegerCoordinatesPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		setInteger(input.readInt());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(getInteger());
 	}

programming_language: Java
filename: IntegerModuleCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -19,13 +17,13 @@ public abstract class IntegerModuleCoordinatesPacket extends ModuleCoordinatesPa
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		setInteger(input.readInt());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(getInteger());
 	}

programming_language: Java
filename: IntegerPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -19,12 +17,12 @@ public abstract class IntegerPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		setInteger(input.readInt());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(getInteger());
 	}
 }

programming_language: Java
filename: InventoryModuleCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
 import java.util.List;
 import java.util.Set;
 
@@ -38,7 +37,7 @@ public abstract class InventoryModuleCoordinatesPacket extends ModuleCoordinates
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 
 		if (inventory != null) {
@@ -62,7 +61,7 @@ public abstract class InventoryModuleCoordinatesPacket extends ModuleCoordinates
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 
 		byte marker = input.readByte();

programming_language: Java
filename: ItemPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
 
@@ -22,7 +20,7 @@ public abstract class ItemPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		if (getStack() != null) {
 			output.writeInt(Item.getIdFromItem(getStack().getItem()));
@@ -35,7 +33,7 @@ public abstract class ItemPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 
 		final int itemID = input.readInt();

programming_language: Java
filename: ListSyncPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
 import java.util.List;
 
 import lombok.AccessLevel;
@@ -30,13 +29,13 @@ public abstract class ListSyncPacket<E> extends CoordinatesPacket implements IWr
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeCollection(list, this);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		list = input.readArrayList(this);
 	}

programming_language: Java
filename: ModernPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -12,29 +10,25 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public abstract class ModernPacket {
 
-	@Getter
-	@Setter
-	private boolean isChunkDataPacket;
-
-	@Getter
-	@Setter
-	private boolean compressable;
 	/*
 	@Getter
 	protected String channel;
 	 */
 	@Getter
 	private final int id;
-
+	protected int leftRetries = 5;
+	@Getter
+	@Setter
+	private boolean isChunkDataPacket;
+	@Getter
+	@Setter
+	private boolean compressable;
 	@Getter
 	private byte[] data = null;
-
 	@Getter
 	@Setter
 	private int debugId = 0;
 
-	protected int leftRetries = 5;
-
 	public ModernPacket(int id) {
 		//this.channel = LogisticsPipes.LOGISTICS_PIPES_CHANNEL_NAME;
 		this.id = id;
@@ -65,11 +59,11 @@ public abstract class ModernPacket {
 		}
 	 */
 
-	public abstract void readData(LPDataInput input) throws IOException;
+	public abstract void readData(LPDataInput input);
 
 	public abstract void processPacket(EntityPlayer player);
 
-	public abstract void writeData(LPDataOutput output) throws IOException;
+	public abstract void writeData(LPDataOutput output);
 
 	public abstract ModernPacket template();
 

programming_language: Java
filename: ModuleCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.world.World;
 
@@ -28,13 +26,14 @@ public abstract class ModuleCoordinatesPacket extends CoordinatesPacket {
 	@Getter
 	@Setter
 	private int positionInt;
+	private boolean moduleBased = false;
 
 	public ModuleCoordinatesPacket(int id) {
 		super(id);
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(type != null);
 		if (type != null) {
@@ -44,7 +43,7 @@ public abstract class ModuleCoordinatesPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		if (input.readBoolean()) {
 			type = input.readEnum(ModulePositionType.class);
@@ -68,8 +67,6 @@ public abstract class ModuleCoordinatesPacket extends CoordinatesPacket {
 		return this;
 	}
 
-	private boolean moduleBased = false;
-
 	@SuppressWarnings("unchecked")
 	public <T> T getLogisticsModule(EntityPlayer player, Class<T> clazz) {
 		LogisticsModule module = null;

programming_language: Java
filename: NBTCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import net.minecraft.nbt.NBTTagCompound;
 
 import lombok.Getter;
@@ -21,13 +19,13 @@ public abstract class NBTCoordinatesPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeNBTTagCompound(tag);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		tag = input.readNBTTagCompound();
 	}

programming_language: Java
filename: NBTModuleCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import net.minecraft.nbt.NBTTagCompound;
 
 import lombok.Getter;
@@ -21,13 +19,13 @@ public abstract class NBTModuleCoordinatesPacket extends ModuleCoordinatesPacket
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeNBTTagCompound(tag);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		tag = input.readNBTTagCompound();
 	}

programming_language: Java
filename: RequestPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -30,14 +28,14 @@ public abstract class RequestPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeItemIdentifierStack(stack);
 		output.writeInt(dimension);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		stack = input.readItemIdentifierStack();
 		dimension = input.readInt();

programming_language: Java
filename: SlotPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.inventory.Slot;
 
@@ -48,12 +46,12 @@ public abstract class SlotPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		setInteger(input.readInt());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(getInteger());
 	}
 

programming_language: Java
filename: StringCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -19,13 +17,13 @@ public abstract class StringCoordinatesPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeUTF(getString());
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		setString(input.readUTF());
 	}

programming_language: Java
filename: StringListPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.abstractpackets;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -21,7 +20,7 @@ public abstract class StringListPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		int size = input.readInt();
 		for (int i = 0; i < size; i++) {
 			getStringList().add(input.readUTF());
@@ -29,7 +28,7 @@ public abstract class StringListPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(getStringList().size());
 		for (int i = 0; i < getStringList().size(); i++) {
 			output.writeUTF(getStringList().get(i));

programming_language: Java
filename: AutoCraftingGui.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.block;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import logisticspipes.blocks.crafting.LogisticsCraftingTableTileEntity;
@@ -68,7 +66,7 @@ public class AutoCraftingGui extends CoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeItemIdentifier(targetType);
 		output.writeBoolean(isFuzzy);
@@ -83,7 +81,7 @@ public class AutoCraftingGui extends CoordinatesGuiProvider {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		targetType = input.readItemIdentifier();
 		if (input.readBoolean()) {

programming_language: Java
filename: StatisticsGui.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.guis.block;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -58,14 +57,14 @@ public class StatisticsGui extends CoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeCollection(trackingList, (output1, object) -> object.writeToLPData(output1));
 
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		trackingList = input.readArrayList(data1 -> {
 			TrackingTask object = new TrackingTask();

programming_language: Java
filename: ItemAmountSignGui.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.item;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraftforge.common.util.ForgeDirection;
 
@@ -51,13 +49,13 @@ public class ItemAmountSignGui extends CoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeForgeDirection(dir);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		dir = input.readForgeDirection();
 	}

programming_language: Java
filename: CraftingModuleInHand.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.module.inhand;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -67,14 +65,14 @@ public class CraftingModuleInHand extends ModuleInHandGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeIntArray(amount);
 		output.writeBoolean(cleanupExclude);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		amount = input.readIntArray();
 		cleanupExclude = input.readBoolean();

programming_language: Java
filename: ActiveSupplierSlot.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.module.inpipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -40,7 +38,7 @@ public class ActiveSupplierSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(patternUpgarde);
 		output.writeIntArray(slotArray);
@@ -49,7 +47,7 @@ public class ActiveSupplierSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		patternUpgarde = input.readBoolean();
 		slotArray = input.readIntArray();

programming_language: Java
filename: AdvancedExtractorModuleSlot.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.module.inpipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -56,13 +54,13 @@ public class AdvancedExtractorModuleSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(areItemsIncluded);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		areItemsIncluded = input.readBoolean();
 	}

programming_language: Java
filename: ApiaristAnalyzerModuleSlot.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.module.inpipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -50,13 +48,13 @@ public class ApiaristAnalyzerModuleSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(extractorMode);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		extractorMode = input.readInt();
 	}

programming_language: Java
filename: CCBasedQuickSortSlot.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.module.inpipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -50,13 +48,13 @@ public class CCBasedQuickSortSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(timeOut);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		timeOut = input.readInt();
 	}

programming_language: Java
filename: CraftingModuleSlot.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.module.inpipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -101,7 +99,7 @@ public class CraftingModuleSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(isAdvancedSat);
 		output.writeInt(liquidCrafter);
@@ -113,7 +111,7 @@ public class CraftingModuleSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		isAdvancedSat = input.readBoolean();
 		liquidCrafter = input.readInt();

programming_language: Java
filename: ExtractorModuleSlot.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.module.inpipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraftforge.common.util.ForgeDirection;
 
@@ -27,13 +25,13 @@ public class ExtractorModuleSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeForgeDirection(sneakyOrientation);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		sneakyOrientation = input.readForgeDirection();
 	}

programming_language: Java
filename: ItemSinkSlot.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.guis.module.inpipe;
 
-import java.io.IOException;
 import java.util.BitSet;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -39,7 +38,7 @@ public class ItemSinkSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(isDefaultRoute);
 		output.writeBoolean(hasFuzzyUpgrade);
@@ -48,7 +47,7 @@ public class ItemSinkSlot extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		isDefaultRoute = input.readBoolean();
 		hasFuzzyUpgrade = input.readBoolean();

programming_language: Java
filename: ProviderModuleGuiProvider.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.guis.module.inpipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraftforge.common.util.ForgeDirection;
 
@@ -76,7 +74,7 @@ public class ProviderModuleGuiProvider extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(exclude);
 		output.writeInt(extractorMode);
@@ -85,7 +83,7 @@ public class ProviderModuleGuiProvider extends ModuleCoordinatesGuiProvider {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		exclude = input.readBoolean();
 		extractorMode = input.readInt();

programming_language: Java
filename: ActivateNBTDebug.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import logisticspipes.LPConstants;
@@ -18,7 +16,7 @@ public class ActivateNBTDebug extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -36,7 +34,7 @@ public class ActivateNBTDebug extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: BufferTransfer.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -38,12 +36,12 @@ public class BufferTransfer extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		content = input.readByteArray();
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeByteArray(content);
 	}
 }

programming_language: Java
filename: CraftingPermissionPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
 import java.util.EnumSet;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -25,7 +24,7 @@ public class CraftingPermissionPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		enumSet = EnumSet.noneOf(CraftingDependency.class);
 		for (CraftingDependency type : CraftingDependency.values()) {
 			if (input.readBoolean()) {
@@ -40,7 +39,7 @@ public class CraftingPermissionPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		for (CraftingDependency type : CraftingDependency.values()) {
 			output.writeBoolean(enumSet.contains(type));
 		}

programming_language: Java
filename: DummyPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import logisticspipes.network.abstractpackets.ModernPacket;
@@ -15,7 +13,7 @@ public class DummyPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		throw new RuntimeException("This packet should never be used");
 	}
 
@@ -25,7 +23,7 @@ public class DummyPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		throw new RuntimeException("This packet should never be used");
 	}
 

programming_language: Java
filename: NEISetCraftingRecipe.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
@@ -44,7 +42,7 @@ public class NEISetCraftingRecipe extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 
 		output.writeInt(content.length);
@@ -64,7 +62,7 @@ public class NEISetCraftingRecipe extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 
 		content = new ItemStack[input.readInt()];

programming_language: Java
filename: PlayerConfigToClientPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -24,7 +22,7 @@ public class PlayerConfigToClientPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		LogisticsPipes.getClientPlayerConfig().readData(input);
 	}
 
@@ -32,7 +30,7 @@ public class PlayerConfigToClientPacket extends ModernPacket {
 	public void processPacket(EntityPlayer player) {}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		config.writeData(output);
 	}
 

programming_language: Java
filename: PlayerConfigToServerPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -25,7 +23,7 @@ public class PlayerConfigToServerPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		config = new PlayerConfig(null);
 		config.readData(input);
 	}
@@ -36,7 +34,7 @@ public class PlayerConfigToServerPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		config.writeData(output);
 	}
 

programming_language: Java
filename: PlayerListRequest.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.stream.Collectors;
@@ -35,8 +34,8 @@ public class PlayerListRequest extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 }

programming_language: Java
filename: RequestUpdateNamesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
@@ -27,7 +26,7 @@ public class RequestUpdateNamesPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -57,7 +56,7 @@ public class RequestUpdateNamesPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: UpdateName.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -43,13 +41,13 @@ public class UpdateName extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		ident = input.readItemIdentifierStack().getItem();
 		name = input.readUTF();
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeItemIdentifierStack(ident.makeStack(0));
 		output.writeUTF(name);
 	}

programming_language: Java
filename: AddItemToTrackPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.block;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -43,13 +41,13 @@ public class AddItemToTrackPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeItemIdentifier(item);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		item = input.readItemIdentifier();
 	}

programming_language: Java
filename: CraftingCycleRecipe.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.block;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.tileentity.TileEntity;
 
@@ -18,14 +16,14 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class CraftingCycleRecipe extends CoordinatesPacket {
 
-	public CraftingCycleRecipe(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private boolean down;
 
+	public CraftingCycleRecipe(int id) {
+		super(id);
+	}
+
 	@Override
 	public void processPacket(EntityPlayer player) {
 		TileEntity table = this.getTile(player.getEntityWorld(), TileEntity.class);
@@ -42,13 +40,13 @@ public class CraftingCycleRecipe extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(down);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		down = input.readBoolean();
 	}

programming_language: Java
filename: CraftingSetType.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.block;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.tileentity.TileEntity;
 
@@ -19,14 +17,14 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class CraftingSetType extends CoordinatesPacket {
 
-	public CraftingSetType(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private ItemIdentifier targetType;
 
+	public CraftingSetType(int id) {
+		super(id);
+	}
+
 	@Override
 	public void processPacket(EntityPlayer player) {
 		TileEntity table = this.getTile(player.getEntityWorld(), TileEntity.class);
@@ -45,13 +43,13 @@ public class CraftingSetType extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeItemIdentifier(targetType);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		targetType = input.readItemIdentifier();
 	}

programming_language: Java
filename: PowerPacketLaser.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.block;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraftforge.common.util.ForgeDirection;
 
@@ -16,36 +14,31 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class PowerPacketLaser extends CoordinatesPacket {
 
-	public PowerPacketLaser(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private ForgeDirection dir;
-
 	@Getter
 	@Setter
 	private int color;
-
 	@Getter
 	@Setter
 	private boolean reverse;
-
 	@Getter
 	@Setter
 	private boolean renderBall;
-
 	@Getter
 	@Setter
 	private float length;
-
 	@Getter
 	@Setter
 	private boolean remove = false;
 
+	public PowerPacketLaser(int id) {
+		super(id);
+	}
+
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		length = input.readFloat();
 		dir = input.readForgeDirection();
@@ -66,7 +59,7 @@ public class PowerPacketLaser extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeFloat(length);
 		output.writeForgeDirection(dir);

programming_language: Java
filename: PowerProviderLevel.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.block;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import logisticspipes.blocks.powertile.LogisticsPowerProviderTileEntity;
@@ -28,13 +26,13 @@ public class PowerProviderLevel extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		setDouble(input.readDouble());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeDouble(getDouble());
 	}

programming_language: Java
filename: RemoveAmoundTask.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.block;
 
-import java.io.IOException;
 import java.util.Iterator;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -40,13 +39,13 @@ public class RemoveAmoundTask extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeItemIdentifier(item);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		item = input.readItemIdentifier();
 	}

programming_language: Java
filename: RunningCraftingTasks.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.block;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -33,12 +32,12 @@ public class RunningCraftingTasks extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeCollection(identList, LPDataOutput::writeItemIdentifierStack);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		identList = input.readArrayList(LPDataInput::readItemIdentifierStack);
 	}
 

programming_language: Java
filename: SecurityStationId.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.block;
 
-import java.io.IOException;
 import java.util.UUID;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -38,14 +37,14 @@ public class SecurityStationId extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeLong(uuid.getMostSignificantBits());
 		output.writeLong(uuid.getLeastSignificantBits());
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		uuid = new UUID(input.readLong(), input.readLong());
 	}

programming_language: Java
filename: ChassisGUI.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.chassis;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -26,13 +24,13 @@ public class ChassisGUI extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(buttonID);
 		super.writeData(output);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		buttonID = input.readInt();
 		super.readData(input);
 	}

programming_language: Java
filename: ChestGuiClosed.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.chassis;
 
-import java.io.IOException;
 import java.lang.ref.WeakReference;
 import java.util.List;
 
@@ -19,7 +18,7 @@ public class ChestGuiClosed extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -38,7 +37,7 @@ public class ChestGuiClosed extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: ChestGuiOpened.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.chassis;
 
-import java.io.IOException;
 import java.lang.ref.WeakReference;
 import java.util.List;
 
@@ -21,7 +20,7 @@ public class ChestGuiOpened extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -40,7 +39,7 @@ public class ChestGuiOpened extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: EnableQuickSortMarker.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.chassis;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import logisticspipes.network.abstractpackets.ModernPacket;
@@ -16,7 +14,7 @@ public class EnableQuickSortMarker extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -24,7 +22,7 @@ public class EnableQuickSortMarker extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: CPipeCleanupStatus.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.cpipe;
 
-import java.io.IOException;
-
 import net.minecraft.client.Minecraft;
 import net.minecraft.entity.player.EntityPlayer;
 
@@ -45,13 +43,13 @@ public class CPipeCleanupStatus extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(mode);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		mode = input.readBoolean();
 	}

programming_language: Java
filename: CPipeSatelliteId.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.cpipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -29,13 +27,13 @@ public class CPipeSatelliteId extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(pipeId);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		pipeId = input.readInt();
 	}

programming_language: Java
filename: PipeDebugLogAskForTarget.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.debug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.util.MovingObjectPosition;
 import net.minecraft.util.MovingObjectPosition.MovingObjectType;
@@ -20,7 +18,7 @@ public class PipeDebugLogAskForTarget extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -31,7 +29,7 @@ public class PipeDebugLogAskForTarget extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: SendNewLogLine.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.debug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -27,7 +25,7 @@ public class SendNewLogLine extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		windowID = input.readInt();
 		line = input.readUTF();
 	}
@@ -38,7 +36,7 @@ public class SendNewLogLine extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(windowID);
 		output.writeUTF(line);
 	}

programming_language: Java
filename: SendNewLogWindow.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.debug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -27,7 +25,7 @@ public class SendNewLogWindow extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		windowID = input.readInt();
 		title = input.readUTF();
 	}
@@ -38,7 +36,7 @@ public class SendNewLogWindow extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(windowID);
 		output.writeUTF(title);
 	}

programming_language: Java
filename: UpdateStatusEntries.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.debug;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -31,12 +30,12 @@ public class UpdateStatusEntries extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		windowID = input.readInt();
 		status = input.readArrayList(new IReadListObject<StatusEntry>() {
 
 			@Override
-			public StatusEntry readObject(LPDataInput input) throws IOException {
+			public StatusEntry readObject(LPDataInput input) {
 				StatusEntry status = new StatusEntry();
 				status.name = input.readUTF();
 				if (input.readBoolean()) {
@@ -53,12 +52,12 @@ public class UpdateStatusEntries extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(windowID);
 		output.writeCollection(status, new IWriteListObject<StatusEntry>() {
 
 			@Override
-			public void writeObject(LPDataOutput output, StatusEntry entry) throws IOException {
+			public void writeObject(LPDataOutput output, StatusEntry entry) {
 				output.writeUTF(entry.name);
 				output.writeBoolean(entry.subEntry != null);
 				if (entry.subEntry != null) {

programming_language: Java
filename: DebugAskForTarget.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.debuggui;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.util.MovingObjectPosition;
 import cpw.mods.fml.client.FMLClientHandler;
@@ -19,7 +17,7 @@ public class DebugAskForTarget extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -28,15 +26,15 @@ public class DebugAskForTarget extends ModernPacket {
 			MainProxy.sendPacketToServer(PacketHandler.getPacket(DebugTargetResponse.class).setMode(DebugTargetResponse.TargetMode.None));
 		} else if (box.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
 			MainProxy.sendPacketToServer(PacketHandler.getPacket(DebugTargetResponse.class).setMode(DebugTargetResponse.TargetMode.Block)
-					.setAdditions(new Object[] { box.blockX, box.blockY, box.blockZ }));
+					.setAdditions(new int[] { box.blockX, box.blockY, box.blockZ }));
 		} else if (box.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) {
 			MainProxy.sendPacketToServer(PacketHandler.getPacket(DebugTargetResponse.class).setMode(DebugTargetResponse.TargetMode.Entity)
-					.setAdditions(new Object[] { box.entityHit.getEntityId() }));
+					.setAdditions(new int[] { box.entityHit.getEntityId() }));
 		}
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: DebugDataPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.debuggui;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -27,7 +25,7 @@ public class DebugDataPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		payload = input.readByteArray();
 		identifier = input.readInt();
 	}
@@ -38,7 +36,7 @@ public class DebugDataPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeByteArray(payload);
 		output.writeInt(identifier);
 	}

programming_language: Java
filename: DebugPanelOpen.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.debuggui;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -32,13 +30,13 @@ public class DebugPanelOpen extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		setName(input.readUTF());
 		setIdentification(input.readInt());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeUTF(getName());
 		output.writeInt(getIdentification());
 	}

programming_language: Java
filename: DebugTargetResponse.java
change_type: ModificationType.MODIFY
diff: @@ -1,13 +1,5 @@
 package logisticspipes.network.packets.debuggui;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-
 import net.minecraft.block.Block;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.player.EntityPlayer;
@@ -29,40 +21,21 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class DebugTargetResponse extends ModernPacket {
 
-	public DebugTargetResponse(int id) {
-		super(id);
-	}
-
-	public enum TargetMode {
-		Block,
-		Entity,
-		None
-	}
-
 	@Getter
 	@Setter
 	private TargetMode mode;
-
 	@Getter
 	@Setter
-	private Object[] additions = new Object[0];
+	private int[] additions = new int[0];
+
+	public DebugTargetResponse(int id) {
+		super(id);
+	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		mode = TargetMode.values()[input.readByte()];
-		int size = input.readInt();
-		additions = new Object[size];
-		for (int i = 0; i < size; i++) {
-			byte[] bytes = input.readByteArray();
-			ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
-			ObjectInput in = new ObjectInputStream(bis);
-			try {
-				Object o = in.readObject();
-				additions[i] = o;
-			} catch (ClassNotFoundException e) {
-				throw new UnsupportedOperationException(e);
-			}
-		}
+		additions = input.readIntArray();
 	}
 
 	@Override
@@ -70,9 +43,9 @@ public class DebugTargetResponse extends ModernPacket {
 		if (mode == TargetMode.None) {
 			player.addChatComponentMessage(new ChatComponentText(ChatColor.RED + "No Target Found"));
 		} else if (mode == TargetMode.Block) {
-			int x = (Integer) additions[0];
-			int y = (Integer) additions[1];
-			int z = (Integer) additions[2];
+			int x = additions[0];
+			int y = additions[1];
+			int z = additions[2];
 			player.addChatComponentMessage(new ChatComponentText("Checking Block at: x:" + x + " y:" + y + " z:" + z));
 			Block id = player.worldObj.getBlock(x, y, z);
 			player.addChatComponentMessage(new ChatComponentText("Found Block with Id: " + id.getClass()));
@@ -94,7 +67,7 @@ public class DebugTargetResponse extends ModernPacket {
 				MainProxy.sendPacketToPlayer(PacketHandler.getPacket(OpenChatGui.class), player);
 			}
 		} else if (mode == TargetMode.Entity) {
-			int entityId = (Integer) additions[0];
+			int entityId = additions[0];
 			final Entity entity = player.worldObj.getEntityByID(entityId);
 			if (entity == null) {
 				player.addChatComponentMessage(new ChatComponentText(ChatColor.RED + "No Entity found"));
@@ -116,16 +89,9 @@ public class DebugTargetResponse extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeByte(mode.ordinal());
-		output.writeInt(additions.length);
-		for (Object addition : additions) {
-			ByteArrayOutputStream bos = new ByteArrayOutputStream();
-			ObjectOutput out = null;
-			out = new ObjectOutputStream(bos);
-			out.writeObject(addition);
-			output.writeByteArray(bos.toByteArray());
-		}
+		output.writeIntArray(additions);
 	}
 
 	@Override
@@ -137,4 +103,10 @@ public class DebugTargetResponse extends ModernPacket {
 	public boolean isCompressable() {
 		return true;
 	}
+
+	public enum TargetMode {
+		Block,
+		Entity,
+		None
+	}
 }

programming_language: Java
filename: DummyContainerSlotClick.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.gui;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.entity.player.EntityPlayerMP;
 import net.minecraft.inventory.Slot;
@@ -38,7 +36,7 @@ public class DummyContainerSlotClick extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		slotId = input.readInt();
 		stack = input.readItemIdentifierStack().makeNormalStack();
 		button = input.readInt();
@@ -56,7 +54,7 @@ public class DummyContainerSlotClick extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(slotId);
 		output.writeItemIdentifierStack(ItemIdentifierStack.getFromStack(stack));
 		output.writeInt(button);

programming_language: Java
filename: FuzzySlotSettingsPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.gui;
 
-import java.io.IOException;
 import java.util.BitSet;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -28,7 +27,7 @@ public class FuzzySlotSettingsPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		slotNumber = input.readInt();
 		flags = input.readBitSet();
 	}
@@ -41,7 +40,7 @@ public class FuzzySlotSettingsPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(slotNumber);
 		output.writeBitSet(flags);
 	}

programming_language: Java
filename: GUIPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.gui;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -41,7 +39,7 @@ public class GUIPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		guiID = input.readInt();
 		windowID = input.readInt();
 		guiData = input.readByteArray();
@@ -54,7 +52,7 @@ public class GUIPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(guiID);
 		output.writeInt(windowID);
 		output.writeByteArray(guiData);

programming_language: Java
filename: GuiReopenPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.gui;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -19,22 +17,22 @@ public class GuiReopenPacket extends CoordinatesPacket {
 	@Setter
 	private int guiID;
 
+	public GuiReopenPacket(int id) {
+		super(id);
+	}
+
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(getGuiID());
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		guiID = input.readInt();
 	}
 
-	public GuiReopenPacket(int id) {
-		super(id);
-	}
-
 	@Override
 	public void processPacket(EntityPlayer player) {
 		player.openGui(LogisticsPipes.instance, getGuiID(), player.worldObj, getPosX(), getPosY(), getPosZ());

programming_language: Java
filename: OpenChatGui.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.gui;
 
-import java.io.IOException;
-
 import net.minecraft.client.gui.GuiChat;
 import net.minecraft.entity.player.EntityPlayer;
 import cpw.mods.fml.client.FMLClientHandler;
@@ -18,7 +16,7 @@ public class OpenChatGui extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	@ClientSideOnlyMethodContent
@@ -27,7 +25,7 @@ public class OpenChatGui extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: HUDSettingsPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.hud;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.util.ChatComponentTranslation;
 
@@ -99,14 +97,14 @@ public class HUDSettingsPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		buttonId = input.readInt();
 		state = input.readBoolean();
 		slot = input.readInt();
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(buttonId);
 		output.writeBoolean(state);
 		output.writeInt(slot);

programming_language: Java
filename: ApiaristAnalyserMode.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.module;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -38,13 +36,13 @@ public class ApiaristAnalyserMode extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(mode);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		mode = input.readInt();
 	}

programming_language: Java
filename: BeeModuleSetBeePacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.module;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -67,7 +65,7 @@ public class BeeModuleSetBeePacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(integer2);
 		output.writeInt(integer3);
@@ -79,7 +77,7 @@ public class BeeModuleSetBeePacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		integer2 = input.readInt();
 		integer3 = input.readInt();

programming_language: Java
filename: ItemSinkDefaultPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.module;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -24,13 +22,13 @@ public class ItemSinkDefaultPacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(isDefault);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		isDefault = input.readBoolean();
 	}

programming_language: Java
filename: ModuleBasedItemSinkList.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.module;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.nbt.NBTTagCompound;
 
@@ -43,13 +41,13 @@ public class ModuleBasedItemSinkList extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeNBTTagCompound(nbt);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		nbt = input.readNBTTagCompound();
 	}

programming_language: Java
filename: SupplierPipeLimitedPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.module;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import cpw.mods.fml.client.FMLClientHandler;
 
@@ -55,13 +53,13 @@ public class SupplierPipeLimitedPacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(isLimited);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		isLimited = input.readBoolean();
 	}

programming_language: Java
filename: CCBasedQuickSortMode.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.modules;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -38,13 +36,13 @@ public class CCBasedQuickSortMode extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(timeOut);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		timeOut = input.readInt();
 	}

programming_language: Java
filename: CCBasedQuickSortSinkSize.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.modules;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -38,13 +36,13 @@ public class CCBasedQuickSortSinkSize extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(sinkSize);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		sinkSize = input.readInt();
 	}

programming_language: Java
filename: ItemSinkFuzzy.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.modules;
 
-import java.io.IOException;
 import java.util.BitSet;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -55,7 +54,7 @@ public class ItemSinkFuzzy extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(pos);
 		if (pos != -1) {
@@ -67,7 +66,7 @@ public class ItemSinkFuzzy extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		pos = input.readInt();
 		if (pos != -1) {

programming_language: Java
filename: ProviderModuleMode.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.modules;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -38,13 +36,13 @@ public class ProviderModuleMode extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(mode);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		mode = input.readInt();
 	}

programming_language: Java
filename: SupplierPipeMode.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.modules;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import cpw.mods.fml.client.FMLClientHandler;
 
@@ -49,13 +47,13 @@ public class SupplierPipeMode extends IntegerModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		hasPatternUpgrade = input.readBoolean();
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(hasPatternUpgrade);
 	}

programming_language: Java
filename: MultiBlockCoordinatesPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.multiblock;
 
-import java.io.IOException;
 import java.util.List;
 import java.util.Set;
 
@@ -27,24 +26,24 @@ public class MultiBlockCoordinatesPacket extends CoordinatesPacket {
 	@Setter
 	private List<CoreMultiBlockPipe.SubBlockTypeForShare> subTypes;
 
+	public MultiBlockCoordinatesPacket(int id) {
+		super(id);
+	}
+
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeCollection(targetPos, LPDataOutput::writeLPPosition);
 		output.writeCollection(subTypes, LPDataOutput::writeEnum);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		targetPos = input.readSet(LPDataInput::readLPPosition);
 		subTypes = input.readArrayList(data1 -> data1.readEnum(CoreMultiBlockPipe.SubBlockTypeForShare.class));
 	}
 
-	public MultiBlockCoordinatesPacket(int id) {
-		super(id);
-	}
-
 	@Override
 	public void processPacket(EntityPlayer player) {
 		LogisticsTileGenericSubMultiBlock block = this.getTile(player.getEntityWorld(), LogisticsTileGenericSubMultiBlock.class);

programming_language: Java
filename: ComponentList.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.orderer;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -60,7 +59,7 @@ public class ComponentList extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeCollection(used, LPDataOutput::writeResource);
 		output.writeCollection(missing, LPDataOutput::writeResource);
 		// ToDo: ???
@@ -68,7 +67,7 @@ public class ComponentList extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		used = input.readArrayList(LPDataInput::readResource);
 		missing = input.readArrayList(LPDataInput::readResource);
 	}

programming_language: Java
filename: MissingItems.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.orderer;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -63,13 +62,13 @@ public class MissingItems extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeCollection(items, LPDataOutput::writeResource);
 		output.writeBoolean(isFlag());
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		items = input.readArrayList(LPDataInput::readResource);
 		setFlag(input.readBoolean());
 	}

programming_language: Java
filename: OrdererWatchPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.orderer;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -31,14 +29,14 @@ public class OrdererWatchPacket extends IntegerCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeResource(stack);
 		output.writeLinkedLogisticsOrderList(orders);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		stack = input.readResource();
 		orders = input.readLinkedLogisticsOrderList();

programming_language: Java
filename: AskForOpenTarget.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.util.MovingObjectPosition;
 import net.minecraft.util.MovingObjectPosition.MovingObjectType;
@@ -20,7 +18,7 @@ public class AskForOpenTarget extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -32,7 +30,7 @@ public class AskForOpenTarget extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: CraftingPipeUpdatePacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -54,7 +52,7 @@ public class CraftingPipeUpdatePacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeIntArray(amount);
 		output.writeIntArray(liquidSatelliteIdArray);
@@ -65,7 +63,7 @@ public class CraftingPipeUpdatePacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		amount = input.readIntArray();
 		liquidSatelliteIdArray = input.readIntArray();

programming_language: Java
filename: FindMostLikelyRecipeComponents.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
@@ -98,7 +97,7 @@ public class FindMostLikelyRecipeComponents extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		content = input.readArrayList(input1 -> {
 			GuiRecipeImport.Canidates can = new GuiRecipeImport.Canidates(new TreeSet<>());
@@ -108,7 +107,7 @@ public class FindMostLikelyRecipeComponents extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeCollection(content, (data, object) -> data.writeCollection(object.order,
 				(IWriteListObject<ItemIdentifierStack>) LPDataOutput::writeItemIdentifierStack));

programming_language: Java
filename: ItemAmountSignUpdatePacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraftforge.common.util.ForgeDirection;
 
@@ -44,7 +42,7 @@ public class ItemAmountSignUpdatePacket extends Integer2CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		if (input.readBoolean()) {
 			stack = input.readItemIdentifierStack();
@@ -52,7 +50,7 @@ public class ItemAmountSignUpdatePacket extends Integer2CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		if (stack == null) {
 			output.writeBoolean(false);

programming_language: Java
filename: ItemBufferSyncPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import logisticspipes.network.abstractpackets.ListSyncPacket;
@@ -26,13 +24,12 @@ public class ItemBufferSyncPacket
 
 	@Override
 	public void writeObject(LPDataOutput output,
-			Triplet<ItemIdentifierStack, Pair<Integer /* Time */, Integer /* BufferCounter */>, LPTravelingItemServer> object) throws IOException {
+			Triplet<ItemIdentifierStack, Pair<Integer /* Time */, Integer /* BufferCounter */>, LPTravelingItemServer> object) {
 		output.writeItemIdentifierStack(object.getValue1());
 	}
 
 	@Override
-	public Triplet<ItemIdentifierStack, Pair<Integer /* Time */, Integer /* BufferCounter */>, LPTravelingItemServer> readObject(LPDataInput input)
-			throws IOException {
+	public Triplet<ItemIdentifierStack, Pair<Integer /* Time */, Integer /* BufferCounter */>, LPTravelingItemServer> readObject(LPDataInput input) {
 		return new Triplet<>(input.readItemIdentifierStack(), null, null);
 	}
 

programming_language: Java
filename: MostLikelyRecipeComponentsResponse.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.client.Minecraft;
@@ -31,7 +30,7 @@ public class MostLikelyRecipeComponentsResponse extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		response = input.readArrayList(LPDataInput::readInt);
 	}
 
@@ -61,7 +60,7 @@ public class MostLikelyRecipeComponentsResponse extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeCollection(response, LPDataOutput::writeInt);
 	}
 

programming_language: Java
filename: ParticleFX.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -21,22 +20,22 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class ParticleFX extends CoordinatesPacket {
 
-	public ParticleFX(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	@NonNull
 	private Collection<ParticleCount> particles;
 
+	public ParticleFX(int id) {
+		super(id);
+	}
+
 	@Override
 	public ModernPacket template() {
 		return new ParticleFX(getId());
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		int nparticles = input.readInt();
 		particles = new ArrayList<>(nparticles);
@@ -48,7 +47,7 @@ public class ParticleFX extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(particles.size());
 		for (ParticleCount pc : particles) {

programming_language: Java
filename: PipeContentPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.lang.ref.WeakReference;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -18,10 +17,6 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class PipeContentPacket extends ModernPacket {
 
-	public PipeContentPacket(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private ItemIdentifierStack item;
@@ -29,8 +24,12 @@ public class PipeContentPacket extends ModernPacket {
 	@Setter
 	private int travelId;
 
+	public PipeContentPacket(int id) {
+		super(id);
+	}
+
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		item = input.readItemIdentifierStack();
 		travelId = input.readInt();
 	}
@@ -54,7 +53,7 @@ public class PipeContentPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeItemIdentifierStack(item);
 		output.writeInt(travelId);
 	}

programming_language: Java
filename: PipeDebugAskForTarget.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.tileentity.TileEntity;
 import net.minecraft.util.ChatComponentText;
@@ -31,7 +29,7 @@ public class PipeDebugAskForTarget extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		isServer = input.readBoolean();
 	}
 
@@ -56,7 +54,7 @@ public class PipeDebugAskForTarget extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeBoolean(isServer);
 	}
 

programming_language: Java
filename: PipeFluidUpdate.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.BitSet;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -21,18 +20,17 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class PipeFluidUpdate extends CoordinatesPacket {
 
-	public PipeFluidUpdate(int id) {
-		super(id);
-	}
-
 	@Getter(value = AccessLevel.PRIVATE)
 	@Setter
 	private FluidStack[] renderCache = new FluidStack[ForgeDirection.values().length];
-
 	private BitSet bits = new BitSet();
 
+	public PipeFluidUpdate(int id) {
+		super(id);
+	}
+
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		bits = input.readBitSet();
 		for (int i = 0; i < renderCache.length; i++) {
@@ -43,7 +41,7 @@ public class PipeFluidUpdate extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		for (int i = 0; i < renderCache.length; i++) {
 			bits.set(i, renderCache[i] != null);

programming_language: Java
filename: PipeManagerContentPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -49,7 +48,7 @@ public class PipeManagerContentPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		for (LogisticsOrder order : manager) {
 			output.writeByte(1);
@@ -59,7 +58,7 @@ public class PipeManagerContentPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		clientOrder = new LinkedList<>();
 		while (input.readByte() == 1) {

programming_language: Java
filename: PipeManagerWatchingPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -44,13 +42,13 @@ public class PipeManagerWatchingPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeBoolean(start);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		start = input.readBoolean();
 	}

programming_language: Java
filename: PipePositionPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraftforge.common.util.ForgeDirection;
 
@@ -49,7 +47,7 @@ public class PipePositionPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(travelId);
 		output.writeFloat(speed);
@@ -60,7 +58,7 @@ public class PipePositionPacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		travelId = input.readInt();
 		speed = input.readFloat();

programming_language: Java
filename: PipeSignTypes.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -17,14 +16,14 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class PipeSignTypes extends CoordinatesPacket {
 
-	public PipeSignTypes(int id) {
-		super(id);
-	}
-
 	@Getter
 	@Setter
 	private List<Integer> types;
 
+	public PipeSignTypes(int id) {
+		super(id);
+	}
+
 	@Override
 	public void processPacket(EntityPlayer player) {
 		LogisticsTileGenericPipe pipe = this.getPipe(player.getEntityWorld(), LTGPCompletionCheck.PIPE);
@@ -35,13 +34,13 @@ public class PipeSignTypes extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeCollection(types, LPDataOutput::writeInt);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		types = input.readArrayList(LPDataInput::readInt);
 	}

programming_language: Java
filename: PipeTileStatePacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -51,15 +49,11 @@ public class PipeTileStatePacket extends CoordinatesPacket {
 		if (pipe == null) {
 			return;
 		}
-		try {
-			LPDataIOWrapper.provideData(bytesRenderState, pipe.renderState::readData);
-			LPDataIOWrapper.provideData(bytesCoreState, pipe.coreState::readData);
-			LPDataIOWrapper.provideData(bytesBCPluggableState, pipe.bcPlugableState::readData);
-			pipe.afterStateUpdated();
-			LPDataIOWrapper.provideData(bytesPipe, pipe.pipe::readData);
-		} catch (IOException e) {
-			throw new RuntimeException(e);
-		}
+		LPDataIOWrapper.provideData(bytesRenderState, pipe.renderState::readData);
+		LPDataIOWrapper.provideData(bytesCoreState, pipe.coreState::readData);
+		LPDataIOWrapper.provideData(bytesBCPluggableState, pipe.bcPlugableState::readData);
+		pipe.afterStateUpdated();
+		LPDataIOWrapper.provideData(bytesPipe, pipe.pipe::readData);
 	}
 
 	@Override
@@ -68,7 +62,7 @@ public class PipeTileStatePacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 
 		IClientState[] clientStates = new IClientState[] { renderState, coreState, bcPluggableState, pipe };
@@ -80,7 +74,7 @@ public class PipeTileStatePacket extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 
 		bytesRenderState = input.readByteArray();

programming_language: Java
filename: RoutingLaserPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -26,7 +25,7 @@ public class RoutingLaserPacket extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		while (input.readBoolean()) {
 			lasers.add(new LaserData().readData(input));
 		}
@@ -38,7 +37,7 @@ public class RoutingLaserPacket extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		for (LaserData laser : lasers) {
 			output.writeBoolean(true);
 			laser.writeData(output);

programming_language: Java
filename: SlotFinderActivatePacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -38,7 +36,7 @@ public class SlotFinderActivatePacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(tagetPosX);
 		output.writeInt(tagetPosY);
@@ -47,7 +45,7 @@ public class SlotFinderActivatePacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		tagetPosX = input.readInt();
 		tagetPosY = input.readInt();

programming_language: Java
filename: SlotFinderNumberPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -127,7 +126,7 @@ public class SlotFinderNumberPacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(inventorySlot);
 		output.writeInt(slot);
@@ -137,7 +136,7 @@ public class SlotFinderNumberPacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		inventorySlot = input.readInt();
 		slot = input.readInt();

programming_language: Java
filename: SlotFinderOpenGuiPacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.Iterator;
 
 import net.minecraft.block.Block;
@@ -122,13 +121,13 @@ public class SlotFinderOpenGuiPacket extends ModuleCoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeInt(slot);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		slot = input.readInt();
 	}

programming_language: Java
filename: StatUpdate.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.pipe;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -75,7 +74,7 @@ public class StatUpdate extends CoordinatesPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		initData();
 		super.writeData(output);
 		output.writeInt(stat_session_sent);
@@ -88,7 +87,7 @@ public class StatUpdate extends CoordinatesPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		stat_session_sent = input.readInt();
 		stat_session_recieved = input.readInt();

programming_language: Java
filename: RoutingUpdateAskForTarget.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.util.MovingObjectPosition;
 import net.minecraft.util.MovingObjectPosition.MovingObjectType;
@@ -22,7 +20,7 @@ public class RoutingUpdateAskForTarget extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	@ClientSideOnlyMethodContent
@@ -32,15 +30,15 @@ public class RoutingUpdateAskForTarget extends ModernPacket {
 			MainProxy.sendPacketToServer(PacketHandler.getPacket(RoutingUpdateTargetResponse.class).setMode(TargetMode.None));
 		} else if (box.typeOfHit == MovingObjectType.BLOCK) {
 			MainProxy.sendPacketToServer(PacketHandler.getPacket(RoutingUpdateTargetResponse.class).setMode(TargetMode.Block)
-					.setAdditions(new Object[] { box.blockX, box.blockY, box.blockZ }));
+					.setAdditions(new int[] { box.blockX, box.blockY, box.blockZ }));
 		} else if (box.typeOfHit == MovingObjectType.ENTITY) {
 			MainProxy.sendPacketToServer(PacketHandler.getPacket(RoutingUpdateTargetResponse.class).setMode(TargetMode.Entity)
-					.setAdditions(new Object[] { box.entityHit.getEntityId() }));
+					.setAdditions(new int[] { box.entityHit.getEntityId() }));
 		}
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: RoutingUpdateCanidatePipe.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -40,12 +38,12 @@ public class RoutingUpdateCanidatePipe extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		exitRoute = input.readExitRoute(MainProxy.getClientMainWorld());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeExitRoute(exitRoute);
 	}
 }

programming_language: Java
filename: RoutingUpdateClearClient.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import logisticspipes.network.abstractpackets.ModernPacket;
@@ -16,7 +14,7 @@ public class RoutingUpdateClearClient extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -24,7 +22,7 @@ public class RoutingUpdateClearClient extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: RoutingUpdateDebugCanidateList.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -25,7 +23,7 @@ public class RoutingUpdateDebugCanidateList extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		msg = new ExitRoute[input.readInt()];
 		for (int i = 0; i < msg.length; i++) {
 			msg[i] = input.readExitRoute(MainProxy.getClientMainWorld());
@@ -38,7 +36,7 @@ public class RoutingUpdateDebugCanidateList extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(msg.length);
 		for (ExitRoute element : msg) {
 			output.writeExitRoute(element);

programming_language: Java
filename: RoutingUpdateDebugClosedSet.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.IOException;
 import java.util.EnumSet;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -30,7 +29,7 @@ public class RoutingUpdateDebugClosedSet extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		set = input.readEnumSet(PipeRoutingConnectionType.class);
 		pos = input.readLPPosition();
 	}
@@ -41,7 +40,7 @@ public class RoutingUpdateDebugClosedSet extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeEnumSet(set, PipeRoutingConnectionType.class);
 		output.writeLPPosition(pos);
 	}

programming_language: Java
filename: RoutingUpdateDebugFilters.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.EnumMap;
 import java.util.List;
@@ -35,7 +34,7 @@ public class RoutingUpdateDebugFilters extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		pos = input.readLPPosition();
 		filterPositions = new EnumMap<>(PipeRoutingConnectionType.class);
 		short id;
@@ -60,7 +59,7 @@ public class RoutingUpdateDebugFilters extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeLPPosition(pos);
 		for (PipeRoutingConnectionType type : filters.keySet()) {
 			output.writeShort(type.ordinal());

programming_language: Java
filename: RoutingUpdateDoneDebug.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import logisticspipes.network.abstractpackets.ModernPacket;
@@ -16,7 +14,7 @@ public class RoutingUpdateDoneDebug extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -24,7 +22,7 @@ public class RoutingUpdateDoneDebug extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: RoutingUpdateInitDebug.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import logisticspipes.network.abstractpackets.ModernPacket;
@@ -16,7 +14,7 @@ public class RoutingUpdateInitDebug extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public void processPacket(EntityPlayer player) {
@@ -24,7 +22,7 @@ public class RoutingUpdateInitDebug extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
 	public ModernPacket template() {

programming_language: Java
filename: RoutingUpdateSourcePipe.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -40,12 +38,12 @@ public class RoutingUpdateSourcePipe extends ModernPacket {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		exitRoute = input.readExitRoute(MainProxy.getClientMainWorld());
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeExitRoute(exitRoute);
 	}
 }

programming_language: Java
filename: RoutingUpdateTargetResponse.java
change_type: ModificationType.MODIFY
diff: @@ -1,13 +1,5 @@
 package logisticspipes.network.packets.routingdebug;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-
 import net.minecraft.block.Block;
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.tileentity.TileEntity;
@@ -31,40 +23,21 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class RoutingUpdateTargetResponse extends ModernPacket {
 
-	public RoutingUpdateTargetResponse(int id) {
-		super(id);
-	}
-
-	public enum TargetMode {
-		Block,
-		Entity,
-		None
-	}
-
 	@Getter
 	@Setter
 	private TargetMode mode;
-
 	@Getter
 	@Setter
-	private Object[] additions = new Object[0];
+	private int[] additions = new int[0];
+
+	public RoutingUpdateTargetResponse(int id) {
+		super(id);
+	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		mode = TargetMode.values()[input.readByte()];
-		int size = input.readInt();
-		additions = new Object[size];
-		for (int i = 0; i < size; i++) {
-			byte[] bytes = input.readByteArray();
-			ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
-			ObjectInput in = new ObjectInputStream(bis);
-			try {
-				Object o = in.readObject();
-				additions[i] = o;
-			} catch (ClassNotFoundException e) {
-				throw new UnsupportedOperationException(e);
-			}
-		}
+		additions = input.readIntArray();
 	}
 
 	@Override
@@ -72,9 +45,9 @@ public class RoutingUpdateTargetResponse extends ModernPacket {
 		if (mode == TargetMode.None) {
 			player.addChatMessage(new ChatComponentText(ChatColor.RED + "No Target Found"));
 		} else if (mode == TargetMode.Block) {
-			int x = (Integer) additions[0];
-			int y = (Integer) additions[1];
-			int z = (Integer) additions[2];
+			int x = additions[0];
+			int y = additions[1];
+			int z = additions[2];
 			player.addChatMessage(new ChatComponentText("Checking Block at: x:" + x + " y:" + y + " z:" + z));
 			Block id = player.worldObj.getBlock(x, y, z);
 			player.addChatMessage(new ChatComponentText("Found Block with Id: " + Block.getIdFromBlock(id)));
@@ -103,15 +76,9 @@ public class RoutingUpdateTargetResponse extends ModernPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeByte(mode.ordinal());
-		output.writeInt(additions.length);
-		for (Object addition : additions) {
-			ByteArrayOutputStream bos = new ByteArrayOutputStream();
-			ObjectOutput out = new ObjectOutputStream(bos);
-			out.writeObject(addition);
-			output.writeByteArray(bos.toByteArray());
-		}
+		output.writeIntArray(additions);
 	}
 
 	@Override
@@ -123,4 +90,10 @@ public class RoutingUpdateTargetResponse extends ModernPacket {
 	public boolean isCompressable() {
 		return true;
 	}
+
+	public enum TargetMode {
+		Block,
+		Entity,
+		None
+	}
 }

programming_language: Java
filename: SatPipeSetID.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.satpipe;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 
 import lombok.Getter;
@@ -17,6 +15,10 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class SatPipeSetID extends CoordinatesPacket {
 
+	@Getter
+	@Setter
+	private int satID;
+
 	public SatPipeSetID(int id) {
 		super(id);
 	}
@@ -26,18 +28,14 @@ public class SatPipeSetID extends CoordinatesPacket {
 		return new SatPipeSetID(getId());
 	}
 
-	@Getter
-	@Setter
-	private int satID;
-
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(satID);
 		super.writeData(output);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		satID = input.readInt();
 		super.readData(input);
 	}

programming_language: Java
filename: SneakyUpgradeSidePacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.upgrade;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.item.ItemStack;
 import net.minecraft.nbt.NBTTagCompound;
@@ -39,13 +37,13 @@ public class SneakyUpgradeSidePacket extends SlotPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeForgeDirection(side);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		side = input.readForgeDirection();
 	}

programming_language: Java
filename: ToogleDisconnectionUpgradeSidePacket.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.network.packets.upgrade;
 
-import java.io.IOException;
-
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.item.ItemStack;
 import net.minecraft.nbt.NBTTagCompound;
@@ -46,13 +44,13 @@ public class ToogleDisconnectionUpgradeSidePacket extends SlotPacket {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		super.writeData(output);
 		output.writeForgeDirection(side);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		super.readData(input);
 		side = input.readForgeDirection();
 	}

programming_language: Java
filename: CoreRoutedPipe.java
change_type: ModificationType.MODIFY
diff: @@ -7,7 +7,6 @@
 
 package logisticspipes.pipes.basic;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.BitSet;
@@ -132,71 +131,49 @@ import network.rs485.logisticspipes.world.WorldCoordinatesWrapper;
 public abstract class CoreRoutedPipe extends CoreUnroutedPipe
 		implements IClientState, IRequestItems, ITrackStatistics, IWorldProvider, IWatchingHandler, IPipeServiceProvider, IQueueCCEvent, ILPPositionProvider {
 
-	public enum ItemSendMode {
-		Normal,
-		Fast
-	}
-
-	protected boolean stillNeedReplace = true;
-	private boolean recheckConnections = false;
-
-	protected IRouter router;
-	protected String routerId;
-	protected Object routerIdLock = new Object();
 	private static int pipecount = 0;
-	protected int _delayOffset = 0;
-
+	public final PlayerCollectionList watchers = new PlayerCollectionList();
+	protected final PriorityBlockingQueue<ItemRoutingInformation> _inTransitToMe = new PriorityBlockingQueue<>(10,
+			new ItemRoutingInformation.DelayComparator());
+	protected final LinkedList<Triplet<IRoutedItem, ForgeDirection, ItemSendMode>> _sendQueue = new LinkedList<>();
+	protected final Map<ItemIdentifier, Queue<Pair<Integer, ItemRoutingInformation>>> queuedDataForUnroutedItems = Collections.synchronizedMap(new TreeMap<>());
 	public boolean _textureBufferPowered;
-
-	protected boolean _initialInit = true;
-
-	private boolean enabled = true;
-	private boolean preventRemove = false;
-	private boolean destroyByPlayer = false;
-	private PowerSupplierHandler powerHandler = new PowerSupplierHandler(this);
-
 	public long delayTo = 0;
 	public int repeatFor = 0;
-
-	protected RouteLayer _routeLayer;
-	protected TransportLayer _transportLayer;
-	protected final PriorityBlockingQueue<ItemRoutingInformation> _inTransitToMe = new PriorityBlockingQueue<>(10,
-			new ItemRoutingInformation.DelayComparator());
-
-	protected UpgradeManager upgradeManager = new UpgradeManager(this);
-	protected LogisticsItemOrderManager _orderItemManager = null;
-
-	@Getter
-	private List<IOrderInfoProvider> clientSideOrderManager = new ArrayList<>();
-
 	public int stat_session_sent;
 	public int stat_session_recieved;
 	public int stat_session_relayed;
-
 	public long stat_lifetime_sent;
 	public long stat_lifetime_recieved;
 	public long stat_lifetime_relayed;
-
 	public int server_routing_table_size = 0;
-
-	protected final LinkedList<Triplet<IRoutedItem, ForgeDirection, ItemSendMode>> _sendQueue = new LinkedList<>();
-
-	protected final Map<ItemIdentifier, Queue<Pair<Integer, ItemRoutingInformation>>> queuedDataForUnroutedItems = Collections.synchronizedMap(new TreeMap<>());
-
-	public final PlayerCollectionList watchers = new PlayerCollectionList();
-
+	public boolean globalIgnoreConnectionDisconnection = false;
+	protected boolean stillNeedReplace = true;
+	protected IRouter router;
+	protected String routerId;
+	protected Object routerIdLock = new Object();
+	protected int _delayOffset = 0;
+	protected boolean _initialInit = true;
+	protected RouteLayer _routeLayer;
+	protected TransportLayer _transportLayer;
+	protected UpgradeManager upgradeManager = new UpgradeManager(this);
+	protected LogisticsItemOrderManager _orderItemManager = null;
 	protected List<IInventory> _cachedAdjacentInventories;
-
 	protected ForgeDirection pointedDirection = ForgeDirection.UNKNOWN;
 	//public BaseRoutingLogic logic;
 	// from BaseRoutingLogic
 	protected int throttleTime = 20;
+	protected IPipeSign[] signItem = new IPipeSign[6];
+	private boolean recheckConnections = false;
+	private boolean enabled = true;
+	private boolean preventRemove = false;
+	private boolean destroyByPlayer = false;
+	private PowerSupplierHandler powerHandler = new PowerSupplierHandler(this);
+	@Getter
+	private List<IOrderInfoProvider> clientSideOrderManager = new ArrayList<>();
 	private int throttleTimeLeft = 20 + new Random().nextInt(Configs.LOGISTICS_DETECTION_FREQUENCY);
-
 	private int[] queuedParticles = new int[Particles.values().length];
 	private boolean hasQueuedParticles = false;
-
-	protected IPipeSign[] signItem = new IPipeSign[6];
 	private boolean isOpaqueClientSide = false;
 
 	private CacheHolder cacheHolder;
@@ -1030,8 +1007,6 @@ public abstract class CoreRoutedPipe extends CoreUnroutedPipe
 		return canPipeConnect(tile, dir, false);
 	}
 
-	public boolean globalIgnoreConnectionDisconnection = false;
-
 	@Override
 	public final boolean canPipeConnect(TileEntity tile, ForgeDirection dir, boolean ignoreSystemDisconnection) {
 		ForgeDirection side = OrientationsUtil.getOrientationOfTilewithTile(container, tile);
@@ -1072,8 +1047,6 @@ public abstract class CoreRoutedPipe extends CoreUnroutedPipe
 		getOriginalUpgradeManager().insetSecurityID(id);
 	}
 
-	/* Power System */
-
 	public List<Pair<ILogisticsPowerProvider, List<IFilter>>> getRoutedPowerProviders() {
 		if (MainProxy.isClient(getWorld())) {
 			return null;
@@ -1084,6 +1057,8 @@ public abstract class CoreRoutedPipe extends CoreUnroutedPipe
 		return getRouter().getPowerProvider();
 	}
 
+	/* Power System */
+
 	@Override
 	public boolean useEnergy(int amount) {
 		return useEnergy(amount, null, true);
@@ -1378,21 +1353,21 @@ public abstract class CoreRoutedPipe extends CoreUnroutedPipe
 		return router.getId().toString();
 	}
 
-	@CCCommand(description = "Sets the TurtleConnect flag for this Turtle on this LogisticsPipe")
+	@CCCommand(description = "Returns the TurtleConnect flag for this Turtle on this LogisticsPipe")
 	@CCDirectCall
-	public void setTurtleConnect(Boolean flag) {
+	public boolean getTurtleConnect() {
 		if (container instanceof LogisticsTileGenericPipe) {
-			container.setTurtleConnect(flag);
+			return container.getTurtleConnect();
 		}
+		return false;
 	}
 
-	@CCCommand(description = "Returns the TurtleConnect flag for this Turtle on this LogisticsPipe")
+	@CCCommand(description = "Sets the TurtleConnect flag for this Turtle on this LogisticsPipe")
 	@CCDirectCall
-	public boolean getTurtleConnect() {
+	public void setTurtleConnect(Boolean flag) {
 		if (container instanceof LogisticsTileGenericPipe) {
-			return container.getTurtleConnect();
+			container.setTurtleConnect(flag);
 		}
-		return false;
 	}
 
 	@CCCommand(description = "Returns true if the computer is allowed to interact with the connected pipe.", needPermission = false)
@@ -1743,12 +1718,12 @@ public abstract class CoreRoutedPipe extends CoreUnroutedPipe
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeBoolean(isOpaque());
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		isOpaqueClientSide = input.readBoolean();
 	}
 
@@ -1841,4 +1816,9 @@ public abstract class CoreRoutedPipe extends CoreUnroutedPipe
 	public IHighlightPlacementRenderer getHighlightRenderer() {
 		return LogisticsRenderPipe.secondRenderer;
 	}
+
+	public enum ItemSendMode {
+		Normal,
+		Fast
+	}
 }

programming_language: Java
filename: LogisticsTileGenericPipe.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.pipes.basic;
 
-import java.io.IOException;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -94,33 +93,38 @@ public class LogisticsTileGenericPipe extends TileEntity
 		implements IOCTile, ILPPipeTile, IPipeInformationProvider, IItemDuct, ManagedPeripheral, Environment, SidedEnvironment, IFluidHandler, IPipeTile,
 		ILogicControllerTile, IPipeConnection {
 
+	public final PipeRenderState renderState;
+	public final CoreState coreState = new CoreState();
+	public final IBCTilePart tilePart;
+	public final IBCPluggableState bcPlugableState;
+	public final ITDPart tdPart;
 	public Object OPENPERIPHERAL_IGNORE; //Tell OpenPeripheral to ignore this class
-
 	public Set<DoubleCoordinates> subMultiBlock = new HashSet<>();
-
 	public boolean[] turtleConnect = new boolean[7];
-
-	private LogisticsTileRenderController renderController;
-
 	@ModDependentField(modId = LPConstants.computerCraftModID)
 	public HashMap<IComputerAccess, ForgeDirection> connections;
-
 	@ModDependentField(modId = LPConstants.computerCraftModID)
 	public IComputerAccess currentPC;
-
 	@ModDependentField(modId = LPConstants.openComputersModID)
 	public Node node;
+	public LogicController logicController = new LogicController();
+	public boolean[] pipeConnectionsBuffer = new boolean[6];
+	public boolean[] pipeBCConnectionsBuffer = new boolean[6];
+	public boolean[] pipeTDConnectionsBuffer = new boolean[6];
+	public CoreUnroutedPipe pipe;
+	private LogisticsTileRenderController renderController;
 	private boolean addedToNetwork = false;
-
 	private boolean sendInitPacket = true;
-
-	public LogicController logicController = new LogicController();
-
-	public final PipeRenderState renderState;
-	public final CoreState coreState = new CoreState();
-	public final IBCTilePart tilePart;
-	public final IBCPluggableState bcPlugableState;
-	public final ITDPart tdPart;
+	@Getter
+	private boolean initialized = false;
+	private boolean deletePipe = false;
+	private TileBuffer[] tileBuffer;
+	private boolean sendClientUpdate = false;
+	private boolean blockNeighborChange = false;
+	private boolean refreshRenderState = false;
+	private boolean pipeBound = false;
+	@SideOnly(Side.CLIENT)
+	private AxisAlignedBB renderBox;
 
 	public LogisticsTileGenericPipe() {
 		if (SimpleServiceLocator.ccProxy.isCC()) {
@@ -314,6 +318,8 @@ public class LogisticsTileGenericPipe extends TileEntity
 		}
 	}
 
+	/* IPipeInformationProvider */
+
 	@Override
 	public void writeToNBT(NBTTagCompound nbt) {
 		super.writeToNBT(nbt);
@@ -439,14 +445,14 @@ public class LogisticsTileGenericPipe extends TileEntity
 		SimpleServiceLocator.ccProxy.handleMesssage(computerId, message, this, sourceId);
 	}
 
-	public void setTurtleConnect(boolean flag) {
-		SimpleServiceLocator.ccProxy.setTurtleConnect(flag, this);
-	}
-
 	public boolean getTurtleConnect() {
 		return SimpleServiceLocator.ccProxy.getTurtleConnect(this);
 	}
 
+	public void setTurtleConnect(boolean flag) {
+		SimpleServiceLocator.ccProxy.setTurtleConnect(flag, this);
+	}
+
 	public int getLastCCID() {
 		return SimpleServiceLocator.ccProxy.getLastCCID(this);
 	}
@@ -478,8 +484,6 @@ public class LogisticsTileGenericPipe extends TileEntity
 		return renderController;
 	}
 
-	/* IPipeInformationProvider */
-
 	@Override
 	public boolean isCorrect(ConnectionPipeType type) {
 		return true;
@@ -632,6 +636,8 @@ public class LogisticsTileGenericPipe extends TileEntity
 	@Override
 	@ModDependentMethod(modId = LPConstants.openComputersModID)
 	public void onConnect(Node node1) {}
+	//public int redstoneInput = 0;
+	//public int[] redstoneInputSide = new int[ForgeDirection.VALID_DIRECTIONS.length];
 
 	@Override
 	@ModDependentMethod(modId = LPConstants.openComputersModID)
@@ -677,41 +683,6 @@ public class LogisticsTileGenericPipe extends TileEntity
 		return node();
 	}
 
-	@Getter
-	private boolean initialized = false;
-
-	public boolean[] pipeConnectionsBuffer = new boolean[6];
-	public boolean[] pipeBCConnectionsBuffer = new boolean[6];
-	public boolean[] pipeTDConnectionsBuffer = new boolean[6];
-
-	public CoreUnroutedPipe pipe;
-	//public int redstoneInput = 0;
-	//public int[] redstoneInputSide = new int[ForgeDirection.VALID_DIRECTIONS.length];
-
-	private boolean deletePipe = false;
-	private TileBuffer[] tileBuffer;
-	private boolean sendClientUpdate = false;
-	private boolean blockNeighborChange = false;
-	private boolean refreshRenderState = false;
-	private boolean pipeBound = false;
-
-	public class CoreState implements IClientState {
-
-		public int pipeId = -1;
-
-		@Override
-		public void writeData(LPDataOutput output) throws IOException {
-			output.writeInt(pipeId);
-
-		}
-
-		@Override
-		public void readData(LPDataInput input) throws IOException {
-			pipeId = input.readInt();
-
-		}
-	}
-
 	public void initialize(CoreUnroutedPipe pipe) {
 		blockType = getBlockType();
 
@@ -1091,9 +1062,6 @@ public class LogisticsTileGenericPipe extends TileEntity
 		tdPart.setWorldObj_LP(world);
 	}
 
-	@SideOnly(Side.CLIENT)
-	private AxisAlignedBB renderBox;
-
 	@SideOnly(Side.CLIENT)
 	@Override
 	public AxisAlignedBB getRenderBoundingBox() {
@@ -1155,4 +1123,21 @@ public class LogisticsTileGenericPipe extends TileEntity
 	public Stream<TileEntity> getPartsOfPipe() {
 		return this.subMultiBlock.stream().map(pos -> pos.getTileEntity(worldObj));
 	}
+
+	public class CoreState implements IClientState {
+
+		public int pipeId = -1;
+
+		@Override
+		public void writeData(LPDataOutput output) {
+			output.writeInt(pipeId);
+
+		}
+
+		@Override
+		public void readData(LPDataInput input) {
+			pipeId = input.readInt();
+
+		}
+	}
 }

programming_language: Java
filename: HSTubeCurve.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.pipes.tubes;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -34,65 +33,6 @@ import network.rs485.logisticspipes.world.DoubleCoordinatesType;
 
 public class HSTubeCurve extends CoreMultiBlockPipe {
 
-	@AllArgsConstructor
-	public enum CurveOrientation implements ITubeOrientation {
-		//@formatter:off
-		// Name: Placement from  _ TurnDirection
-		NORTH_NORTH_EAST(TurnDirection.NORTH_EAST, new DoubleCoordinates(2, 0, 2), ForgeDirection.NORTH, ForgeDirection.EAST),
-		NORTH_WEST_NORTH(TurnDirection.WEST_NORTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH, ForgeDirection.WEST),
-		WEST_WEST_NORTH(TurnDirection.WEST_NORTH, new DoubleCoordinates(2, 0, -2), ForgeDirection.WEST, ForgeDirection.NORTH),
-		WEST_SOUTH_WEST(TurnDirection.SOUTH_WEST, new DoubleCoordinates(0, 0, 0), ForgeDirection.WEST, ForgeDirection.SOUTH),
-		SOUTH_SOUTH_WEST(TurnDirection.SOUTH_WEST, new DoubleCoordinates(-2, 0, -2), ForgeDirection.SOUTH, ForgeDirection.WEST),
-		SOUTH_EAST_SOUTH(TurnDirection.EAST_SOUTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.SOUTH, ForgeDirection.EAST),
-		EAST_EAST_SOUTH(TurnDirection.EAST_SOUTH, new DoubleCoordinates(-2, 0, 2), ForgeDirection.EAST, ForgeDirection.SOUTH),
-		EAST_NORTH_EAST(TurnDirection.NORTH_EAST, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST, ForgeDirection.NORTH);
-		//@formatter:on
-		@Getter
-		TurnDirection renderOrientation;
-		@Getter
-		DoubleCoordinates offset;
-		@Getter
-		ForgeDirection from;
-		@Getter
-		ForgeDirection looking;
-
-		@Override
-		public void rotatePositions(IPositionRotateble set) {
-			renderOrientation.rotatePositions(set);
-		}
-
-		@Override
-		public void setOnPipe(CoreMultiBlockPipe pipe) {
-			((HSTubeCurve) pipe).orientation = this;
-		}
-	}
-
-	@AllArgsConstructor
-	public enum TurnDirection implements ITubeRenderOrientation {
-		//@formatter:off
-		NORTH_EAST(ForgeDirection.NORTH, ForgeDirection.EAST),
-		EAST_SOUTH(ForgeDirection.EAST, ForgeDirection.SOUTH),
-		SOUTH_WEST(ForgeDirection.SOUTH, ForgeDirection.WEST),
-		WEST_NORTH(ForgeDirection.WEST, ForgeDirection.NORTH);
-		//@formatter:on
-		@Getter
-		ForgeDirection dir1;
-		ForgeDirection dir2;
-
-		public void rotatePositions(IPositionRotateble set) {
-			if (this == WEST_NORTH) {
-				return;
-			} else if (this == NORTH_EAST) {
-				set.rotateRight();
-			} else if (this == EAST_SOUTH) {
-				set.rotateLeft();
-				set.rotateLeft();
-			} else if (this == SOUTH_WEST) {
-				set.rotateLeft();
-			}
-		}
-	}
-
 	@Getter
 	private CurveOrientation orientation;
 
@@ -101,7 +41,7 @@ public class HSTubeCurve extends CoreMultiBlockPipe {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		if (orientation == null) {
 			output.writeBoolean(false);
 		} else {
@@ -111,7 +51,7 @@ public class HSTubeCurve extends CoreMultiBlockPipe {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		if (input.readBoolean()) {
 			orientation = input.readEnum(CurveOrientation.class);
 		}
@@ -399,4 +339,63 @@ public class HSTubeCurve extends CoreMultiBlockPipe {
 	public boolean isHSTube() {
 		return true;
 	}
+
+	@AllArgsConstructor
+	public enum CurveOrientation implements ITubeOrientation {
+		//@formatter:off
+		// Name: Placement from  _ TurnDirection
+		NORTH_NORTH_EAST(TurnDirection.NORTH_EAST, new DoubleCoordinates(2, 0, 2), ForgeDirection.NORTH, ForgeDirection.EAST),
+		NORTH_WEST_NORTH(TurnDirection.WEST_NORTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH, ForgeDirection.WEST),
+		WEST_WEST_NORTH(TurnDirection.WEST_NORTH, new DoubleCoordinates(2, 0, -2), ForgeDirection.WEST, ForgeDirection.NORTH),
+		WEST_SOUTH_WEST(TurnDirection.SOUTH_WEST, new DoubleCoordinates(0, 0, 0), ForgeDirection.WEST, ForgeDirection.SOUTH),
+		SOUTH_SOUTH_WEST(TurnDirection.SOUTH_WEST, new DoubleCoordinates(-2, 0, -2), ForgeDirection.SOUTH, ForgeDirection.WEST),
+		SOUTH_EAST_SOUTH(TurnDirection.EAST_SOUTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.SOUTH, ForgeDirection.EAST),
+		EAST_EAST_SOUTH(TurnDirection.EAST_SOUTH, new DoubleCoordinates(-2, 0, 2), ForgeDirection.EAST, ForgeDirection.SOUTH),
+		EAST_NORTH_EAST(TurnDirection.NORTH_EAST, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST, ForgeDirection.NORTH);
+		//@formatter:on
+		@Getter
+		TurnDirection renderOrientation;
+		@Getter
+		DoubleCoordinates offset;
+		@Getter
+		ForgeDirection from;
+		@Getter
+		ForgeDirection looking;
+
+		@Override
+		public void rotatePositions(IPositionRotateble set) {
+			renderOrientation.rotatePositions(set);
+		}
+
+		@Override
+		public void setOnPipe(CoreMultiBlockPipe pipe) {
+			((HSTubeCurve) pipe).orientation = this;
+		}
+	}
+
+	@AllArgsConstructor
+	public enum TurnDirection implements ITubeRenderOrientation {
+		//@formatter:off
+		NORTH_EAST(ForgeDirection.NORTH, ForgeDirection.EAST),
+		EAST_SOUTH(ForgeDirection.EAST, ForgeDirection.SOUTH),
+		SOUTH_WEST(ForgeDirection.SOUTH, ForgeDirection.WEST),
+		WEST_NORTH(ForgeDirection.WEST, ForgeDirection.NORTH);
+		//@formatter:on
+		@Getter
+		ForgeDirection dir1;
+		ForgeDirection dir2;
+
+		public void rotatePositions(IPositionRotateble set) {
+			if (this == WEST_NORTH) {
+				return;
+			} else if (this == NORTH_EAST) {
+				set.rotateRight();
+			} else if (this == EAST_SOUTH) {
+				set.rotateLeft();
+				set.rotateLeft();
+			} else if (this == SOUTH_WEST) {
+				set.rotateLeft();
+			}
+		}
+	}
 }

programming_language: Java
filename: HSTubeGain.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.pipes.tubes;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -32,64 +31,8 @@ import network.rs485.logisticspipes.world.DoubleCoordinatesType;
 
 public class HSTubeGain extends CoreMultiBlockPipe {
 
-	public enum TubeGainOrientation implements ITubeOrientation {
-		NORTH(TubeGainRenderOrientation.NORTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH),
-		SOUTH(TubeGainRenderOrientation.SOUTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.SOUTH),
-		EAST(TubeGainRenderOrientation.EAST, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST),
-		WEST(TubeGainRenderOrientation.WEST, new DoubleCoordinates(0, 0, 0), ForgeDirection.WEST);
-
-		@Getter
-		TubeGainRenderOrientation renderOrientation;
-		@Getter
-		DoubleCoordinates offset;
-		@Getter
-		ForgeDirection dir;
-
-		TubeGainOrientation(TubeGainRenderOrientation render, DoubleCoordinates off, ForgeDirection dir) {
-			renderOrientation = render;
-			offset = off;
-			this.dir = dir;
-		}
-
-		@Override
-		public void rotatePositions(IPositionRotateble set) {
-			renderOrientation.rotateOrientation(set);
-		}
-
-		@Override
-		public void setOnPipe(CoreMultiBlockPipe pipe) {
-			((HSTubeGain) pipe).orientation = this;
-		}
-	}
-
-	public enum TubeGainRenderOrientation implements ITubeRenderOrientation {
-		NORTH(ForgeDirection.NORTH),
-		SOUTH(ForgeDirection.SOUTH),
-		WEST(ForgeDirection.WEST),
-		EAST(ForgeDirection.EAST);
-
-		@Getter
-		private ForgeDirection dir;
-
-		TubeGainRenderOrientation(ForgeDirection dir) {
-			this.dir = dir;
-		}
-
-		public void rotateOrientation(IPositionRotateble set) {
-			if (this == EAST) {
-				set.rotateRight();
-			} else if (this == WEST) {
-				set.rotateLeft();
-			} else if (this == SOUTH) {
-				set.rotateLeft();
-				set.rotateLeft();
-			}
-		}
-	}
-
 	@Getter
 	private TubeGainOrientation orientation;
-
 	private List<AxisAlignedBB> boxes = null;
 
 	public HSTubeGain(Item item) {
@@ -97,7 +40,7 @@ public class HSTubeGain extends CoreMultiBlockPipe {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		if (orientation == null) {
 			output.writeBoolean(false);
 		} else {
@@ -107,7 +50,7 @@ public class HSTubeGain extends CoreMultiBlockPipe {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		if (input.readBoolean()) {
 			orientation = input.readEnum(TubeGainOrientation.class);
 		}
@@ -414,4 +357,59 @@ public class HSTubeGain extends CoreMultiBlockPipe {
 	public boolean isHSTube() {
 		return true;
 	}
+
+	public enum TubeGainOrientation implements ITubeOrientation {
+		NORTH(TubeGainRenderOrientation.NORTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH),
+		SOUTH(TubeGainRenderOrientation.SOUTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.SOUTH),
+		EAST(TubeGainRenderOrientation.EAST, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST),
+		WEST(TubeGainRenderOrientation.WEST, new DoubleCoordinates(0, 0, 0), ForgeDirection.WEST);
+
+		@Getter
+		TubeGainRenderOrientation renderOrientation;
+		@Getter
+		DoubleCoordinates offset;
+		@Getter
+		ForgeDirection dir;
+
+		TubeGainOrientation(TubeGainRenderOrientation render, DoubleCoordinates off, ForgeDirection dir) {
+			renderOrientation = render;
+			offset = off;
+			this.dir = dir;
+		}
+
+		@Override
+		public void rotatePositions(IPositionRotateble set) {
+			renderOrientation.rotateOrientation(set);
+		}
+
+		@Override
+		public void setOnPipe(CoreMultiBlockPipe pipe) {
+			((HSTubeGain) pipe).orientation = this;
+		}
+	}
+
+	public enum TubeGainRenderOrientation implements ITubeRenderOrientation {
+		NORTH(ForgeDirection.NORTH),
+		SOUTH(ForgeDirection.SOUTH),
+		WEST(ForgeDirection.WEST),
+		EAST(ForgeDirection.EAST);
+
+		@Getter
+		private ForgeDirection dir;
+
+		TubeGainRenderOrientation(ForgeDirection dir) {
+			this.dir = dir;
+		}
+
+		public void rotateOrientation(IPositionRotateble set) {
+			if (this == EAST) {
+				set.rotateRight();
+			} else if (this == WEST) {
+				set.rotateLeft();
+			} else if (this == SOUTH) {
+				set.rotateLeft();
+				set.rotateLeft();
+			}
+		}
+	}
 }

programming_language: Java
filename: HSTubeLine.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.pipes.tubes;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -28,54 +27,6 @@ import network.rs485.logisticspipes.world.DoubleCoordinatesType;
 
 public class HSTubeLine extends CoreMultiBlockPipe {
 
-	public enum TubeLineOrientation implements ITubeOrientation {
-		NORTH(TubeLineRenderOrientation.NORTH_SOUTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH),
-		SOUTH(TubeLineRenderOrientation.NORTH_SOUTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.SOUTH),
-		EAST(TubeLineRenderOrientation.EAST_WEST, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST),
-		WEST(TubeLineRenderOrientation.EAST_WEST, new DoubleCoordinates(0, 0, 0), ForgeDirection.WEST);
-
-		@Getter
-		TubeLineRenderOrientation renderOrientation;
-		@Getter
-		DoubleCoordinates offset;
-		@Getter
-		ForgeDirection dir;
-
-		TubeLineOrientation(TubeLineRenderOrientation render, DoubleCoordinates off, ForgeDirection dir) {
-			renderOrientation = render;
-			offset = off;
-			this.dir = dir;
-		}
-
-		@Override
-		public void rotatePositions(IPositionRotateble set) {
-			renderOrientation.rotateOrientation(set);
-		}
-
-		@Override
-		public void setOnPipe(CoreMultiBlockPipe pipe) {
-			((HSTubeLine) pipe).orientation = this;
-		}
-	}
-
-	public enum TubeLineRenderOrientation implements ITubeRenderOrientation {
-		NORTH_SOUTH(ForgeDirection.NORTH),
-		EAST_WEST(ForgeDirection.EAST);
-
-		@Getter
-		private ForgeDirection dir;
-
-		TubeLineRenderOrientation(ForgeDirection dir) {
-			this.dir = dir;
-		}
-
-		public void rotateOrientation(IPositionRotateble set) {
-			if (this == EAST_WEST) {
-				set.rotateLeft();
-			}
-		}
-	}
-
 	@Getter
 	private TubeLineOrientation orientation;
 
@@ -84,7 +35,7 @@ public class HSTubeLine extends CoreMultiBlockPipe {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		if (orientation == null) {
 			output.writeBoolean(false);
 		} else {
@@ -94,7 +45,7 @@ public class HSTubeLine extends CoreMultiBlockPipe {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		if (input.readBoolean()) {
 			orientation = input.readEnum(TubeLineOrientation.class);
 		}
@@ -217,4 +168,52 @@ public class HSTubeLine extends CoreMultiBlockPipe {
 	public boolean isHSTube() {
 		return true;
 	}
+
+	public enum TubeLineOrientation implements ITubeOrientation {
+		NORTH(TubeLineRenderOrientation.NORTH_SOUTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH),
+		SOUTH(TubeLineRenderOrientation.NORTH_SOUTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.SOUTH),
+		EAST(TubeLineRenderOrientation.EAST_WEST, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST),
+		WEST(TubeLineRenderOrientation.EAST_WEST, new DoubleCoordinates(0, 0, 0), ForgeDirection.WEST);
+
+		@Getter
+		TubeLineRenderOrientation renderOrientation;
+		@Getter
+		DoubleCoordinates offset;
+		@Getter
+		ForgeDirection dir;
+
+		TubeLineOrientation(TubeLineRenderOrientation render, DoubleCoordinates off, ForgeDirection dir) {
+			renderOrientation = render;
+			offset = off;
+			this.dir = dir;
+		}
+
+		@Override
+		public void rotatePositions(IPositionRotateble set) {
+			renderOrientation.rotateOrientation(set);
+		}
+
+		@Override
+		public void setOnPipe(CoreMultiBlockPipe pipe) {
+			((HSTubeLine) pipe).orientation = this;
+		}
+	}
+
+	public enum TubeLineRenderOrientation implements ITubeRenderOrientation {
+		NORTH_SOUTH(ForgeDirection.NORTH),
+		EAST_WEST(ForgeDirection.EAST);
+
+		@Getter
+		private ForgeDirection dir;
+
+		TubeLineRenderOrientation(ForgeDirection dir) {
+			this.dir = dir;
+		}
+
+		public void rotateOrientation(IPositionRotateble set) {
+			if (this == EAST_WEST) {
+				set.rotateLeft();
+			}
+		}
+	}
 }

programming_language: Java
filename: HSTubeSCurve.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.pipes.tubes;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -35,67 +34,8 @@ import network.rs485.logisticspipes.world.DoubleCoordinatesType;
 
 public class HSTubeSCurve extends CoreMultiBlockPipe {
 
-	@AllArgsConstructor
-	public enum CurveSOrientation implements ITubeOrientation {
-		//@formatter:off
-		// Name: Placement from  _ TurnDirection
-		NORTH_EAST(TurnSDirection.NORTH_INV, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH, ForgeDirection.EAST),
-		NORTH_WEST(TurnSDirection.NORTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH, ForgeDirection.WEST),
-		EAST_SOUTH(TurnSDirection.EAST_INV, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST, ForgeDirection.SOUTH),
-		EAST_NORTH(TurnSDirection.EAST, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST, ForgeDirection.NORTH),
-		SOUTH_WEST(TurnSDirection.NORTH_INV, new DoubleCoordinates(-1, 0, 3), ForgeDirection.SOUTH, ForgeDirection.WEST),
-		SOUTH_EAST(TurnSDirection.NORTH, new DoubleCoordinates(1, 0, 3), ForgeDirection.SOUTH, ForgeDirection.EAST),
-		WEST_NORTH(TurnSDirection.EAST_INV, new DoubleCoordinates(-3, 0, -1), ForgeDirection.WEST, ForgeDirection.NORTH),
-		WEST_SOUTH(TurnSDirection.EAST, new DoubleCoordinates(-3, 0, 1), ForgeDirection.WEST, ForgeDirection.SOUTH);
-		//@formatter:on
-
-		@Getter
-		TurnSDirection renderOrientation;
-		@Getter
-		DoubleCoordinates offset;
-		@Getter
-		ForgeDirection dir;
-		@Getter
-		ForgeDirection looking;
-
-		@Override
-		public void rotatePositions(IPositionRotateble set) {
-			renderOrientation.rotatePositions(set);
-		}
-
-		@Override
-		public void setOnPipe(CoreMultiBlockPipe pipe) {
-			((HSTubeSCurve) pipe).orientation = this;
-		}
-	}
-
-	@AllArgsConstructor
-	public enum TurnSDirection implements ITubeRenderOrientation {
-		//@formatter:off
-		NORTH(ForgeDirection.NORTH),
-		EAST(ForgeDirection.EAST),
-		NORTH_INV(ForgeDirection.SOUTH),
-		EAST_INV(ForgeDirection.WEST);
-		//@formatter:on
-
-		@Getter
-		private ForgeDirection dir1;
-
-		public void rotatePositions(IPositionRotateble set) {
-			if (this == NORTH) {
-				set.mirrorX();
-			} else if (this == EAST) {
-				set.mirrorX();
-				set.rotateRight();
-			} else if (this == EAST_INV) {
-				set.rotateRight();
-			}
-		}
-	}
-
 	@Getter
 	private CurveSOrientation orientation;
-
 	private List<AxisAlignedBB> boxes = null;
 
 	public HSTubeSCurve(Item item) {
@@ -103,7 +43,7 @@ public class HSTubeSCurve extends CoreMultiBlockPipe {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		if (orientation == null) {
 			output.writeBoolean(false);
 		} else {
@@ -113,7 +53,7 @@ public class HSTubeSCurve extends CoreMultiBlockPipe {
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		if (input.readBoolean()) {
 			orientation = input.readEnum(CurveSOrientation.class);
 		}
@@ -456,4 +396,62 @@ public class HSTubeSCurve extends CoreMultiBlockPipe {
 	public boolean isHSTube() {
 		return true;
 	}
+
+	@AllArgsConstructor
+	public enum CurveSOrientation implements ITubeOrientation {
+		//@formatter:off
+		// Name: Placement from  _ TurnDirection
+		NORTH_EAST(TurnSDirection.NORTH_INV, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH, ForgeDirection.EAST),
+		NORTH_WEST(TurnSDirection.NORTH, new DoubleCoordinates(0, 0, 0), ForgeDirection.NORTH, ForgeDirection.WEST),
+		EAST_SOUTH(TurnSDirection.EAST_INV, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST, ForgeDirection.SOUTH),
+		EAST_NORTH(TurnSDirection.EAST, new DoubleCoordinates(0, 0, 0), ForgeDirection.EAST, ForgeDirection.NORTH),
+		SOUTH_WEST(TurnSDirection.NORTH_INV, new DoubleCoordinates(-1, 0, 3), ForgeDirection.SOUTH, ForgeDirection.WEST),
+		SOUTH_EAST(TurnSDirection.NORTH, new DoubleCoordinates(1, 0, 3), ForgeDirection.SOUTH, ForgeDirection.EAST),
+		WEST_NORTH(TurnSDirection.EAST_INV, new DoubleCoordinates(-3, 0, -1), ForgeDirection.WEST, ForgeDirection.NORTH),
+		WEST_SOUTH(TurnSDirection.EAST, new DoubleCoordinates(-3, 0, 1), ForgeDirection.WEST, ForgeDirection.SOUTH);
+		//@formatter:on
+
+		@Getter
+		TurnSDirection renderOrientation;
+		@Getter
+		DoubleCoordinates offset;
+		@Getter
+		ForgeDirection dir;
+		@Getter
+		ForgeDirection looking;
+
+		@Override
+		public void rotatePositions(IPositionRotateble set) {
+			renderOrientation.rotatePositions(set);
+		}
+
+		@Override
+		public void setOnPipe(CoreMultiBlockPipe pipe) {
+			((HSTubeSCurve) pipe).orientation = this;
+		}
+	}
+
+	@AllArgsConstructor
+	public enum TurnSDirection implements ITubeRenderOrientation {
+		//@formatter:off
+		NORTH(ForgeDirection.NORTH),
+		EAST(ForgeDirection.EAST),
+		NORTH_INV(ForgeDirection.SOUTH),
+		EAST_INV(ForgeDirection.WEST);
+		//@formatter:on
+
+		@Getter
+		private ForgeDirection dir1;
+
+		public void rotatePositions(IPositionRotateble set) {
+			if (this == NORTH) {
+				set.mirrorX();
+			} else if (this == EAST) {
+				set.mirrorX();
+				set.rotateRight();
+			} else if (this == EAST_INV) {
+				set.rotateRight();
+			}
+		}
+	}
 }

programming_language: Java
filename: HSTubeSpeedup.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.pipes.tubes;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.entity.player.EntityPlayer;
@@ -36,45 +35,6 @@ import network.rs485.logisticspipes.world.DoubleCoordinatesType;
 
 public class HSTubeSpeedup extends CoreMultiBlockPipe {
 
-	@AllArgsConstructor
-	public enum SpeedupDirection implements ITubeRenderOrientation, ITubeOrientation {
-		//@formatter:off
-		NORTH(ForgeDirection.NORTH),
-		SOUTH(ForgeDirection.SOUTH),
-		EAST(ForgeDirection.EAST),
-		WEST(ForgeDirection.WEST);
-		//@formatter:on
-		@Getter
-		ForgeDirection dir1;
-
-		@Override
-		public void rotatePositions(IPositionRotateble set) {
-			if (this == SOUTH) {
-				set.rotateLeft();
-				set.rotateLeft();
-			} else if (this == EAST) {
-				set.rotateRight();
-			} else if (this == WEST) {
-				set.rotateLeft();
-			}
-		}
-
-		@Override
-		public ITubeRenderOrientation getRenderOrientation() {
-			return this;
-		}
-
-		@Override
-		public DoubleCoordinates getOffset() {
-			return new DoubleCoordinates(0, 0, 0);
-		}
-
-		@Override
-		public void setOnPipe(CoreMultiBlockPipe pipe) {
-			((HSTubeSpeedup) pipe).orientation = this;
-		}
-	}
-
 	@Getter
 	private SpeedupDirection orientation;
 
@@ -115,12 +75,12 @@ public class HSTubeSpeedup extends CoreMultiBlockPipe {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeEnum(orientation);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		orientation = input.readEnum(SpeedupDirection.class);
 	}
 
@@ -309,4 +269,43 @@ public class HSTubeSpeedup extends CoreMultiBlockPipe {
 	public boolean isHSTube() {
 		return true;
 	}
+
+	@AllArgsConstructor
+	public enum SpeedupDirection implements ITubeRenderOrientation, ITubeOrientation {
+		//@formatter:off
+		NORTH(ForgeDirection.NORTH),
+		SOUTH(ForgeDirection.SOUTH),
+		EAST(ForgeDirection.EAST),
+		WEST(ForgeDirection.WEST);
+		//@formatter:on
+		@Getter
+		ForgeDirection dir1;
+
+		@Override
+		public void rotatePositions(IPositionRotateble set) {
+			if (this == SOUTH) {
+				set.rotateLeft();
+				set.rotateLeft();
+			} else if (this == EAST) {
+				set.rotateRight();
+			} else if (this == WEST) {
+				set.rotateLeft();
+			}
+		}
+
+		@Override
+		public ITubeRenderOrientation getRenderOrientation() {
+			return this;
+		}
+
+		@Override
+		public DoubleCoordinates getOffset() {
+			return new DoubleCoordinates(0, 0, 0);
+		}
+
+		@Override
+		public void setOnPipe(CoreMultiBlockPipe pipe) {
+			((HSTubeSpeedup) pipe).orientation = this;
+		}
+	}
 }

programming_language: Java
filename: PipeItemsBasicTransport.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.pipes.unrouted;
 
-import java.io.IOException;
-
 import net.minecraft.item.Item;
 import net.minecraftforge.common.util.ForgeDirection;
 
@@ -20,10 +18,10 @@ public class PipeItemsBasicTransport extends CoreUnroutedPipe {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {}
+	public void writeData(LPDataOutput output) {}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {}
+	public void readData(LPDataInput input) {}
 
 	@Override
 	public int getIconIndex(ForgeDirection direction) {

programming_language: Java
filename: ProxyManager.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.proxy;
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -154,7 +153,7 @@ public class ProxyManager {
 						return new IBCRenderState() {
 							@Override public boolean needsRenderUpdate() {return false;}
 							@Override public boolean isDirty() {return false;}
-							@Override public void writeData_LP(LPDataOutput output) throws IOException {
+							@Override public void writeData_LP(LPDataOutput output)  {
 								output.writeBoolean(false);
 							}
 							@Override public void readData_LP(LPDataInput input) {}
@@ -174,8 +173,8 @@ public class ProxyManager {
 					}
 					@Override public IBCPluggableState getBCPlugableState() {
 						return new IBCPluggableState() {
-							@Override public void writeData(LPDataOutput output) throws IOException {}
-							@Override public void readData(LPDataInput input) throws IOException {}
+							@Override public void writeData(LPDataOutput output)  {}
+							@Override public void readData(LPDataInput input)  {}
 							@Override public boolean isDirty(boolean clean) {return false;}
 						};
 					}

programming_language: Java
filename: IBCPluggableState.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.proxy.buildcraft.subproxies;
 
-import java.io.IOException;
-
 import logisticspipes.interfaces.IClientState;
 import network.rs485.logisticspipes.util.LPDataInput;
 import network.rs485.logisticspipes.util.LPDataOutput;
@@ -9,10 +7,10 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 public interface IBCPluggableState extends IClientState {
 
 	@Override
-	void writeData(LPDataOutput output) throws IOException;
+	void writeData(LPDataOutput output);
 
 	@Override
-	void readData(LPDataInput input) throws IOException;
+	void readData(LPDataInput input);
 
 	boolean isDirty(boolean clean);
 }

programming_language: Java
filename: IBCRenderState.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.proxy.buildcraft.subproxies;
 
-import java.io.IOException;
-
 import network.rs485.logisticspipes.util.LPDataInput;
 import network.rs485.logisticspipes.util.LPDataOutput;
 
@@ -11,9 +9,9 @@ public interface IBCRenderState {
 
 	boolean isDirty();
 
-	void writeData_LP(LPDataOutput output) throws IOException;
+	void writeData_LP(LPDataOutput output);
 
-	void readData_LP(LPDataInput input) throws IOException;
+	void readData_LP(LPDataInput input);
 
 	void clean();
 

programming_language: Java
filename: LPBCPipeRenderState.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.proxy.buildcraft.subproxies;
 
-import java.io.IOException;
-
 import buildcraft.transport.PipeRenderState;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -12,7 +10,7 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 public class LPBCPipeRenderState extends PipeRenderState implements IBCRenderState {
 
 	@Override
-	public void writeData_LP(LPDataOutput output) throws IOException {
+	public void writeData_LP(LPDataOutput output) {
 		output.writeBoolean(true);
 		ByteBuf buf = Unpooled.buffer(128);
 		writeData(buf);
@@ -20,7 +18,7 @@ public class LPBCPipeRenderState extends PipeRenderState implements IBCRenderSta
 	}
 
 	@Override
-	public void readData_LP(LPDataInput input) throws IOException {
+	public void readData_LP(LPDataInput input) {
 		if (input.readBoolean()) {
 			ByteBuf buf = input.readByteBuf();
 			readData(buf);

programming_language: Java
filename: LPBCPluggableState.java
change_type: ModificationType.MODIFY
diff: @@ -1,12 +1,10 @@
 package logisticspipes.proxy.buildcraft.subproxies;
 
-import java.io.IOException;
 import java.util.Arrays;
 
 import buildcraft.transport.PipePluggableState;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-import lombok.SneakyThrows;
 
 import network.rs485.logisticspipes.util.LPDataIOWrapper;
 import network.rs485.logisticspipes.util.LPDataInput;
@@ -17,20 +15,19 @@ public class LPBCPluggableState extends PipePluggableState implements IBCPluggab
 	private byte[] oldBuffer;
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		ByteBuf buf = Unpooled.buffer(128);
 		this.writeData(buf);
 		output.writeByteBuf(buf);
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		ByteBuf buf = input.readByteBuf();
 		this.readData(buf);
 	}
 
 	@Override
-	@SneakyThrows({ IOException.class })
 	public boolean isDirty(boolean clean) {
 		byte[] newBytes = LPDataIOWrapper.collectData(this::writeData);
 		boolean result = !Arrays.equals(newBytes, oldBuffer);

programming_language: Java
filename: ConnectionMatrix.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.renderer.state;
 
-import java.io.IOException;
-
 import net.minecraftforge.common.util.ForgeDirection;
 
 import network.rs485.logisticspipes.util.LPDataInput;
@@ -74,13 +72,13 @@ public class ConnectionMatrix {
 		dirty = false;
 	}
 
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeByte(mask);
 		output.writeByte(isBCPipeMask);
 		output.writeByte(isTDPipeMask);
 	}
 
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		byte newMask = input.readByte();
 
 		if (newMask != mask) {

programming_language: Java
filename: PipeRenderState.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.renderer.state;
 
-import java.io.IOException;
 import java.util.List;
 
 import net.minecraft.util.IIcon;
@@ -58,14 +57,14 @@ public class PipeRenderState implements IClientState {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		pipeConnectionMatrix.writeData(output);
 		textureMatrix.writeData(output);
 		bcRenderState.writeData_LP(output); //Always needs to be last. Different length depending on proxy loading state.
 	}
 
 	@Override
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		pipeConnectionMatrix.readData(input);
 		textureMatrix.readData(input);
 		bcRenderState.readData_LP(input); //Always needs to be last. Different length depending on proxy loading state.

programming_language: Java
filename: TextureMatrix.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.renderer.state;
 
-import java.io.IOException;
-
 import net.minecraftforge.common.util.ForgeDirection;
 
 import lombok.Getter;
@@ -112,7 +110,7 @@ public class TextureMatrix {
 		dirty = false;
 	}
 
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		for (int iconIndexe : iconIndexes) {
 			output.writeByte(iconIndexe);
 		}
@@ -126,7 +124,7 @@ public class TextureMatrix {
 		output.writeForgeDirection(pointedOrientation);
 	}
 
-	public void readData(LPDataInput input) throws IOException {
+	public void readData(LPDataInput input) {
 		for (int i = 0; i < iconIndexes.length; i++) {
 			int icon = input.readByte();
 			if (iconIndexes[i] != icon) {

programming_language: Java
filename: DictResource.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.request.resources;
 
-import java.io.IOException;
 import java.util.BitSet;
 
 import net.minecraft.item.ItemStack;
@@ -17,9 +16,8 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 
 public class DictResource implements IResource {
 
-	public ItemIdentifierStack stack;
 	private final IRequestItems requester;
-
+	public ItemIdentifierStack stack;
 	//match all items with same oredict name
 	public boolean use_od = false;
 	//match all items with same id
@@ -28,13 +26,14 @@ public class DictResource implements IResource {
 	public boolean ignore_nbt = false;
 	//match all items with same oredict prefix
 	public boolean use_category = false;
+	private Object ccObject;
 
 	public DictResource(ItemIdentifierStack stack, IRequestItems requester) {
 		this.stack = stack;
 		this.requester = requester;
 	}
 
-	public DictResource(LPDataInput input) throws IOException {
+	public DictResource(LPDataInput input) {
 		stack = input.readItemIdentifierStack();
 		requester = null;
 		BitSet bits = input.readBitSet();
@@ -45,7 +44,7 @@ public class DictResource implements IResource {
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeItemIdentifierStack(stack);
 		BitSet bits = new BitSet();
 		bits.set(0, use_od);
@@ -161,16 +160,14 @@ public class DictResource implements IResource {
 		return clone;
 	}
 
-	private Object ccObject;
-
 	@Override
-	public void setCCType(Object type) {
-		ccObject = type;
+	public Object getCCType() {
+		return ccObject;
 	}
 
 	@Override
-	public Object getCCType() {
-		return ccObject;
+	public void setCCType(Object type) {
+		ccObject = type;
 	}
 
 	@Override

programming_language: Java
filename: FluidResource.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.request.resources;
 
-import java.io.IOException;
-
 import logisticspipes.interfaces.routing.IRequestFluid;
 import logisticspipes.routing.IRouter;
 import logisticspipes.utils.FluidIdentifier;
@@ -14,8 +12,9 @@ import network.rs485.logisticspipes.util.LPDataOutput;
 public class FluidResource implements IResource {
 
 	private final FluidIdentifier liquid;
-	private int amount;
 	private final IRequestFluid target;
+	private int amount;
+	private Object ccObject;
 
 	public FluidResource(FluidIdentifier liquid, int amount, IRequestFluid target) {
 		this.liquid = liquid;
@@ -23,14 +22,14 @@ public class FluidResource implements IResource {
 		this.target = target;
 	}
 
-	public FluidResource(LPDataInput input) throws IOException {
+	public FluidResource(LPDataInput input) {
 		liquid = FluidIdentifier.get(input.readItemIdentifier());
 		amount = input.readInt();
 		target = null;
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeItemIdentifier(liquid.getItemIdentifier());
 		output.writeInt(amount);
 	}
@@ -88,16 +87,14 @@ public class FluidResource implements IResource {
 		return new FluidResource(liquid, amount, null);
 	}
 
-	private Object ccObject;
-
 	@Override
-	public void setCCType(Object type) {
-		ccObject = type;
+	public Object getCCType() {
+		return ccObject;
 	}
 
 	@Override
-	public Object getCCType() {
-		return ccObject;
+	public void setCCType(Object type) {
+		ccObject = type;
 	}
 
 	@Override

programming_language: Java
filename: IResource.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.request.resources;
 
-import java.io.IOException;
-
 import cpw.mods.fml.relauncher.Side;
 import cpw.mods.fml.relauncher.SideOnly;
 
@@ -18,14 +16,6 @@ public interface IResource extends ILPCCTypeHolder {
 
 	ItemIdentifier getAsItem();
 
-	/**
-	 * Settings only apply for the normal Item Implementation.
-	 */
-	enum MatchSettings {
-		NORMAL,
-		WITHOUT_NBT
-	}
-
 	int getRequestedAmount();
 
 	IRouter getRouter();
@@ -34,7 +24,7 @@ public interface IResource extends ILPCCTypeHolder {
 
 	IResource clone(int multiplier);
 
-	void writeData(LPDataOutput output) throws IOException;
+	void writeData(LPDataOutput output);
 
 	boolean mergeForDisplay(IResource resource, int withAmount); //Amount overrides existing amount inside the resource
 
@@ -45,6 +35,14 @@ public interface IResource extends ILPCCTypeHolder {
 
 	ItemIdentifierStack getDisplayItem();
 
+	/**
+	 * Settings only apply for the normal Item Implementation.
+	 */
+	enum MatchSettings {
+		NORMAL,
+		WITHOUT_NBT
+	}
+
 	enum ColorCode {
 		NONE,
 		MISSING,

programming_language: Java
filename: ItemResource.java
change_type: ModificationType.MODIFY
diff: @@ -1,7 +1,5 @@
 package logisticspipes.request.resources;
 
-import java.io.IOException;
-
 import logisticspipes.interfaces.routing.IRequestItems;
 import logisticspipes.routing.IRouter;
 import logisticspipes.utils.item.ItemIdentifier;
@@ -14,19 +12,20 @@ public class ItemResource implements IResource {
 
 	private final ItemIdentifierStack stack;
 	private final IRequestItems requester;
+	private Object ccObject;
 
 	public ItemResource(ItemIdentifierStack stack, IRequestItems requester) {
 		this.stack = stack;
 		this.requester = requester;
 	}
 
-	public ItemResource(LPDataInput input) throws IOException {
+	public ItemResource(LPDataInput input) {
 		stack = input.readItemIdentifierStack();
 		requester = null;
 	}
 
 	@Override
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeItemIdentifierStack(stack);
 	}
 
@@ -93,16 +92,14 @@ public class ItemResource implements IResource {
 		return new ItemResource(stack, requester);
 	}
 
-	private Object ccObject;
-
 	@Override
-	public void setCCType(Object type) {
-		ccObject = type;
+	public Object getCCType() {
+		return ccObject;
 	}
 
 	@Override
-	public Object getCCType() {
-		return ccObject;
+	public void setCCType(Object type) {
+		ccObject = type;
 	}
 
 	@Override

programming_language: Java
filename: ResourceNetwork.java
change_type: ModificationType.MODIFY
diff: @@ -1,26 +1,24 @@
 package logisticspipes.request.resources;
 
-import java.io.IOException;
-
 import network.rs485.logisticspipes.util.LPDataInput;
 import network.rs485.logisticspipes.util.LPDataOutput;
 
 public enum ResourceNetwork {
 	DictResource(DictResource.class) {
 		@Override
-		protected IResource readData(LPDataInput input) throws IOException {
+		protected IResource readData(LPDataInput input) {
 			return new DictResource(input);
 		}
 	},
 	ItemResource(ItemResource.class) {
 		@Override
-		protected IResource readData(LPDataInput input) throws IOException {
+		protected IResource readData(LPDataInput input) {
 			return new ItemResource(input);
 		}
 	},
 	FluidResource(FluidResource.class) {
 		@Override
-		protected IResource readData(LPDataInput input) throws IOException {
+		protected IResource readData(LPDataInput input) {
 			return new FluidResource(input);
 		}
 	};
@@ -31,7 +29,7 @@ public enum ResourceNetwork {
 		this.clazz = clazz;
 	}
 
-	public static void writeResource(LPDataOutput output, IResource resource) throws IOException {
+	public static void writeResource(LPDataOutput output, IResource resource) {
 		if (resource == null) {
 			output.writeInt(-1);
 			return;
@@ -47,7 +45,7 @@ public enum ResourceNetwork {
 		throw new UnsupportedOperationException(resource.getClass().toString());
 	}
 
-	public static IResource readResource(LPDataInput input) throws IOException {
+	public static IResource readResource(LPDataInput input) {
 		int id = input.readInt();
 		if (id == -1) {
 			return null;
@@ -55,5 +53,5 @@ public enum ResourceNetwork {
 		return ResourceNetwork.values()[id].readData(input);
 	}
 
-	protected abstract IResource readData(LPDataInput input) throws IOException;
+	protected abstract IResource readData(LPDataInput input);
 }

programming_language: Java
filename: LaserData.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,5 @@
 package logisticspipes.routing;
 
-import java.io.IOException;
 import java.util.EnumSet;
 
 import net.minecraftforge.common.util.ForgeDirection;
@@ -34,7 +33,7 @@ public class LaserData {
 	private boolean startPipe = false;
 	private int length = 1;
 
-	public void writeData(LPDataOutput output) throws IOException {
+	public void writeData(LPDataOutput output) {
 		output.writeInt(posX);
 		output.writeInt(posY);
 		output.writeInt(posZ);
@@ -47,7 +46,7 @@ public class LaserData {
 		}
 	}
 
-	public LaserData readData(LPDataInput input) throws IOException {
+	public LaserData readData(LPDataInput input) {
 		posX = input.readInt();
 		posY = input.readInt();
 		posZ = input.readInt();

programming_language: Java
filename: ClientPacketBufferHandlerThread.java
change_type: ModificationType.MODIFY
diff: @@ -23,6 +23,65 @@ import network.rs485.logisticspipes.util.LPDataIOWrapper;
 
 public class ClientPacketBufferHandlerThread {
 
+	private final ClientCompressorThread clientCompressorThread = new ClientCompressorThread();
+	private final ClientDecompressorThread clientDecompressorThread = new ClientDecompressorThread();
+
+	public ClientPacketBufferHandlerThread() {}
+
+	private static byte[] compress(byte[] content) {
+		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+		try {
+			GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
+			gzipOutputStream.write(content);
+			gzipOutputStream.close();
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+		return byteArrayOutputStream.toByteArray();
+	}
+
+	private static byte[] decompress(byte[] contentBytes) {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		try {
+			GZIPInputStream gzip = new GZIPInputStream(new ByteArrayInputStream(contentBytes));
+			int buffer = 0;
+			while ((buffer = gzip.read()) != -1) {
+				out.write(buffer);
+			}
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+		return out.toByteArray();
+	}
+
+	public void clientTick(ClientTickEvent event) {
+		if (event.phase != Phase.END) {
+			return;
+		}
+		clientDecompressorThread.clientTickEnd();
+	}
+
+	public void setPause(boolean flag) {
+		clientCompressorThread.setPause(flag);
+	}
+
+	public void addPacketToCompressor(ModernPacket packet) {
+		clientCompressorThread.addPacketToCompressor(packet);
+	}
+
+	public void handlePacket(byte[] content) {
+		clientDecompressorThread.handlePacket(content);
+	}
+
+	public void clear() {
+		clientCompressorThread.clear();
+		clientDecompressorThread.clear();
+	}
+
+	public void queueFailedPacket(ModernPacket packet, EntityPlayer player) {
+		clientDecompressorThread.queueFailedPacket(packet, player);
+	}
+
 	private class ClientCompressorThread extends Thread {
 
 		//list of C->S packets to be serialized and compressed
@@ -45,46 +104,42 @@ public class ClientPacketBufferHandlerThread {
 		@Override
 		public void run() {
 			while (true) {
-				try {
-					synchronized (clientList) {
-						if (!pause && clientList.size() > 0) {
-							clientBuffer = LPDataIOWrapper.collectData(output -> {
-								output.writeBytes(clientBuffer);
-								clearLock.lock();
-								try {
-									for (ModernPacket packet : clientList) {
-										output.writeShort(packet.getId());
-										output.writeInt(packet.getDebugId());
-										packet.writeData(output);
-									}
-								} finally {
-									clientList.clear();
-									clearLock.unlock();
+				synchronized (clientList) {
+					if (!pause && clientList.size() > 0) {
+						clientBuffer = LPDataIOWrapper.collectData(output -> {
+							output.writeBytes(clientBuffer);
+							clearLock.lock();
+							try {
+								for (ModernPacket packet : clientList) {
+									output.writeShort(packet.getId());
+									output.writeInt(packet.getDebugId());
+									packet.writeData(output);
 								}
-							});
-						}
+							} finally {
+								clientList.clear();
+								clearLock.unlock();
+							}
+						});
 					}
-					//Send Content
-					if (clientBuffer.length > 0) {
-						while (clientBuffer.length > 1024 * 32) {
-							byte[] sendbuffer = Arrays.copyOf(clientBuffer, 1024 * 32);
-							clientBuffer = Arrays.copyOfRange(clientBuffer, 1024 * 32, clientBuffer.length);
-							byte[] compressed = ClientPacketBufferHandlerThread.compress(sendbuffer);
-							MainProxy.sendPacketToServer(PacketHandler.getPacket(BufferTransfer.class).setContent(compressed));
-						}
-						byte[] sendbuffer = clientBuffer;
-						clientBuffer = new byte[] {};
+				}
+				//Send Content
+				if (clientBuffer.length > 0) {
+					while (clientBuffer.length > 1024 * 32) {
+						byte[] sendbuffer = Arrays.copyOf(clientBuffer, 1024 * 32);
+						clientBuffer = Arrays.copyOfRange(clientBuffer, 1024 * 32, clientBuffer.length);
 						byte[] compressed = ClientPacketBufferHandlerThread.compress(sendbuffer);
 						MainProxy.sendPacketToServer(PacketHandler.getPacket(BufferTransfer.class).setContent(compressed));
 					}
-				} catch (IOException e) {
-					e.printStackTrace();
+					byte[] sendbuffer = clientBuffer;
+					clientBuffer = new byte[] {};
+					byte[] compressed = ClientPacketBufferHandlerThread.compress(sendbuffer);
+					MainProxy.sendPacketToServer(PacketHandler.getPacket(BufferTransfer.class).setContent(compressed));
 				}
 				synchronized (clientList) {
 					while (pause || clientList.size() == 0) {
 						try {
 							clientList.wait();
-						} catch (InterruptedException e) {}
+						} catch (InterruptedException ignored) { }
 					}
 				}
 				if (clear) {
@@ -126,19 +181,17 @@ public class ClientPacketBufferHandlerThread {
 		}
 	}
 
-	private final ClientCompressorThread clientCompressorThread = new ClientCompressorThread();
-
 	private class ClientDecompressorThread extends Thread {
 
 		//Received compressed S->C data
 		private final LinkedList<byte[]> queue = new LinkedList<>();
-		//decompressed serialized S->C data
-		private byte[] ByteBuffer = new byte[] {};
 		//FIFO for deserialized S->C packets, decompressor adds, tickEnd removes
 		private final LinkedList<Pair<EntityPlayer, byte[]>> PacketBuffer = new LinkedList<>();
 		private final ReentrantLock packetBufferLock = new ReentrantLock();
 		//List of packets that that should be reattempted to apply in the next tick
 		private final LinkedList<Pair<EntityPlayer, ModernPacket>> retryPackets = new LinkedList<>();
+		//decompressed serialized S->C data
+		private byte[] ByteBuffer = new byte[] {};
 		//Clear content on next tick
 		private boolean clear = false;
 
@@ -149,14 +202,9 @@ public class ClientPacketBufferHandlerThread {
 		}
 
 		private void handlePacketData(final Pair<EntityPlayer, byte[]> playerDataPair) {
-			try {
-				LPDataIOWrapper.provideData(playerDataPair.getValue2(), input -> {
-					PacketHandler.onPacketData(input, playerDataPair.getValue1());
-				});
-			} catch (IOException e) {
-				System.err.println("IO Error in handlePacketData for player " + playerDataPair.getValue1().getCommandSenderName());
-				e.printStackTrace();
-			}
+			LPDataIOWrapper.provideData(playerDataPair.getValue2(), input -> {
+				PacketHandler.onPacketData(input, playerDataPair.getValue1());
+			});
 		}
 
 		public void clientTickEnd() {
@@ -220,7 +268,7 @@ public class ClientPacketBufferHandlerThread {
 					while (queue.size() == 0) {
 						try {
 							queue.wait();
-						} catch (InterruptedException e) { }
+						} catch (InterruptedException ignored) { }
 					}
 				}
 				if (clear) {
@@ -247,62 +295,4 @@ public class ClientPacketBufferHandlerThread {
 			retryPackets.add(new Pair<>(player, packet));
 		}
 	}
-
-	private final ClientDecompressorThread clientDecompressorThread = new ClientDecompressorThread();
-
-	public ClientPacketBufferHandlerThread() {}
-
-	public void clientTick(ClientTickEvent event) {
-		if (event.phase != Phase.END) {
-			return;
-		}
-		clientDecompressorThread.clientTickEnd();
-	}
-
-	public void setPause(boolean flag) {
-		clientCompressorThread.setPause(flag);
-	}
-
-	public void addPacketToCompressor(ModernPacket packet) {
-		clientCompressorThread.addPacketToCompressor(packet);
-	}
-
-	public void handlePacket(byte[] content) {
-		clientDecompressorThread.handlePacket(content);
-	}
-
-	private static byte[] compress(byte[] content) {
-		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-		try {
-			GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
-			gzipOutputStream.write(content);
-			gzipOutputStream.close();
-		} catch (IOException e) {
-			throw new RuntimeException(e);
-		}
-		return byteArrayOutputStream.toByteArray();
-	}
-
-	private static byte[] decompress(byte[] contentBytes) {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		try {
-			GZIPInputStream gzip = new GZIPInputStream(new ByteArrayInputStream(contentBytes));
-			int buffer = 0;
-			while ((buffer = gzip.read()) != -1) {
-				out.write(buffer);
-			}
-		} catch (IOException e) {
-			throw new RuntimeException(e);
-		}
-		return out.toByteArray();
-	}
-
-	public void clear() {
-		clientCompressorThread.clear();
-		clientDecompressorThread.clear();
-	}
-
-	public void queueFailedPacket(ModernPacket packet, EntityPlayer player) {
-		clientDecompressorThread.queueFailedPacket(packet, player);
-	}
 }

programming_language: Java
filename: ServerPacketBufferHandlerThread.java
change_type: ModificationType.MODIFY
diff: @@ -26,6 +26,67 @@ import network.rs485.logisticspipes.util.LPDataIOWrapper;
 
 public class ServerPacketBufferHandlerThread {
 
+	private final ServerCompressorThread serverCompressorThread = new ServerCompressorThread();
+	private final ServerDecompressorThread serverDecompressorThread = new ServerDecompressorThread();
+
+	public ServerPacketBufferHandlerThread() {}
+
+	private static byte[] compress(byte[] content) {
+		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+		try {
+			GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
+			gzipOutputStream.write(content);
+			gzipOutputStream.close();
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+		return byteArrayOutputStream.toByteArray();
+	}
+
+	private static byte[] decompress(byte[] contentBytes) {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		try {
+			GZIPInputStream gzip = new GZIPInputStream(new ByteArrayInputStream(contentBytes));
+			int buffer = 0;
+			while ((buffer = gzip.read()) != -1) {
+				out.write(buffer);
+			}
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+		return out.toByteArray();
+	}
+
+	public void serverTick(ServerTickEvent event) {
+		if (event.phase != Phase.END) {
+			return;
+		}
+		serverDecompressorThread.serverTickEnd();
+	}
+
+	public void setPause(boolean flag) {
+		serverCompressorThread.setPause(flag);
+	}
+
+	public void addPacketToCompressor(ModernPacket packet, EntityPlayer player) {
+		serverCompressorThread.addPacketToCompressor(packet, player);
+	}
+
+	public void handlePacket(byte[] content, EntityPlayer player) {
+		serverDecompressorThread.handlePacket(content, player);
+	}
+
+	public void clear(final EntityPlayer player) {
+		new Thread() {
+
+			@Override
+			public void run() {
+				serverCompressorThread.clear(player);
+				serverDecompressorThread.clear(player);
+			}
+		}.start();
+	}
+
 	private class ServerCompressorThread extends Thread {
 
 		//Map of Players to lists of S->C packets to be serialized and compressed
@@ -46,53 +107,49 @@ public class ServerPacketBufferHandlerThread {
 		@Override
 		public void run() {
 			while (true) {
-				try {
-					synchronized (serverList) {
-						if (!pause) {
-							for (Entry<EntityPlayer, LinkedList<ModernPacket>> playerPacketEntry : serverList.entrySet()) {
-								EntityPlayer player = playerPacketEntry.getKey();
-								serverBuffer.put(player, LPDataIOWrapper.collectData(output -> {
-									if (serverBuffer.containsKey(player)) {
-										output.writeBytes(serverBuffer.get(player));
-									}
+				synchronized (serverList) {
+					if (!pause) {
+						for (Entry<EntityPlayer, LinkedList<ModernPacket>> playerPacketEntry : serverList.entrySet()) {
+							EntityPlayer player = playerPacketEntry.getKey();
+							serverBuffer.put(player, LPDataIOWrapper.collectData(output -> {
+								if (serverBuffer.containsKey(player)) {
+									output.writeBytes(serverBuffer.get(player));
+								}
 
-									LinkedList<ModernPacket> packets = playerPacketEntry.getValue();
-									try {
-										for (ModernPacket packet : packets) {
-											output.writeShort(packet.getId());
-											output.writeInt(packet.getDebugId());
-											packet.writeData(output);
-										}
-									} finally {
-										packets.clear();
+								LinkedList<ModernPacket> packets = playerPacketEntry.getValue();
+								try {
+									for (ModernPacket packet : packets) {
+										output.writeShort(packet.getId());
+										output.writeInt(packet.getDebugId());
+										packet.writeData(output);
 									}
-								}));
-							}
-							serverList.clear();
+								} finally {
+									packets.clear();
+								}
+							}));
 						}
+						serverList.clear();
 					}
-					//Send Content
-					for (Entry<EntityPlayer, byte[]> player : serverBuffer.entrySet()) {
-						while (player.getValue().length > 32 * 1024) {
-							byte[] sendbuffer = Arrays.copyOf(player.getValue(), 1024 * 32);
-							byte[] newbuffer = Arrays.copyOfRange(player.getValue(), 1024 * 32, player.getValue().length);
-							player.setValue(newbuffer);
-							byte[] compressed = ServerPacketBufferHandlerThread.compress(sendbuffer);
-							MainProxy.sendPacketToPlayer(PacketHandler.getPacket(BufferTransfer.class).setContent(compressed), player.getKey());
-						}
-						byte[] sendbuffer = player.getValue();
+				}
+				//Send Content
+				for (Entry<EntityPlayer, byte[]> player : serverBuffer.entrySet()) {
+					while (player.getValue().length > 32 * 1024) {
+						byte[] sendbuffer = Arrays.copyOf(player.getValue(), 1024 * 32);
+						byte[] newbuffer = Arrays.copyOfRange(player.getValue(), 1024 * 32, player.getValue().length);
+						player.setValue(newbuffer);
 						byte[] compressed = ServerPacketBufferHandlerThread.compress(sendbuffer);
 						MainProxy.sendPacketToPlayer(PacketHandler.getPacket(BufferTransfer.class).setContent(compressed), player.getKey());
 					}
-				} catch (IOException e) {
-					e.printStackTrace();
+					byte[] sendbuffer = player.getValue();
+					byte[] compressed = ServerPacketBufferHandlerThread.compress(sendbuffer);
+					MainProxy.sendPacketToPlayer(PacketHandler.getPacket(BufferTransfer.class).setContent(compressed), player.getKey());
 				}
 				serverBuffer.clear();
 				synchronized (serverList) {
 					while (pause || serverList.size() == 0) {
 						try {
 							serverList.wait();
-						} catch (InterruptedException e) {}
+						} catch (InterruptedException ignored) { }
 					}
 				}
 				synchronized (playersToClear) {
@@ -140,8 +197,6 @@ public class ServerPacketBufferHandlerThread {
 		}
 	}
 
-	private final ServerCompressorThread serverCompressorThread = new ServerCompressorThread();
-
 	private class ServerDecompressorThread extends Thread {
 
 		//Map of Player to received compressed C->S data
@@ -161,14 +216,9 @@ public class ServerPacketBufferHandlerThread {
 		}
 
 		private void handlePacketData(final Pair<EntityPlayer, byte[]> playerDataPair) {
-			try {
-				LPDataIOWrapper.provideData(playerDataPair.getValue2(), input -> {
-					PacketHandler.onPacketData(input, playerDataPair.getValue1());
-				});
-			} catch (IOException e) {
-				System.err.println("IO Error in handlePacketData for player " + playerDataPair.getValue1().getCommandSenderName());
-				e.printStackTrace();
-			}
+			LPDataIOWrapper.provideData(playerDataPair.getValue2(), input -> {
+				PacketHandler.onPacketData(input, playerDataPair.getValue1());
+			});
 		}
 
 		public void serverTickEnd() {
@@ -262,7 +312,7 @@ public class ServerPacketBufferHandlerThread {
 					while (queue.size() == 0) {
 						try {
 							queue.wait();
-						} catch (InterruptedException e) {}
+						} catch (InterruptedException ignored) { }
 					}
 				}
 				synchronized (playersToClear) {
@@ -298,64 +348,4 @@ public class ServerPacketBufferHandlerThread {
 			}
 		}
 	}
-
-	private final ServerDecompressorThread serverDecompressorThread = new ServerDecompressorThread();
-
-	public ServerPacketBufferHandlerThread() {}
-
-	public void serverTick(ServerTickEvent event) {
-		if (event.phase != Phase.END) {
-			return;
-		}
-		serverDecompressorThread.serverTickEnd();
-	}
-
-	public void setPause(boolean flag) {
-		serverCompressorThread.setPause(flag);
-	}
-
-	public void addPacketToCompressor(ModernPacket packet, EntityPlayer player) {
-		serverCompressorThread.addPacketToCompressor(packet, player);
-	}
-
-	public void handlePacket(byte[] content, EntityPlayer player) {
-		serverDecompressorThread.handlePacket(content, player);
-	}
-
-	private static byte[] compress(byte[] content) {
-		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-		try {
-			GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
-			gzipOutputStream.write(content);
-			gzipOutputStream.close();
-		} catch (IOException e) {
-			throw new RuntimeException(e);
-		}
-		return byteArrayOutputStream.toByteArray();
-	}
-
-	private static byte[] decompress(byte[] contentBytes) {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		try {
-			GZIPInputStream gzip = new GZIPInputStream(new ByteArrayInputStream(contentBytes));
-			int buffer = 0;
-			while ((buffer = gzip.read()) != -1) {
-				out.write(buffer);
-			}
-		} catch (IOException e) {
-			throw new RuntimeException(e);
-		}
-		return out.toByteArray();
-	}
-
-	public void clear(final EntityPlayer player) {
-		new Thread() {
-
-			@Override
-			public void run() {
-				serverCompressorThread.clear(player);
-				serverDecompressorThread.clear(player);
-			}
-		}.start();
-	}
 }

programming_language: Java
filename: LPDataIOWrapper.java
change_type: ModificationType.MODIFY
diff: @@ -89,16 +89,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 		}
 	}
 
-	private void unsetBuffer() {
-		if (localBuffer.hasMemoryAddress()) {
-			if (--reference < 1) {
-				BUFFER_WRAPPER_MAP.remove(localBuffer.memoryAddress());
-			}
-		}
-		localBuffer = null;
-	}
-
-	public static void provideData(byte[] data, LPDataInputConsumer dataInputConsumer) throws IOException {
+	public static void provideData(byte[] data, LPDataInputConsumer dataInputConsumer) {
 		ByteBuf dataBuffer = wrappedBuffer(data);
 		LPDataIOWrapper lpData = getInstance(dataBuffer);
 
@@ -108,7 +99,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 		dataBuffer.release();
 	}
 
-	public static byte[] collectData(LPDataOutputConsumer dataOutputConsumer) throws IOException {
+	public static byte[] collectData(LPDataOutputConsumer dataOutputConsumer) {
 		ByteBuf dataBuffer = buffer();
 		LPDataIOWrapper lpData = getInstance(dataBuffer);
 
@@ -123,7 +114,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 		return data;
 	}
 
-	public static void provideData(ByteBuf dataBuffer, LPDataInputConsumer dataInputConsumer) throws IOException {
+	public static void provideData(ByteBuf dataBuffer, LPDataInputConsumer dataInputConsumer) {
 		LPDataIOWrapper lpData = getInstance(dataBuffer);
 
 		dataInputConsumer.accept(lpData);
@@ -131,7 +122,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 		lpData.unsetBuffer();
 	}
 
-	public static void writeData(ByteBuf dataBuffer, LPDataOutputConsumer dataOutputConsumer) throws IOException {
+	public static void writeData(ByteBuf dataBuffer, LPDataOutputConsumer dataOutputConsumer) {
 		LPDataIOWrapper lpData = getInstance(dataBuffer);
 
 		dataOutputConsumer.accept(lpData);
@@ -139,8 +130,17 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 		lpData.unsetBuffer();
 	}
 
+	private void unsetBuffer() {
+		if (localBuffer.hasMemoryAddress()) {
+			if (--reference < 1) {
+				BUFFER_WRAPPER_MAP.remove(localBuffer.memoryAddress());
+			}
+		}
+		localBuffer = null;
+	}
+
 	@Override
-	public void writeByteArray(byte[] arr) throws IOException {
+	public void writeByteArray(byte[] arr) {
 		if (arr == null) {
 			writeInt(-1);
 		} else {
@@ -150,7 +150,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public byte[] readByteArray() throws IOException {
+	public byte[] readByteArray() {
 		final int length = readInt();
 		if (length == -1) {
 			return null;
@@ -205,7 +205,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeUTF(String s) throws IOException {
+	public void writeUTF(String s) {
 		if (s == null) {
 			writeInt(-1);
 		} else {
@@ -223,7 +223,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeExitRoute(ExitRoute route) throws IOException {
+	public void writeExitRoute(ExitRoute route) {
 		writeIRouter(route.destination);
 		writeIRouter(route.root);
 		writeForgeDirection(route.exitOrientation);
@@ -257,7 +257,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public <T extends Enum<T>> void writeEnumSet(EnumSet<T> types, Class<T> clazz) throws IOException {
+	public <T extends Enum<T>> void writeEnumSet(EnumSet<T> types, Class<T> clazz) {
 		T[] parts = clazz.getEnumConstants();
 		final int length = parts.length / 8 + (parts.length % 8 == 0 ? 0 : 1);
 		byte[] set = new byte[length];
@@ -272,7 +272,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeBitSet(BitSet bits) throws IOException {
+	public void writeBitSet(BitSet bits) {
 		if (bits == null) {
 			throw new NullPointerException("BitSet may not be null");
 		}
@@ -280,17 +280,22 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeNBTTagCompound(NBTTagCompound tag) throws IOException {
+	public void writeNBTTagCompound(NBTTagCompound tag) {
 		if (tag == null) {
 			writeByte(0);
 		} else {
 			writeByte(1);
-			CompressedStreamTools.write(tag, new ByteBufOutputStream(localBuffer));
+			try {
+				CompressedStreamTools.write(tag, new ByteBufOutputStream(localBuffer));
+			} catch (IOException e) {
+
+				e.printStackTrace();
+			}
 		}
 	}
 
 	@Override
-	public void writeBooleanArray(boolean[] arr) throws IOException {
+	public void writeBooleanArray(boolean[] arr) {
 		if (arr == null) {
 			writeInt(-1);
 		} else if (arr.length == 0) {
@@ -319,7 +324,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeItemStack(ItemStack itemstack) throws IOException {
+	public void writeItemStack(ItemStack itemstack) {
 		if (itemstack == null) {
 			writeInt(0);
 		} else {
@@ -331,7 +336,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeItemIdentifier(ItemIdentifier item) throws IOException {
+	public void writeItemIdentifier(ItemIdentifier item) {
 		if (item == null) {
 			writeInt(0);
 		} else {
@@ -342,7 +347,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeItemIdentifierStack(ItemIdentifierStack stack) throws IOException {
+	public void writeItemIdentifierStack(ItemIdentifierStack stack) {
 		if (stack == null) {
 			writeInt(-1);
 		} else {
@@ -352,7 +357,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public <T> void writeCollection(Collection<T> collection, IWriteListObject<T> handler) throws IOException {
+	public <T> void writeCollection(Collection<T> collection, IWriteListObject<T> handler) {
 		if (collection == null) {
 			writeInt(-1);
 		} else {
@@ -364,7 +369,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeOrderInfo(IOrderInfoProvider order) throws IOException {
+	public void writeOrderInfo(IOrderInfoProvider order) {
 		writeItemIdentifierStack(order.getAsDisplayItem());
 		writeInt(order.getRouterId());
 		writeBoolean(order.isFinished());
@@ -382,7 +387,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeLinkedLogisticsOrderList(LinkedLogisticsOrderList orderList) throws IOException {
+	public void writeLinkedLogisticsOrderList(LinkedLogisticsOrderList orderList) {
 		writeCollection(orderList, LPDataOutput::writeOrderInfo);
 		writeCollection(orderList.getSubOrders(), LPDataOutput::writeLinkedLogisticsOrderList);
 	}
@@ -410,12 +415,12 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public void writeResource(IResource res) throws IOException {
+	public void writeResource(IResource res) {
 		ResourceNetwork.writeResource(this, res);
 	}
 
 	@Override
-	public void writeBytes(byte[] arr) throws IOException {
+	public void writeBytes(byte[] arr) {
 		localBuffer.writeBytes(arr);
 	}
 
@@ -455,7 +460,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public String readUTF() throws IOException {
+	public String readUTF() {
 		byte[] arr = readByteArray();
 		if (arr == null) {
 			return null;
@@ -475,7 +480,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public ExitRoute readExitRoute(World world) throws IOException {
+	public ExitRoute readExitRoute(World world) {
 		IRouter destination = readIRouter(world);
 		IRouter root = readIRouter(world);
 		ForgeDirection exitOri = readForgeDirection();
@@ -513,7 +518,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public <T extends Enum<T>> EnumSet<T> readEnumSet(Class<T> clazz) throws IOException {
+	public <T extends Enum<T>> EnumSet<T> readEnumSet(Class<T> clazz) {
 		EnumSet<T> types = EnumSet.noneOf(clazz);
 		byte[] arr = readByteArray();
 		if (arr != null) {
@@ -528,7 +533,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public BitSet readBitSet() throws IOException {
+	public BitSet readBitSet() {
 		byte[] arr = readByteArray();
 		if (arr == null) {
 			return new BitSet();
@@ -538,17 +543,22 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public NBTTagCompound readNBTTagCompound() throws IOException {
+	public NBTTagCompound readNBTTagCompound() {
 		boolean isEmpty = (readByte() == 0);
 		if (isEmpty) {
 			return null;
 		}
 
-		return CompressedStreamTools.func_152456_a(new ByteBufInputStream(localBuffer), NBTSizeTracker.field_152451_a);
+		try {
+			return CompressedStreamTools.func_152456_a(new ByteBufInputStream(localBuffer), NBTSizeTracker.field_152451_a);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
 	}
 
 	@Override
-	public boolean[] readBooleanArray() throws IOException {
+	public boolean[] readBooleanArray() {
 		final int bitCount = localBuffer.readInt();
 		if (bitCount == -1) {
 			return null;
@@ -581,14 +591,14 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public byte[] readBytes(int length) throws IOException {
+	public byte[] readBytes(int length) {
 		byte[] arr = new byte[length];
 		localBuffer.readBytes(arr, 0, length);
 		return arr;
 	}
 
 	@Override
-	public ItemStack readItemStack() throws IOException {
+	public ItemStack readItemStack() {
 		final int itemId = readInt();
 		if (itemId == 0) {
 			return null;
@@ -602,7 +612,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public ItemIdentifier readItemIdentifier() throws IOException {
+	public ItemIdentifier readItemIdentifier() {
 		final int itemId = readInt();
 		if (itemId == 0) {
 			return null;
@@ -614,7 +624,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public ItemIdentifierStack readItemIdentifierStack() throws IOException {
+	public ItemIdentifierStack readItemIdentifierStack() {
 		int stacksize = readInt();
 		if (stacksize == -1) {
 			return null;
@@ -625,7 +635,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public <T> ArrayList<T> readArrayList(IReadListObject<T> reader) throws IOException {
+	public <T> ArrayList<T> readArrayList(IReadListObject<T> reader) {
 		int size = readInt();
 		if (size == -1) {
 			return null;
@@ -639,7 +649,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public <T> LinkedList<T> readLinkedList(IReadListObject<T> reader) throws IOException {
+	public <T> LinkedList<T> readLinkedList(IReadListObject<T> reader) {
 		int size = readInt();
 		if (size == -1) {
 			return null;
@@ -653,7 +663,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public <T> Set<T> readSet(IReadListObject<T> handler) throws IOException {
+	public <T> Set<T> readSet(IReadListObject<T> handler) {
 		int size = readInt();
 		if (size == -1) {
 			return null;
@@ -667,7 +677,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public IOrderInfoProvider readOrderInfo() throws IOException {
+	public IOrderInfoProvider readOrderInfo() {
 		ItemIdentifierStack stack = readItemIdentifierStack();
 		int routerId = localBuffer.readInt();
 		boolean isFinished = localBuffer.readBoolean();
@@ -686,18 +696,18 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public LinkedLogisticsOrderList readLinkedLogisticsOrderList() throws IOException {
+	public LinkedLogisticsOrderList readLinkedLogisticsOrderList() {
 		LinkedLogisticsOrderList list = new LinkedLogisticsOrderList();
 
 		List<IOrderInfoProvider> orderInfoProviders = readArrayList(LPDataInput::readOrderInfo);
 		if (orderInfoProviders == null) {
-			throw new IOException("Expected order info provider list");
+			throw new NullPointerException("Expected order info provider list");
 		}
 		list.addAll(orderInfoProviders);
 
 		List<LinkedLogisticsOrderList> orderLists = readArrayList(LPDataInput::readLinkedLogisticsOrderList);
 		if (orderLists == null) {
-			throw new IOException("Expected logistics order list");
+			throw new NullPointerException("Expected logistics order list");
 		}
 		list.getSubOrders().addAll(orderLists);
 
@@ -705,7 +715,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public ByteBuf readByteBuf() throws IOException {
+	public ByteBuf readByteBuf() {
 		byte[] arr = readByteArray();
 		if (arr == null) {
 			throw new NullPointerException("Buffer may not be null, but read null");
@@ -727,7 +737,7 @@ public final class LPDataIOWrapper implements LPDataInput, LPDataOutput {
 	}
 
 	@Override
-	public IResource readResource() throws IOException {
+	public IResource readResource() {
 		return ResourceNetwork.readResource(this);
 	}
 }

programming_language: Java
filename: LPDataInput.java
change_type: ModificationType.MODIFY
diff: @@ -20,7 +20,6 @@
 
 package network.rs485.logisticspipes.util;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.EnumSet;
@@ -46,97 +45,97 @@ import network.rs485.logisticspipes.world.DoubleCoordinates;
 
 public interface LPDataInput {
 
-	byte[] readByteArray() throws IOException;
+	byte[] readByteArray();
 
 	/**
 	 * @see java.io.DataInput#readByte()
 	 */
-	byte readByte() throws IOException;
+	byte readByte();
 
 	/**
 	 * @see java.io.DataInput#readShort()
 	 */
-	short readShort() throws IOException;
+	short readShort();
 
 	/**
 	 * @see java.io.DataInput#readInt()
 	 */
-	int readInt() throws IOException;
+	int readInt();
 
 	/**
 	 * @see java.io.DataInput#readLong()
 	 */
-	long readLong() throws IOException;
+	long readLong();
 
 	/**
 	 * @see java.io.DataInput#readFloat()
 	 */
-	float readFloat() throws IOException;
+	float readFloat();
 
 	/**
 	 * @see java.io.DataInput#readDouble()
 	 */
-	double readDouble() throws IOException;
+	double readDouble();
 
 	/**
 	 * @see java.io.DataInput#readBoolean()
 	 */
-	boolean readBoolean() throws IOException;
+	boolean readBoolean();
 
 	/**
 	 * @see java.io.DataInput#readUTF()
 	 */
-	String readUTF() throws IOException;
+	String readUTF();
 
-	ForgeDirection readForgeDirection() throws IOException;
+	ForgeDirection readForgeDirection();
 
-	ExitRoute readExitRoute(World world) throws IOException;
+	ExitRoute readExitRoute(World world);
 
 	/**
 	 * @return ServerRouter or ClientRouter depending where we are
 	 */
-	IRouter readIRouter(World world) throws IOException;
+	IRouter readIRouter(World world);
 
-	DoubleCoordinates readLPPosition() throws IOException;
+	DoubleCoordinates readLPPosition();
 
-	<T extends Enum<T>> EnumSet<T> readEnumSet(Class<T> clazz) throws IOException;
+	<T extends Enum<T>> EnumSet<T> readEnumSet(Class<T> clazz);
 
-	BitSet readBitSet() throws IOException;
+	BitSet readBitSet();
 
-	NBTTagCompound readNBTTagCompound() throws IOException;
+	NBTTagCompound readNBTTagCompound();
 
-	boolean[] readBooleanArray() throws IOException;
+	boolean[] readBooleanArray();
 
-	int[] readIntArray() throws IOException;
+	int[] readIntArray();
 
-	byte[] readBytes(int length) throws IOException;
+	byte[] readBytes(int length);
 
-	ItemIdentifier readItemIdentifier() throws IOException;
+	ItemIdentifier readItemIdentifier();
 
-	ItemIdentifierStack readItemIdentifierStack() throws IOException;
+	ItemIdentifierStack readItemIdentifierStack();
 
-	ItemStack readItemStack() throws IOException;
+	ItemStack readItemStack();
 
-	<T> ArrayList<T> readArrayList(IReadListObject<T> reader) throws IOException;
+	<T> ArrayList<T> readArrayList(IReadListObject<T> reader);
 
-	<T> LinkedList<T> readLinkedList(IReadListObject<T> reader) throws IOException;
+	<T> LinkedList<T> readLinkedList(IReadListObject<T> reader);
 
-	<T> Set<T> readSet(IReadListObject<T> handler) throws IOException;
+	<T> Set<T> readSet(IReadListObject<T> handler);
 
-	IOrderInfoProvider readOrderInfo() throws IOException;
+	IOrderInfoProvider readOrderInfo();
 
-	<T extends Enum<T>> T readEnum(Class<T> clazz) throws IOException;
+	<T extends Enum<T>> T readEnum(Class<T> clazz);
 
-	LinkedLogisticsOrderList readLinkedLogisticsOrderList() throws IOException;
+	LinkedLogisticsOrderList readLinkedLogisticsOrderList();
 
-	ByteBuf readByteBuf() throws IOException;
+	ByteBuf readByteBuf();
 
-	long[] readLongArray() throws IOException;
+	long[] readLongArray();
 
-	IResource readResource() throws IOException;
+	IResource readResource();
 
 	interface LPDataInputConsumer {
 
-		void accept(LPDataInput dataInput) throws IOException;
+		void accept(LPDataInput dataInput);
 	}
 }

programming_language: Java
filename: LPDataOutput.java
change_type: ModificationType.MODIFY
diff: @@ -20,7 +20,6 @@
 
 package network.rs485.logisticspipes.util;
 
-import java.io.IOException;
 import java.util.BitSet;
 import java.util.Collection;
 import java.util.EnumSet;
@@ -46,93 +45,93 @@ public interface LPDataOutput {
 	/**
 	 * @see java.io.DataOutput#writeByte(int)
 	 */
-	void writeByte(int b) throws IOException;
+	void writeByte(int b);
 
-	void writeByte(byte b) throws IOException;
+	void writeByte(byte b);
 
 	/**
 	 * @see java.io.DataOutput#writeShort(int)
 	 */
-	void writeShort(int s) throws IOException;
+	void writeShort(int s);
 
-	void writeShort(short s) throws IOException;
+	void writeShort(short s);
 
 	/**
 	 * @see java.io.DataOutput#writeInt(int)
 	 */
-	void writeInt(int i) throws IOException;
+	void writeInt(int i);
 
 	/**
 	 * @see java.io.DataOutput#writeLong(long)
 	 */
-	void writeLong(long l) throws IOException;
+	void writeLong(long l);
 
 	/**
 	 * @see java.io.DataOutput#writeFloat(float)
 	 */
-	void writeFloat(float f) throws IOException;
+	void writeFloat(float f);
 
 	/**
 	 * @see java.io.DataOutput#writeDouble(double)
 	 */
-	void writeDouble(double d) throws IOException;
+	void writeDouble(double d);
 
 	/**
 	 * @see java.io.DataOutput#writeBoolean(boolean)
 	 */
-	void writeBoolean(boolean b) throws IOException;
+	void writeBoolean(boolean b);
 
 	/**
 	 * Uses UTF-8 and not UTF-16.
 	 *
 	 * @see java.io.DataOutput#writeUTF(String)
 	 */
-	void writeUTF(String s) throws IOException;
+	void writeUTF(String s);
 
-	void writeByteArray(byte[] arr) throws IOException;
+	void writeByteArray(byte[] arr);
 
-	void writeByteBuf(ByteBuf buffer) throws IOException;
+	void writeByteBuf(ByteBuf buffer);
 
-	void writeIntArray(int[] arr) throws IOException;
+	void writeIntArray(int[] arr);
 
-	void writeLongArray(long[] arr) throws IOException;
+	void writeLongArray(long[] arr);
 
-	void writeBooleanArray(boolean[] arr) throws IOException;
+	void writeBooleanArray(boolean[] arr);
 
-	void writeForgeDirection(ForgeDirection direction) throws IOException;
+	void writeForgeDirection(ForgeDirection direction);
 
-	void writeExitRoute(ExitRoute route) throws IOException;
+	void writeExitRoute(ExitRoute route);
 
-	void writeIRouter(IRouter router) throws IOException;
+	void writeIRouter(IRouter router);
 
-	void writeLPPosition(DoubleCoordinates pos) throws IOException;
+	void writeLPPosition(DoubleCoordinates pos);
 
-	<T extends Enum<T>> void writeEnumSet(EnumSet<T> types, Class<T> clazz) throws IOException;
+	<T extends Enum<T>> void writeEnumSet(EnumSet<T> types, Class<T> clazz);
 
-	void writeBitSet(BitSet bits) throws IOException;
+	void writeBitSet(BitSet bits);
 
-	void writeNBTTagCompound(NBTTagCompound tag) throws IOException;
+	void writeNBTTagCompound(NBTTagCompound tag);
 
-	void writeItemStack(ItemStack itemstack) throws IOException;
+	void writeItemStack(ItemStack itemstack);
 
-	void writeItemIdentifier(ItemIdentifier item) throws IOException;
+	void writeItemIdentifier(ItemIdentifier item);
 
-	void writeItemIdentifierStack(ItemIdentifierStack stack) throws IOException;
+	void writeItemIdentifierStack(ItemIdentifierStack stack);
 
-	<T> void writeCollection(Collection<T> collection, IWriteListObject<T> handler) throws IOException;
+	<T> void writeCollection(Collection<T> collection, IWriteListObject<T> handler);
 
-	void writeOrderInfo(IOrderInfoProvider order) throws IOException;
+	void writeOrderInfo(IOrderInfoProvider order);
 
-	<T extends Enum<T>> void writeEnum(T obj) throws IOException;
+	<T extends Enum<T>> void writeEnum(T obj);
 
-	void writeLinkedLogisticsOrderList(LinkedLogisticsOrderList orderList) throws IOException;
+	void writeLinkedLogisticsOrderList(LinkedLogisticsOrderList orderList);
 
-	void writeResource(IResource res) throws IOException;
+	void writeResource(IResource res);
 
-	void writeBytes(byte[] arr) throws IOException;
+	void writeBytes(byte[] arr);
 
 	interface LPDataOutputConsumer {
 
-		void accept(LPDataOutput dataOutput) throws IOException;
+		void accept(LPDataOutput dataOutput);
 	}
 }

programming_language: Java
filename: LPDataIOWrapperTest.java
change_type: ModificationType.MODIFY
diff: @@ -618,7 +618,8 @@ public class LPDataIOWrapperTest {
 		arrayList.add("drölf");
 		arrayList.add("text");
 
-		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(arrayList, LPDataOutput::writeUTF));
+		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(arrayList,
+				(logisticspipes.network.IWriteListObject<String>) LPDataOutput::writeUTF));
 
 		LPDataIOWrapper.provideData(data, input -> {
 			assertEquals(arrayList, input.readArrayList(LPDataInput::readUTF));
@@ -629,7 +630,8 @@ public class LPDataIOWrapperTest {
 
 	@Test
 	public void testNullArrayList() throws Exception {
-		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(null, LPDataOutput::writeUTF));
+		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(null,
+				(logisticspipes.network.IWriteListObject<String>) LPDataOutput::writeUTF));
 
 		LPDataIOWrapper.provideData(data, input -> {
 			assertEquals(null, input.readArrayList(LPDataInput::readUTF));
@@ -644,7 +646,8 @@ public class LPDataIOWrapperTest {
 		linkedList.add("drölf");
 		linkedList.add("text");
 
-		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(linkedList, LPDataOutput::writeUTF));
+		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(linkedList,
+				(logisticspipes.network.IWriteListObject<String>) LPDataOutput::writeUTF));
 
 		LPDataIOWrapper.provideData(data, input -> {
 			assertEquals(linkedList, input.readLinkedList(LPDataInput::readUTF));
@@ -655,7 +658,8 @@ public class LPDataIOWrapperTest {
 
 	@Test
 	public void testNullLinkedList() throws Exception {
-		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(null, LPDataOutput::writeUTF));
+		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(null,
+				(logisticspipes.network.IWriteListObject<String>) LPDataOutput::writeUTF));
 
 		LPDataIOWrapper.provideData(data, input -> {
 			assertEquals(null, input.readLinkedList(LPDataInput::readUTF));
@@ -670,7 +674,8 @@ public class LPDataIOWrapperTest {
 		set.add("drölf");
 		set.add("text");
 
-		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(set, LPDataOutput::writeUTF));
+		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(set,
+				(logisticspipes.network.IWriteListObject<String>) LPDataOutput::writeUTF));
 
 		LPDataIOWrapper.provideData(data, input -> {
 			assertEquals(set, input.readSet(LPDataInput::readUTF));
@@ -681,7 +686,8 @@ public class LPDataIOWrapperTest {
 
 	@Test
 	public void testNullSet() throws Exception {
-		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(null, LPDataOutput::writeUTF));
+		byte[] data = LPDataIOWrapper.collectData(output -> output.writeCollection(null,
+				(logisticspipes.network.IWriteListObject<String>) LPDataOutput::writeUTF));
 
 		LPDataIOWrapper.provideData(data, input -> {
 			assertEquals(null, input.readSet(LPDataInput::readUTF));

programming_language: Java
repo_url: https://github.com/RS485/LogisticsPipes
commit_details: repo_url: https://github.com/RS485/LogisticsPipes
author: davboecki
author_date: 2013-02-24 16:40:36+01:00
msg: Added AdvancedSatellite Upgrade.
repository: repo_url: https://github.com/RS485/LogisticsPipes
repo_name: RS485/LogisticsPipes
description: The RS485 take on LogisticsPipes -- ESTḌ 2012
repo_language: Java
owner: RS485
file_changes: filename: GuiCraftingPipe.java
change_type: ModificationType.MODIFY
diff: @@ -11,6 +11,7 @@ package logisticspipes.gui;
 import logisticspipes.interfaces.IGuiIDHandlerProvider;
 import logisticspipes.logic.BaseLogicCrafting;
 import logisticspipes.network.GuiIDs;
+import logisticspipes.utils.gui.BasicGuiHelper;
 import logisticspipes.utils.gui.DummyContainer;
 import logisticspipes.utils.gui.SmallGuiButton;
 import net.minecraft.client.gui.GuiButton;
@@ -19,33 +20,53 @@ import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.inventory.IInventory;
 import net.minecraft.inventory.Slot;
 
-import org.lwjgl.opengl.GL11;
-
 public class GuiCraftingPipe extends GuiContainer implements IGuiIDHandlerProvider {
 
 	private final BaseLogicCrafting _logic;
 	private final EntityPlayer _player;
 	private final GuiButton[] buttonarray;
+	private final GuiButton[] normalButtonArray;
+	private final GuiButton[][] advancedSatButtonArray;
+	private final boolean isAdvancedSat;
+	private final boolean isSplitedCrafting;
 	
-	public GuiCraftingPipe(EntityPlayer player, IInventory dummyInventory, BaseLogicCrafting logic) {
+	public GuiCraftingPipe(EntityPlayer player, IInventory dummyInventory, BaseLogicCrafting logic, boolean isAdvancedSat, boolean isSplitedCrafting) {
 		super(null);
 		_player = player;
+		this.isAdvancedSat = isAdvancedSat;
+		this.isSplitedCrafting = isSplitedCrafting;
+		
+		if(!isAdvancedSat && !isSplitedCrafting) {
+			xSize = 177;
+			ySize = 187;
+		} else {
+			xSize = 177;
+			ySize = 187 + 30;
+		}
+		
 		DummyContainer dummy = new DummyContainer(player.inventory, dummyInventory);
-		dummy.addNormalSlotsForPlayerInventory(18, 97);
+		dummy.addNormalSlotsForPlayerInventory(8, ySize - 82);
 
 		//Input slots
         for(int l = 0; l < 9; l++) {
-        	dummy.addDummySlot(l, 18 + l * 18, 18);
+        	dummy.addDummySlot(l, 8 + l * 18, 18);
+        }
+
+		//Output slot
+        if(!isAdvancedSat) {
+        	dummy.addDummySlot(9, 85, 55);
+        } else {
+        	dummy.addDummySlot(9, 85, 105);
         }
-        
-        //Output slot
-        dummy.addDummySlot(9, 90, 64);
 		
         this.inventorySlots = dummy;
 		_logic = logic;
-		xSize = 195;
-		ySize = 187;
 		buttonarray = new GuiButton[6];
+		normalButtonArray = new GuiButton[6];
+		advancedSatButtonArray = new GuiButton[9][2];
+		for(int i=0;i<9;i++) {
+			advancedSatButtonArray[i] = new GuiButton[2];
+		}
 	}
 
 	@SuppressWarnings("unchecked")
@@ -53,17 +74,29 @@ public class GuiCraftingPipe extends GuiContainer implements IGuiIDHandlerProvid
 	public void initGui() {
 		super.initGui();
 		
-		controlList.add(new SmallGuiButton(0, (width-xSize) / 2 + 164, (height - ySize) / 2 + 50, 10,10, ">"));
-		controlList.add(new SmallGuiButton(1, (width-xSize) / 2 + 129, (height - ySize) / 2 + 50, 10,10, "<"));
-		//controlList.add(new SmallGuiButton(2, (width-xSize) / 2 + 138, (height - ySize) / 2 + 75, 30,10, "Paint"));
-		controlList.add(new SmallGuiButton(3, (width-xSize) / 2 + 47, (height - ySize) / 2 + 50, 37,10, "Import"));
-		controlList.add(new SmallGuiButton(4, (width-xSize) / 2 + 15, (height - ySize) / 2 + 50, 28,10, "Open"));
-		for(int i = 0; i < 6; i++) {
-			controlList.add(buttonarray[i] = new SmallGuiButton(5 + i, (width-xSize) / 2 + 20 + 18 * i, (height - ySize) / 2 + 37, 10,10, ">"));
-			buttonarray[i].drawButton = false;
+		if(!isAdvancedSat) {
+			controlList.add(normalButtonArray[0] = new SmallGuiButton(0, (width-xSize) / 2 + 155, (height - ySize) / 2 + 50, 10,10, ">"));
+			controlList.add(normalButtonArray[1] = new SmallGuiButton(1, (width-xSize) / 2 + 120, (height - ySize) / 2 + 50, 10,10, "<"));
+		}
+		if(!isAdvancedSat) {
+			controlList.add(normalButtonArray[2] = new SmallGuiButton(3, (width-xSize) / 2 + 39, (height - ySize) / 2 + 50, 37,10, "Import"));
+			controlList.add(normalButtonArray[3] = new SmallGuiButton(4, (width-xSize) / 2 + 6, (height - ySize) / 2 + 50, 28,10, "Open"));
+			for(int i = 0; i < 6; i++) {
+				controlList.add(buttonarray[i] = new SmallGuiButton(5 + i, (width-xSize) / 2 + 12 + 18 * i, (height - ySize) / 2 + 30, 10,10, ">"));
+				buttonarray[i].drawButton = false;
+			}
+			controlList.add(normalButtonArray[4] = new SmallGuiButton(20, (width-xSize) / 2 + 155, (height - ySize) / 2 + 85, 10,10, ">"));
+			controlList.add(normalButtonArray[5] = new SmallGuiButton(21, (width-xSize) / 2 + 120, (height - ySize) / 2 + 85, 10,10, "<"));
+		} else {
+			for(int i=0;i<9;i++) {
+				controlList.add(advancedSatButtonArray[i][0] = new SmallGuiButton(30 + i, (width-xSize) / 2 + 10 + 18 * i, (height - ySize) / 2 + 40, 15,10, "/\\"));
+				controlList.add(advancedSatButtonArray[i][1] = new SmallGuiButton(40 + i, (width-xSize) / 2 + 10 + 18 * i, (height - ySize) / 2 + 70, 15,10, "\\/"));
+			}
+			controlList.add(normalButtonArray[2] = new SmallGuiButton(3, (width-xSize) / 2 + 39, (height - ySize) / 2 + 100, 37,10, "Import"));
+			controlList.add(normalButtonArray[3] = new SmallGuiButton(4, (width-xSize) / 2 + 6, (height - ySize) / 2 + 100, 28,10, "Open"));
+			controlList.add(normalButtonArray[4] = new SmallGuiButton(20, (width-xSize) / 2 + 155, (height - ySize) / 2 + 105, 10,10, ">"));
+			controlList.add(normalButtonArray[5] = new SmallGuiButton(21, (width-xSize) / 2 + 120, (height - ySize) / 2 + 105, 10,10, "<"));
 		}
-		controlList.add(new SmallGuiButton(20, (width-xSize) / 2 + 164, (height - ySize) / 2 + 85, 10,10, ">"));
-		controlList.add(new SmallGuiButton(21, (width-xSize) / 2 + 129, (height - ySize) / 2 + 85, 10,10, "<"));
 	}
 	
 	
@@ -72,6 +105,12 @@ public class GuiCraftingPipe extends GuiContainer implements IGuiIDHandlerProvid
 		if(5 <= guibutton.id && guibutton.id < 11) {
 			_logic.handleStackMove(guibutton.id - 5);
 		}
+		if(30 <= guibutton.id && guibutton.id < 40) {
+			_logic.setNextSatellite(_player, guibutton.id - 30);
+		}
+		if(40 <= guibutton.id && guibutton.id < 50) {
+			_logic.setPrevSatellite(_player, guibutton.id - 40);
+		}
 		switch(guibutton.id){
 		case 0:
 			_logic.setNextSatellite(_player);
@@ -79,9 +118,9 @@ public class GuiCraftingPipe extends GuiContainer implements IGuiIDHandlerProvid
 		case 1: 
 			_logic.setPrevSatellite(_player);
 			return;
-		case 2:
+		/*case 2:
 			_logic.paintPathToSatellite();
-			return;
+			return;*/
 		case 3:
 			_logic.importFromCraftingTable(_player);
 			return;
@@ -109,30 +148,30 @@ public class GuiCraftingPipe extends GuiContainer implements IGuiIDHandlerProvid
 	@Override
 	protected void drawGuiContainerForegroundLayer(int par1, int par2) {
 		fontRenderer.drawString("Inputs", 18, 7, 0x404040);
-		fontRenderer.drawString("Output", 48, 67, 0x404040);
-		fontRenderer.drawString("Inventory", 18, 86, 0x404040);
-		fontRenderer.drawString("Satellite", 132, 7, 0x404040);
+		fontRenderer.drawString("Inventory", 10, ySize - 93, 0x404040);
 		
-		
-		if (_logic.satelliteId == 0){
-			fontRenderer.drawString("Off", 144, 52, 0x404040);
+		if(!isAdvancedSat) {
+			fontRenderer.drawString("Output", 77, 40, 0x404040);
+			fontRenderer.drawString("Satellite", 123, 7, 0x404040);
+			if (_logic.satelliteId == 0) {
+				fontRenderer.drawString("Off", 135, 52, 0x404040);
+			} else {
+				fontRenderer.drawString(""+_logic.satelliteId , 146 - fontRenderer.getStringWidth(""+_logic.satelliteId) , 52, 0x404040);
+			}
+			fontRenderer.drawString("Priority:" , 123 , 75, 0x404040);
+			fontRenderer.drawString(""+_logic.priority , 143 - (fontRenderer.getStringWidth(""+_logic.priority) / 2) , 87, 0x404040);
 		} else {
-			fontRenderer.drawString(""+_logic.satelliteId , 155 - fontRenderer.getStringWidth(""+_logic.satelliteId) , 52, 0x404040);
-			/*
-			if (_logic.isSatelliteConnected()){
-				MinecraftForgeClient.bindTexture(mod_LogisticsPipes.LOGISTICSPIPE_ROUTED_TEXTURE_FILE);
-			}else{
-				MinecraftForgeClient.bindTexture(mod_LogisticsPipes.LOGISTICSPIPE_NOTROUTED_TEXTURE_FILE);
-			}*/
-			//TODO /\ /\ ???
-	
-			//GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
-			//drawRect(0,1000,0,10000, 0xFFFF0000);
-			//drawTexturedModalRect(155, 50, 10 * (xSize / 16) , 0, 10, 10);
-			//MinecraftForgeClient.unbindTexture();
+			for(int i=0; i<9;i++) {
+				if (_logic.advancedSatelliteIdArray[i] == 0) {
+					fontRenderer.drawString("Off", 10 + (i * 18), 57, 0x404040);
+				} else {
+					fontRenderer.drawString(""+_logic.advancedSatelliteIdArray[i] , 20 - fontRenderer.getStringWidth(""+_logic.advancedSatelliteIdArray[i]) + (i * 18), 57, 0x404040);
+				}
+			}
+			fontRenderer.drawString("Output", 77, 90, 0x404040);
+			fontRenderer.drawString("Priority:" , 123 , 95, 0x404040);
+			fontRenderer.drawString(""+_logic.priority , 143 - (fontRenderer.getStringWidth(""+_logic.priority) / 2) , 107, 0x404040);
 		}
-		fontRenderer.drawString("Priority:" , 132 , 75, 0x404040);
-		fontRenderer.drawString(""+_logic.priority , 152 - (fontRenderer.getStringWidth(""+_logic.priority) / 2) , 87, 0x404040);
 	}
 	
 	@Override
@@ -142,23 +181,31 @@ public class GuiCraftingPipe extends GuiContainer implements IGuiIDHandlerProvid
     
 	@Override
 	protected void drawGuiContainerBackgroundLayer(float f, int x, int y) {
-		int i = mc.renderEngine.getTexture("/logisticspipes/gui/crafting.png");
-		GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
-		mc.renderEngine.bindTexture(i);
-		int j = guiLeft;
-		int k = guiTop;
-
-		drawTexturedModalRect(j, k, 0, 0, xSize, ySize);
-
-		drawRect(400, 400, 0, 0, 0x404040);
+		BasicGuiHelper.drawGuiBackGround(mc, guiLeft, guiTop, guiLeft + xSize, guiTop + ySize, zLevel, true, true, true, true, true);
 
-		for(int count=36; count<42;count++) {
-			Slot slot = inventorySlots.getSlot(count);
-			if(slot != null && slot.getStack() != null && slot.getStack().getMaxStackSize() < 2) {
-				drawRect(guiLeft + 18 + (18 * (count-36)), guiTop + 18, guiLeft + 18 + (18 * (count-36)) + 16, guiTop + 18 + 16, 0xFFFF0000);
-				buttonarray[count - 36].drawButton = true;
-			} else {
-				buttonarray[count - 36].drawButton = false;
+		if(!isAdvancedSat) {
+			drawRect(guiLeft + 116, guiTop + 4, guiLeft + 170, guiTop + 70, 0xff8B8B8B);
+		}
+		
+		for(int i=0; i<9;i++) {
+			BasicGuiHelper.drawSlotBackground(mc, guiLeft + 7 + (18*i), guiTop + 17);
+		}
+		if(!isAdvancedSat) {
+			BasicGuiHelper.drawBigSlotBackground(mc, guiLeft + 80, guiTop + 50);
+		} else {
+			BasicGuiHelper.drawBigSlotBackground(mc, guiLeft + 80, guiTop + 100);
+		}
+		BasicGuiHelper.drawPlayerInventoryBackground(mc, guiLeft + 8, guiTop + ySize - 82);
+		
+		if(!isAdvancedSat) {
+			for(int count=36; count<42;count++) {
+				Slot slot = inventorySlots.getSlot(count);
+				if(slot != null && slot.getStack() != null && slot.getStack().getMaxStackSize() < 2) {
+					drawRect(guiLeft + 18 + (18 * (count-36)), guiTop + 18, guiLeft + 18 + (18 * (count-36)) + 16, guiTop + 18 + 16, 0xFFFF0000);
+					buttonarray[count - 36].drawButton = true;
+				} else {
+					buttonarray[count - 36].drawButton = false;
+				}
 			}
 		}
 	}

programming_language: Java
filename: ItemUpgrade.java
change_type: ModificationType.MODIFY
diff: @@ -4,8 +4,11 @@ import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.List;
 
+import logisticspipes.pipes.upgrades.AdvancedSatelliteUpgrade;
 import logisticspipes.pipes.upgrades.IPipeUpgrade;
 import logisticspipes.pipes.upgrades.SpeedUpgrade;
+import logisticspipes.pipes.upgrades.SplitCraftingCrafterUpgrade;
+import logisticspipes.pipes.upgrades.SplitCraftingSatelliteUpgrade;
 import logisticspipes.pipes.upgrades.connection.ConnectionUpgradeDOWN;
 import logisticspipes.pipes.upgrades.connection.ConnectionUpgradeEAST;
 import logisticspipes.pipes.upgrades.connection.ConnectionUpgradeNORTH;
@@ -41,6 +44,11 @@ public class ItemUpgrade extends LogisticsItem {
 	
 	//Speed Upgrade
 	public static final int SPEED = 20;
+	
+	//Crafting Upgrades
+	public static final int ADVANCED_SAT_CRAFTINGPIPE = 21;
+	public static final int SAT_DISTRIBUTING_CRAFTER = 22;
+	public static final int SAT_DISTRIBUTING_SATELITE = 23;
 
 	List<Upgrade> upgrades = new ArrayList<Upgrade>();
 	
@@ -119,6 +127,9 @@ public class ItemUpgrade extends LogisticsItem {
 		registerUpgrade(CONNECTION_EAST, "Disconnection Upgrade (EAST)", ConnectionUpgradeEAST.class, 9 * 16 + 11);
 		registerUpgrade(CONNECTION_WEST, "Disconnection Upgrade (WEST)", ConnectionUpgradeWEST.class, 9 * 16 + 12);
 		registerUpgrade(SPEED, "Item Speed Upgrade", SpeedUpgrade.class, 9 * 16 + 6);
+		registerUpgrade(ADVANCED_SAT_CRAFTINGPIPE, "Advanced Satellite Upgrade", AdvancedSatelliteUpgrade.class, 9 * 16 + 13);
+		registerUpgrade(SAT_DISTRIBUTING_CRAFTER, "Split Crafting Upgrade (Crafter)", SplitCraftingCrafterUpgrade.class, 9 * 16 + 14);
+		registerUpgrade(SAT_DISTRIBUTING_SATELITE, "Split Crafting Upgrade (Satellite)", SplitCraftingSatelliteUpgrade.class, 9 * 16 + 15);
 	}
 	
 	public void registerUpgrade(int id, String name, Class<? extends IPipeUpgrade> moduleClass) {

programming_language: Java
filename: BaseLogicCrafting.java
change_type: ModificationType.MODIFY
diff: @@ -8,8 +8,10 @@ import logisticspipes.LogisticsPipes;
 import logisticspipes.interfaces.routing.IRequireReliableTransport;
 import logisticspipes.network.GuiIDs;
 import logisticspipes.network.NetworkConstants;
+import logisticspipes.network.packets.GuiArgumentPacket;
 import logisticspipes.network.packets.PacketCoordinates;
 import logisticspipes.network.packets.PacketInventoryChange;
+import logisticspipes.network.packets.PacketModuleInteger;
 import logisticspipes.network.packets.PacketPipeInteger;
 import logisticspipes.pipes.basic.CoreRoutedPipe;
 import logisticspipes.proxy.MainProxy;
@@ -51,6 +53,9 @@ public class BaseLogicCrafting extends BaseRoutingLogic implements IRequireRelia
 	@TileNetworkData
 	public int satelliteId = 0;
 
+	@TileNetworkData(staticSize=9)
+	public int advancedSatelliteIdArray[] = new int[9];
+
 	@TileNetworkData
 	public int priority = 0;
 
@@ -60,7 +65,7 @@ public class BaseLogicCrafting extends BaseRoutingLogic implements IRequireRelia
 
 	/* ** SATELLITE CODE ** */
 
-	protected int getNextConnectSatelliteId(boolean prev) {
+	protected int getNextConnectSatelliteId(boolean prev, int x, int y) {
 		final List<ExitRoute> routes = getRoutedPipe().getRouter().getIRoutersByCost();
 		int closestIdFound = prev ? 0 : Integer.MAX_VALUE;
 		for (final BaseLogicSatellite satellite : BaseLogicSatellite.AllSatellites) {
@@ -70,16 +75,32 @@ public class BaseLogicCrafting extends BaseRoutingLogic implements IRequireRelia
 			IRouter satRouter = satPipe.getRouter();
 			for (ExitRoute route:routes){
 				if (route.destination == satRouter) {
-					if (!prev && satellite.satelliteId > satelliteId && satellite.satelliteId < closestIdFound) {
-						closestIdFound = satellite.satelliteId;
-					} else if (prev && satellite.satelliteId < satelliteId && satellite.satelliteId > closestIdFound) {
-						closestIdFound = satellite.satelliteId;
+					if(x == -1 && y == -1) {
+						if (!prev && satellite.satelliteId > satelliteId && satellite.satelliteId < closestIdFound) {
+							closestIdFound = satellite.satelliteId;
+						} else if (prev && satellite.satelliteId < satelliteId && satellite.satelliteId > closestIdFound) {
+							closestIdFound = satellite.satelliteId;
+						}
+					} else if(y == -1) {
+						if (!prev && satellite.satelliteId > advancedSatelliteIdArray[x] && satellite.satelliteId < closestIdFound) {
+							closestIdFound = satellite.satelliteId;
+						} else if (prev && satellite.satelliteId < advancedSatelliteIdArray[x] && satellite.satelliteId > closestIdFound) {
+							closestIdFound = satellite.satelliteId;
+						}
+					} else {
+						//TODO
 					}
 				}
 			}
 		}
 		if (closestIdFound == Integer.MAX_VALUE) {
-			return satelliteId;
+			if(x == -1 && y == -1) {
+				return satelliteId;
+			} else if(y == -1) {
+				return advancedSatelliteIdArray[x];
+			} else {
+				//TODO
+			}
 		}
 
 		return closestIdFound;
@@ -91,7 +112,7 @@ public class BaseLogicCrafting extends BaseRoutingLogic implements IRequireRelia
 			final PacketCoordinates packet = new PacketCoordinates(NetworkConstants.CRAFTING_PIPE_NEXT_SATELLITE, xCoord, yCoord, zCoord);
 			MainProxy.sendPacketToServer(packet.getPacket());
 		} else {
-			satelliteId = getNextConnectSatelliteId(false);
+			satelliteId = getNextConnectSatelliteId(false, -1, -1);
 			final PacketPipeInteger packet = new PacketPipeInteger(NetworkConstants.CRAFTING_PIPE_SATELLITE_ID, xCoord, yCoord, zCoord, satelliteId);
 			MainProxy.sendPacketToPlayer(packet.getPacket(), (Player)player);
 		}
@@ -99,8 +120,14 @@ public class BaseLogicCrafting extends BaseRoutingLogic implements IRequireRelia
 	}
 	
 	// This is called by the packet PacketCraftingPipeSatelliteId
-	public void setSatelliteId(int satelliteId) {
-		this.satelliteId = satelliteId;
+	public void setSatelliteId(int satelliteId, int x, int y) {
+		if(x == -1 && y == -1) {
+			this.satelliteId = satelliteId;
+		} else if(y == -1) {
+			advancedSatelliteIdArray[x] = satelliteId;
+		} else {
+			//TODO
+		}
 	}
 
 	public void setPrevSatellite(EntityPlayer player) {
@@ -108,7 +135,7 @@ public class BaseLogicCrafting extends BaseRoutingLogic implements IRequireRelia
 			final PacketCoordinates packet = new PacketCoordinates(NetworkConstants.CRAFTING_PIPE_PREV_SATELLITE, xCoord, yCoord, zCoord);
 			MainProxy.sendPacketToServer(packet.getPacket());
 		} else {
-			satelliteId = getNextConnectSatelliteId(true);
+			satelliteId = getNextConnectSatelliteId(true, -1, -1);
 			final PacketPipeInteger packet = new PacketPipeInteger(NetworkConstants.CRAFTING_PIPE_SATELLITE_ID, xCoord, yCoord, zCoord, satelliteId);
 			MainProxy.sendPacketToPlayer(packet.getPacket(), (Player)player);
 		}
@@ -116,30 +143,70 @@ public class BaseLogicCrafting extends BaseRoutingLogic implements IRequireRelia
 
 	public boolean isSatelliteConnected() {
 		final List<ExitRoute> routes = getRoutedPipe().getRouter().getIRoutersByCost();
-		for (final BaseLogicSatellite satellite : BaseLogicSatellite.AllSatellites) {
-			if (satellite.satelliteId == satelliteId) {
-				CoreRoutedPipe satPipe = satellite.getRoutedPipe();
-				if(satPipe == null || satPipe.stillNeedReplace() || satPipe.getRouter() == null)
+		if(!((CoreRoutedPipe)this.container.pipe).getUpgradeManager().isAdvancedSatelliteCrafter()) {
+			if(satelliteId == 0) return true;
+			for (final BaseLogicSatellite satellite : BaseLogicSatellite.AllSatellites) {
+				if (satellite.satelliteId == satelliteId) {
+					CoreRoutedPipe satPipe = satellite.getRoutedPipe();
+					if(satPipe == null || satPipe.stillNeedReplace() || satPipe.getRouter() == null)
+						continue;
+					IRouter satRouter = satPipe.getRouter();
+					for (ExitRoute route:routes) {
+						if (route.destination == satRouter) {
+							return true;
+						}
+					}
+				}
+			}
+		} else {
+			boolean foundAll = true;
+			for(int i=0;i<9;i++) {
+				boolean foundOne = false;
+				if(advancedSatelliteIdArray[i] == 0) {
 					continue;
-				IRouter satRouter = satPipe.getRouter();
-				for (ExitRoute route:routes) {
-					if (route.destination == satRouter) {
-						return true;
+				}
+				for (final BaseLogicSatellite satellite : BaseLogicSatellite.AllSatellites) {
+					if (satellite.satelliteId == advancedSatelliteIdArray[i]) {
+						CoreRoutedPipe satPipe = satellite.getRoutedPipe();
+						if(satPipe == null || satPipe.stillNeedReplace() || satPipe.getRouter() == null)
+							continue;
+						IRouter satRouter = satPipe.getRouter();
+						for (ExitRoute route:routes) {
+							if (route.destination == satRouter) {
+								foundOne = true;
+								break;
+							}
+						}
 					}
 				}
+				foundAll &= foundOne;
 			}
+			return foundAll;
 		}
 		return false;
 	}
 
-	public IRouter getSatelliteRouter() {
-		for (final BaseLogicSatellite satellite : BaseLogicSatellite.AllSatellites) {
-			if (satellite.satelliteId == satelliteId) {
-				CoreRoutedPipe satPipe = satellite.getRoutedPipe();
-				if(satPipe == null || satPipe.stillNeedReplace() || satPipe.getRouter() == null)
-					continue;
-				return satPipe.getRouter();
+	public IRouter getSatelliteRouter(int x, int y) {
+		if(x == -1 && y == -1) {
+			for (final BaseLogicSatellite satellite : BaseLogicSatellite.AllSatellites) {
+				if (satellite.satelliteId == satelliteId) {
+					CoreRoutedPipe satPipe = satellite.getRoutedPipe();
+					if(satPipe == null || satPipe.stillNeedReplace() || satPipe.getRouter() == null)
+						continue;
+					return satPipe.getRouter();
+				}
+			}
+		} else if(y == -1) {
+			for (final BaseLogicSatellite satellite : BaseLogicSatellite.AllSatellites) {
+				if (satellite.satelliteId == advancedSatelliteIdArray[x]) {
+					CoreRoutedPipe satPipe = satellite.getRoutedPipe();
+					if(satPipe == null || satPipe.stillNeedReplace() || satPipe.getRouter() == null)
+						continue;
+					return satPipe.getRouter();
+				}
 			}
+		} else {
+			//TODO
 		}
 		return null;
 	}
@@ -182,6 +249,7 @@ public class BaseLogicCrafting extends BaseRoutingLogic implements IRequireRelia
 	@Override
 	public void onWrenchClicked(EntityPlayer entityplayer) {
 		if (MainProxy.isServer(entityplayer.worldObj)) {
+			MainProxy.sendPacketToPlayer(new GuiArgumentPacket(GuiIDs.GUI_CRAFTINGPIPE_ID, new Object[]{((CoreRoutedPipe)this.container.pipe).getUpgradeManager().isAdvancedSatelliteCrafter(), ((CoreRoutedPipe)this.container.pipe).getUpgradeManager().isSatelliteCraftingCrafter()}).getPacket(),  (Player) entityplayer);
 			entityplayer.openGui(LogisticsPipes.instance, GuiIDs.GUI_CRAFTINGPIPE_ID, worldObj, xCoord, yCoord, zCoord);
 		}
 	}
@@ -363,16 +431,25 @@ public class BaseLogicCrafting extends BaseRoutingLogic implements IRequireRelia
 		_dummyInventory.setInventorySlotContents(slot, itemstack);
 	}
 
-	/* ** NON NETWORKING ** */
-	@SuppressWarnings("deprecation")
-	public void paintPathToSatellite() {
-		final IRouter satelliteRouter = getSatelliteRouter();
-		if (satelliteRouter == null) {
-			return;
+	public void setNextSatellite(EntityPlayer player, int i) {
+		if (MainProxy.isClient(player.worldObj)) {
+			final PacketCoordinates packet = new PacketPipeInteger(NetworkConstants.CRAFTING_PIPE_NEXT_SATELLITE_ADVANCED, xCoord, yCoord, zCoord, i);
+			MainProxy.sendPacketToServer(packet.getPacket());
+		} else {
+			advancedSatelliteIdArray[i] = getNextConnectSatelliteId(false, i, -1);
+			final PacketModuleInteger packet = new PacketModuleInteger(NetworkConstants.CRAFTING_PIPE_SATELLITE_ID_ADVANCED, xCoord, yCoord, zCoord, i, advancedSatelliteIdArray[i]);
+			MainProxy.sendPacketToPlayer(packet.getPacket(), (Player)player);
 		}
-
-		getRoutedPipe().getRouter().displayRouteTo(satelliteRouter.getSimpleID());
 	}
 
-
+	public void setPrevSatellite(EntityPlayer player, int i) {
+		if (MainProxy.isClient(player.worldObj)) {
+			final PacketCoordinates packet = new PacketPipeInteger(NetworkConstants.CRAFTING_PIPE_PREV_SATELLITE_ADVANCED, xCoord, yCoord, zCoord, i);
+			MainProxy.sendPacketToServer(packet.getPacket());
+		} else {
+			advancedSatelliteIdArray[i] = getNextConnectSatelliteId(true, i, -1);
+			final PacketModuleInteger packet = new PacketModuleInteger(NetworkConstants.CRAFTING_PIPE_SATELLITE_ID_ADVANCED, xCoord, yCoord, zCoord, i, advancedSatelliteIdArray[i]);
+			MainProxy.sendPacketToPlayer(packet.getPacket(), (Player)player);
+		}
+	}
 }

programming_language: Java
filename: LogisticsLiquidManager.java
change_type: ModificationType.MODIFY
diff: @@ -41,7 +41,7 @@ public class LogisticsLiquidManager implements ILogisticsLiquidManager {
 				return result;
 			}
 		}
-		Pair<Integer, Integer> result = new Pair<Integer, Integer>(null, 0);
+		Pair<Integer, Integer> result = new Pair<Integer, Integer>(0, 0);
 		return result;
 	}
 

programming_language: Java
filename: DebugHelper.java
change_type: ModificationType.MODIFY
diff: @@ -103,6 +103,7 @@ public class DebugHelper implements IContainerTooltipHandler {
 				content.add(new DefaultMutableTreeNode("[" + i + "]: " + Byte.toString(byt)));
 				i++;
 			}
+			node.add(content);
 			node.add(type);
 		} else if(nbt instanceof NBTTagDouble) {
 			DefaultMutableTreeNode type = new DefaultMutableTreeNode("NBTTagDouble");

programming_language: Java
filename: ClientPacketHandler.java
change_type: ModificationType.MODIFY
diff: @@ -41,6 +41,7 @@ import logisticspipes.modules.ModuleItemSink;
 import logisticspipes.modules.ModuleModBasedItemSink;
 import logisticspipes.modules.ModuleThaumicAspectSink;
 import logisticspipes.nei.LoadingHelper;
+import logisticspipes.network.packets.GuiArgumentPacket;
 import logisticspipes.network.packets.PacketBufferTransfer;
 import logisticspipes.network.packets.PacketCoordinatesUUID;
 import logisticspipes.network.packets.PacketCraftingLoop;
@@ -338,6 +339,17 @@ public class ClientPacketHandler {
 					packetBb.readData(data);
 					onSetSecurityCC(packetBb);
 					break;
+				case NetworkConstants.GUI_ARGUMENT_PACKET:
+					final GuiArgumentPacket packetBc = new GuiArgumentPacket();
+					packetBc.readData(data);
+					GuiHandler.argumentQueue.put(packetBc.guiID, packetBc.args);
+					break;
+				case NetworkConstants.CRAFTING_PIPE_SATELLITE_ID_ADVANCED:
+					final PacketModuleInteger packetBd = new PacketModuleInteger();
+					packetBd.readData(data);
+					onCraftingPipeSetSatelliteAdvanced(packetBd);
+					break;
+					
 			}
 		} catch (final Exception ex) {
 			ex.printStackTrace();
@@ -354,7 +366,7 @@ public class ClientPacketHandler {
 			return;
 		}
 
-		((BaseLogicCrafting) pipe.pipe.logic).setSatelliteId(packet.integer);
+		((BaseLogicCrafting) pipe.pipe.logic).setSatelliteId(packet.integer, -1, -1);
 	}
 
 	private static void onCraftingPipeSetImport(PacketInventoryChange packet) {
@@ -925,6 +937,19 @@ public class ClientPacketHandler {
 			}
 		}
 	}
+
+	private static void onCraftingPipeSetSatelliteAdvanced(PacketModuleInteger packet) {
+		final TileGenericPipe pipe = getPipe(FMLClientHandler.instance().getClient().theWorld, packet.posX, packet.posY, packet.posZ);
+		if (pipe == null) {
+			return;
+		}
+
+		if (!(pipe.pipe.logic instanceof BaseLogicCrafting)) {
+			return;
+		}
+
+		((BaseLogicCrafting) pipe.pipe.logic).setSatelliteId(packet.integer, packet.slot, -1);
+	}
 	
 	// BuildCraft method
 	/**

programming_language: Java
filename: GuiHandler.java
change_type: ModificationType.MODIFY
diff: @@ -1,5 +1,8 @@
 package logisticspipes.network;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import logisticspipes.LogisticsPipes;
 import logisticspipes.blocks.LogisticsSecurityTileEntity;
 import logisticspipes.blocks.LogisticsSolderingTileEntity;
@@ -87,6 +90,8 @@ import cpw.mods.fml.common.network.IGuiHandler;
 import cpw.mods.fml.common.network.Player;
 
 public class GuiHandler implements IGuiHandler {
+	
+	public final static Map<Integer, Object[]> argumentQueue = new HashMap<Integer, Object[]>();
 
 	@Override
 	public Object getServerGuiElement(int ID, EntityPlayer player, World world, final int x, final int y, final int z) {
@@ -634,12 +639,18 @@ public class GuiHandler implements IGuiHandler {
 			}
 		}
 		
+		Object[] args = argumentQueue.get(GuiIDs.GUI_CRAFTINGPIPE_ID);
+		
 		if(ID < 120) {
 			switch(ID) {
 			
 			case GuiIDs.GUI_CRAFTINGPIPE_ID:
 				if(pipe == null || pipe.pipe == null || !(pipe.pipe.logic instanceof BaseLogicCrafting)) return null;
-				return new GuiCraftingPipe(player, ((BaseLogicCrafting)pipe.pipe.logic).getDummyInventory(), (BaseLogicCrafting)pipe.pipe.logic);
+				if(args == null) {
+					new UnsupportedOperationException("Arguments missing").printStackTrace();
+					return null;
+				}
+				return new GuiCraftingPipe(player, ((BaseLogicCrafting)pipe.pipe.logic).getDummyInventory(), (BaseLogicCrafting)pipe.pipe.logic, (Boolean) args[0], (Boolean) args[1]);
 			
 			case GuiIDs.GUI_LiquidSupplier_ID:
 				if(pipe == null || pipe.pipe == null || !(pipe.pipe.logic instanceof LogicLiquidSupplier)) return null;

programming_language: Java
filename: NetworkConstants.java
change_type: ModificationType.MODIFY
diff: @@ -99,4 +99,8 @@ public class NetworkConstants {
 	public static final int OPEN_SECURITY_PLAYER = 94;
 	public static final int SAVE_SECURITY_PLAYER = 95;
 	public static final int SET_SECURITY_CC = 96;
+	public static final int GUI_ARGUMENT_PACKET = 97;
+	public static final int CRAFTING_PIPE_NEXT_SATELLITE_ADVANCED = 98;
+	public static final int CRAFTING_PIPE_PREV_SATELLITE_ADVANCED = 99;
+	public static final int CRAFTING_PIPE_SATELLITE_ID_ADVANCED = 100;
 }

programming_language: Java
filename: ServerPacketHandler.java
change_type: ModificationType.MODIFY
diff: @@ -370,7 +370,16 @@ public class ServerPacketHandler {
 					packetBc.readData(data);
 					onSetSecurityCC(player, packetBc);
 					break;
-					
+				case NetworkConstants.CRAFTING_PIPE_NEXT_SATELLITE_ADVANCED:
+					final PacketPipeInteger packetBd = new PacketPipeInteger();
+					packetBd.readData(data);
+					onCraftingPipeNextSatelliteAdvanced(player, packetBd);
+					break;
+				case NetworkConstants.CRAFTING_PIPE_PREV_SATELLITE_ADVANCED:
+					final PacketPipeInteger packetBe = new PacketPipeInteger();
+					packetBe.readData(data);
+					onCraftingPipePrevSatelliteAdvanced(player, packetBe);
+					break;
 			}
 		} catch (final Exception ex) {
 			ex.printStackTrace();
@@ -1438,6 +1447,32 @@ public class ServerPacketHandler {
 			((LogisticsSecurityTileEntity)tile).changeCC();
 		}
 	}
+
+	private static void onCraftingPipeNextSatelliteAdvanced(EntityPlayerMP player, PacketPipeInteger packet) {
+		final TileGenericPipe pipe = getPipe(player.worldObj, packet.posX, packet.posY, packet.posZ);
+		if (pipe == null) {
+			return;
+		}
+
+		if (!(pipe.pipe.logic instanceof BaseLogicCrafting)) {
+			return;
+		}
+
+		((BaseLogicCrafting) pipe.pipe.logic).setNextSatellite(player, packet.integer);
+	}
+
+	private static void onCraftingPipePrevSatelliteAdvanced(EntityPlayerMP player, PacketPipeInteger packet) {
+		final TileGenericPipe pipe = getPipe(player.worldObj, packet.posX, packet.posY, packet.posZ);
+		if (pipe == null) {
+			return;
+		}
+
+		if (!(pipe.pipe.logic instanceof BaseLogicCrafting)) {
+			return;
+		}
+
+		((BaseLogicCrafting) pipe.pipe.logic).setPrevSatellite(player, packet.integer);
+	}
 	
 	// BuildCraft method
 	/**

programming_language: Java
filename: GuiArgumentPacket.java
change_type: ModificationType.ADD
diff: @@ -0,0 +1,70 @@
+package logisticspipes.network.packets;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+
+import logisticspipes.network.NetworkConstants;
+
+public class GuiArgumentPacket extends LogisticsPipesPacket {
+	
+	public Object[] args;
+	public int guiID = 0;
+	
+	public GuiArgumentPacket() {
+		super();
+	}
+	
+	public GuiArgumentPacket(int Id, Object... arg) {
+		super();
+		args = arg;
+		guiID = Id;
+	}
+	
+	@Override
+	public int getID() {
+		return NetworkConstants.GUI_ARGUMENT_PACKET;
+	}
+
+	@Override
+	public void readData(DataInputStream data) throws IOException {
+		guiID = data.readInt();
+		int size = data.readInt();
+		args = new Object[size];
+		for(int i=0; i < size;i++) {
+			int arraySize = data.readInt();
+			byte[] bytes = new byte[arraySize];
+			data.read(bytes);
+			ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
+			ObjectInput in = null;
+			in = new ObjectInputStream(bis);
+			try {
+				Object o = in.readObject();
+				args[i] = o;
+			} catch (ClassNotFoundException e) {
+				throw new UnsupportedOperationException(e);
+			} 
+		}
+	}
+
+	@Override
+	public void writeData(DataOutputStream data) throws IOException {
+		data.writeInt(guiID);
+		data.writeInt(args.length);
+		for(int i=0; i<args.length;i++) {
+			ByteArrayOutputStream bos = new ByteArrayOutputStream();
+			ObjectOutput out = null;
+			out = new ObjectOutputStream(bos); 
+			out.writeObject(args[i]);
+			byte[] bytes = bos.toByteArray();
+			data.writeInt(bytes.length);
+			data.write(bytes);
+		}
+	}
+}

programming_language: Java
filename: PipeItemsCraftingLogistics.java
change_type: ModificationType.MODIFY
diff: @@ -348,10 +348,29 @@ public class PipeItemsCraftingLogistics extends CoreRoutedPipe implements ICraft
 		
 		BaseLogicCrafting craftingLogic = (BaseLogicCrafting) this.logic;
 		ItemStack stack = craftingLogic.getCraftedItem(); 
-		if ( stack == null) return null;
+		if (stack == null) return null;
+		
+		IRequestItems[] target = new IRequestItems[9];
+		for(int i=0;i<9;i++) {
+			target[i] = this;
+		}
 
 		boolean hasSatellite = craftingLogic.isSatelliteConnected();
-		if(craftingLogic.satelliteId != 0 && !hasSatellite) return null;
+		if(!hasSatellite) return null;
+		if(!getUpgradeManager().isAdvancedSatelliteCrafter()) {
+			if(craftingLogic.satelliteId != 0) {
+				IRequestItems sat = (IRequestItems)craftingLogic.getSatelliteRouter(-1, -1).getPipe();
+				for(int i=6;i<9;i++) {
+					target[i] = sat;
+				}
+			}
+		} else {
+			for(int i=0;i<9;i++) {
+				if(craftingLogic.advancedSatelliteIdArray[i] != 0) {
+					target[i] = (IRequestItems)craftingLogic.getSatelliteRouter(i, -1).getPipe();
+				}
+			}
+		}
 
 		CraftingTemplate template = new CraftingTemplate(ItemIdentifierStack.GetFromStack(stack), this, craftingLogic.priority);
 
@@ -359,11 +378,7 @@ public class PipeItemsCraftingLogistics extends CoreRoutedPipe implements ICraft
 		for (int i = 0; i < 9; i++){
 			ItemStack resourceStack = craftingLogic.getMaterials(i);
 			if (resourceStack == null || resourceStack.stackSize == 0) continue;
-			if (i < 6 || !hasSatellite) {
-				template.addRequirement(ItemIdentifierStack.GetFromStack(resourceStack), this);
-			} else {
-				template.addRequirement(ItemIdentifierStack.GetFromStack(resourceStack), (IRequestItems)craftingLogic.getSatelliteRouter().getPipe());
-			}
+			template.addRequirement(ItemIdentifierStack.GetFromStack(resourceStack), target[i]);
 				
 		}
 		return template;

programming_language: Java
filename: PipeLiquidProvider.java
change_type: ModificationType.MODIFY
diff: @@ -2,6 +2,8 @@ package logisticspipes.pipes;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 
 import logisticspipes.interfaces.routing.ILiquidProvider;
 import logisticspipes.interfaces.routing.IRequestLiquid;
@@ -14,6 +16,7 @@ import logisticspipes.routing.LiquidLogisticsPromise;
 import logisticspipes.routing.LogisticsLiquidOrderManager;
 import logisticspipes.textures.Textures;
 import logisticspipes.textures.Textures.TextureType;
+import logisticspipes.utils.ItemIdentifier;
 import logisticspipes.utils.LiquidIdentifier;
 import logisticspipes.utils.Pair;
 import logisticspipes.utils.Pair3;
@@ -144,4 +147,21 @@ public class PipeLiquidProvider extends LiquidRoutedPipe implements ILiquidProvi
 	public boolean canInsertFromSideToTanks() {
 		return true;
 	}
+
+
+	@Override //work in progress, currently not active code.
+	public Set<ItemIdentifier> getSpecificInterests() {
+		Set<ItemIdentifier> l1 = new TreeSet<ItemIdentifier>();;
+		for(Pair<TileEntity, ForgeDirection> pair:getAdjacentTanks(false)) {
+			ILiquidTank[] tanks = ((ITankContainer)pair.getValue1()).getTanks(pair.getValue2().getOpposite());
+			for(ILiquidTank tank:tanks) {
+				LiquidStack liquid;
+				if((liquid = tank.getLiquid()) != null && liquid.itemID != 0) {
+					LiquidIdentifier ident = LiquidIdentifier.get(liquid);
+					l1.add(ident.getItemIdentifier());
+				}
+			}
+		}
+		return l1;
+	}
 }

programming_language: Java
filename: AdvancedSatelliteUpgrade.java
change_type: ModificationType.ADD
diff: @@ -0,0 +1,17 @@
+package logisticspipes.pipes.upgrades;
+
+import logisticspipes.pipes.PipeItemsCraftingLogistics;
+import logisticspipes.pipes.basic.CoreRoutedPipe;
+
+public class AdvancedSatelliteUpgrade implements IPipeUpgrade {
+
+	@Override
+	public boolean needsUpdate() {
+		return false;
+	}
+
+	@Override
+	public boolean isAllowed(CoreRoutedPipe pipe) {
+		return pipe instanceof PipeItemsCraftingLogistics;
+	}
+}

programming_language: Java
filename: ConnectionUpgrade.java
change_type: ModificationType.MODIFY
diff: @@ -1,5 +1,6 @@
 package logisticspipes.pipes.upgrades;
 
+import logisticspipes.pipes.basic.CoreRoutedPipe;
 import net.minecraftforge.common.ForgeDirection;
 
 public abstract class ConnectionUpgrade implements IPipeUpgrade {
@@ -9,4 +10,9 @@ public abstract class ConnectionUpgrade implements IPipeUpgrade {
 	public boolean needsUpdate() {
 		return true;
 	}
+
+	@Override
+	public boolean isAllowed(CoreRoutedPipe pipe) {
+		return true;
+	}
 }

programming_language: Java
filename: IPipeUpgrade.java
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,8 @@
 package logisticspipes.pipes.upgrades;
 
+import logisticspipes.pipes.basic.CoreRoutedPipe;
 
 public interface IPipeUpgrade {
 	boolean needsUpdate();
+	boolean isAllowed(CoreRoutedPipe pipe);
 }

programming_language: Java
filename: SneakyUpgrade.java
change_type: ModificationType.MODIFY
diff: @@ -1,5 +1,6 @@
 package logisticspipes.pipes.upgrades;
 
+import logisticspipes.pipes.basic.CoreRoutedPipe;
 import net.minecraftforge.common.ForgeDirection;
 
 public abstract class SneakyUpgrade implements IPipeUpgrade {
@@ -9,4 +10,9 @@ public abstract class SneakyUpgrade implements IPipeUpgrade {
 	public boolean needsUpdate() {
 		return false;
 	}
+
+	@Override
+	public boolean isAllowed(CoreRoutedPipe pipe) {
+		return true;
+	}
 }

programming_language: Java
filename: SpeedUpgrade.java
change_type: ModificationType.MODIFY
diff: @@ -1,10 +1,16 @@
 package logisticspipes.pipes.upgrades;
 
+import logisticspipes.pipes.basic.CoreRoutedPipe;
+
 public class SpeedUpgrade implements IPipeUpgrade {
 
 	@Override
 	public boolean needsUpdate() {
 		return false;
 	}
-
+	
+	@Override
+	public boolean isAllowed(CoreRoutedPipe pipe) {
+		return true;
+	}
 }

programming_language: Java
filename: SplitCraftingCrafterUpgrade.java
change_type: ModificationType.ADD
diff: @@ -0,0 +1,17 @@
+package logisticspipes.pipes.upgrades;
+
+import logisticspipes.pipes.PipeItemsCraftingLogistics;
+import logisticspipes.pipes.basic.CoreRoutedPipe;
+
+public class SplitCraftingCrafterUpgrade implements IPipeUpgrade {
+
+	@Override
+	public boolean needsUpdate() {
+		return false;
+	}
+	
+	@Override
+	public boolean isAllowed(CoreRoutedPipe pipe) {
+		return pipe instanceof PipeItemsCraftingLogistics;
+	}
+}

programming_language: Java
filename: SplitCraftingSatelliteUpgrade.java
change_type: ModificationType.ADD
diff: @@ -0,0 +1,17 @@
+package logisticspipes.pipes.upgrades;
+
+import logisticspipes.pipes.PipeItemsSatelliteLogistics;
+import logisticspipes.pipes.basic.CoreRoutedPipe;
+
+public class SplitCraftingSatelliteUpgrade implements IPipeUpgrade {
+
+	@Override
+	public boolean needsUpdate() {
+		return false;
+	}
+	
+	@Override
+	public boolean isAllowed(CoreRoutedPipe pipe) {
+		return pipe instanceof PipeItemsSatelliteLogistics;
+	}
+}

programming_language: Java
filename: UpgradeManager.java
change_type: ModificationType.MODIFY
diff: @@ -31,6 +31,9 @@ public class UpgradeManager implements ISimpleInventoryEventHandler {
 	private ForgeDirection sneakyOrientation = ForgeDirection.UNKNOWN;
 	private int speedUpgradeCount = 0;
 	private final EnumSet<ForgeDirection> disconnectedSides = EnumSet.noneOf(ForgeDirection.class);
+	private boolean isAdvancedCrafter = false;
+	private boolean isSatelliteCraftingSatellite = false;
+	private boolean isSatelliteCraftingCrafter = false;
 	
 	public UpgradeManager(CoreRoutedPipe pipe) {
 		this.pipe = pipe;
@@ -72,6 +75,9 @@ public class UpgradeManager implements ISimpleInventoryEventHandler {
 		//update sneaky direction, speed upgrade count and disconnection
 		sneakyOrientation = ForgeDirection.UNKNOWN;
 		speedUpgradeCount = 0;
+		isAdvancedCrafter = false;
+		isSatelliteCraftingSatellite = false;
+		isSatelliteCraftingCrafter = false;
 		disconnectedSides.clear();
 		for(int i=0;i<upgrades.length;i++) {
 			IPipeUpgrade upgrade = upgrades[i];
@@ -81,6 +87,12 @@ public class UpgradeManager implements ISimpleInventoryEventHandler {
 				speedUpgradeCount += inv.getStackInSlot(i).stackSize;
 			} else if(upgrade instanceof ConnectionUpgrade) {
 				disconnectedSides.add(((ConnectionUpgrade)upgrade).getSide());
+			} else if(upgrade instanceof SplitCraftingCrafterUpgrade) {
+				isSatelliteCraftingCrafter = true;
+			} else if(upgrade instanceof SplitCraftingSatelliteUpgrade) {
+				isSatelliteCraftingSatellite = true;
+			} else if(upgrade instanceof AdvancedSatelliteUpgrade) {
+				isAdvancedCrafter = true;
 			}
 		}
 		if(needUpdate) {
@@ -112,7 +124,18 @@ public class UpgradeManager implements ISimpleInventoryEventHandler {
 
 		//Pipe slots
 	    for(int pipeSlot = 0; pipeSlot < 8; pipeSlot++){
-	    	dummy.addRestrictedSlot(pipeSlot, inv, 8 + pipeSlot * 18, 18, LogisticsPipes.UpgradeItem.itemID);
+	    	dummy.addRestrictedSlot(pipeSlot, inv, 8 + pipeSlot * 18, 18, new ISlotCheck() {
+				@Override
+				public boolean isStackAllowed(ItemStack itemStack) {
+					if(itemStack == null) return false;
+					if(itemStack.itemID == LogisticsPipes.UpgradeItem.itemID) {
+						if(!LogisticsPipes.UpgradeItem.getUpgradeForItem(itemStack, null).isAllowed(pipe)) return false;
+					} else {
+						return false;
+					}
+					return true;
+				}
+	    	});
 	    }
     	dummy.addRestrictedSlot(8, inv, 8 + 8 * 18, 18, new ISlotCheck() {
 			@Override
@@ -135,7 +158,7 @@ public class UpgradeManager implements ISimpleInventoryEventHandler {
 	}
 
 	public boolean tryIserting(World world, EntityPlayer entityplayer) {
-		if(entityplayer.getCurrentEquippedItem() != null && entityplayer.getCurrentEquippedItem().itemID == LogisticsPipes.UpgradeItem.itemID) {
+		if(entityplayer.getCurrentEquippedItem() != null && entityplayer.getCurrentEquippedItem().itemID == LogisticsPipes.UpgradeItem.itemID && LogisticsPipes.UpgradeItem.getUpgradeForItem(entityplayer.getCurrentEquippedItem(), null).isAllowed(pipe)) {
 			if(MainProxy.isClient(world)) return true;
 			for(int i=0;i<inv.getSizeInventory() - 1;i++) {
 				ItemStack item = inv.getStackInSlot(i);
@@ -194,4 +217,16 @@ public class UpgradeManager implements ISimpleInventoryEventHandler {
 			}
 		}
 	}
+	
+	public boolean isAdvancedSatelliteCrafter() {
+		return isAdvancedCrafter;
+	}
+	
+	public boolean isSatelliteCraftingSatellite() {
+		return isSatelliteCraftingSatellite;
+	}
+	
+	public boolean isSatelliteCraftingCrafter() {
+		return isSatelliteCraftingCrafter;
+	}
 }

programming_language: Java
filename: BasicGuiHelper.java
change_type: ModificationType.MODIFY
diff: @@ -433,6 +433,20 @@ public class BasicGuiHelper {
         var9.draw();
     }
     
+    public static void drawBigSlotBackground(Minecraft mc, int x, int y) {
+		int i = mc.renderEngine.getTexture("/logisticspipes/gui/slot-big.png");
+		GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+		mc.renderEngine.bindTexture(i);
+		
+		Tessellator var9 = Tessellator.instance;
+        var9.startDrawingQuads();
+        var9.addVertexWithUV(x		, y + 26	, (double)zLevel, 0	, 1);
+        var9.addVertexWithUV(x + 26	, y + 26	, (double)zLevel, 1	, 1);
+        var9.addVertexWithUV(x + 26	, y			, (double)zLevel, 1	, 0);
+        var9.addVertexWithUV(x		, y			, (double)zLevel, 0	, 0);
+        var9.draw();
+    }
+    
 
     public static void drawSmallSlotBackground(Minecraft mc, int x, int y) {
 		int i = mc.renderEngine.getTexture("/logisticspipes/gui/slot-small.png");

programming_language: Java