@Override public void onChunkUnload() { super.onChunkUnload(); // Make sure to remove the node from its network when its environment, // meaning this tile entity, gets unloaded. for (Node node : nodes) { if (node != null) node.remove(); } }
@Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); int index = 0; for (Node node : nodes) { // See readFromNBT() regarding host check. if (node != null && node.host() == this) { final NBTTagCompound nodeNbt = new NBTTagCompound(); node.save(nodeNbt); nbt.setCompoundTag("oc:node" + index, nodeNbt); } ++index; } }
@Override public void readFromNBT(final NBTTagCompound nbt) { super.readFromNBT(nbt); int index = 0; for (Node node : nodes) { // The host check may be superfluous for you. It's just there to allow // some special cases, where getNode() returns some node managed by // some other instance (for example when you have multiple internal // nodes in this tile entity). if (node != null && node.host() == this) { // This restores the node's address, which is required for networks // to continue working without interruption across loads. If the // node is a power connector this is also required to restore the // internal energy buffer of the node. node.load(nbt.getCompoundTag("oc:node" + index)); } ++index; } }