Computercraft Storage Network
This is an implementation of a centralized storage network architecture that uses just ComputerCraft and vanilla Minecraft.
Deployment
The master node must have a modem attached and be within range of all slave nodes.
- Deploy at least one slave turtle
- The inventory it is to monitor must be above the unit
- The unit should be able to drop below itself to push items to the master node
- Any subsequent slaves should be placed in front of the unit
- Set up a return system that pushes into the first slave node (can be a hopper or similar)
Communication Protocol
Messages are sent over rednet with the protocol ccstoragenet.
Packet Format
Packet format is uniform between master <-> slaves and is structured like so:
{
// Metadata
networkid: int()
sourceid: int()
sourcetype: str()
destid: int()
// Payload
type: str()
// Optional Arguments
itemname: str()
itemquant: int()
destination: int()
location: [int(),int(),int()]
}
| Name | Required? | Type | Description |
|---|---|---|---|
networkid |
true | int | The ID of the network |
sourceid |
true | int | The CC ID of the machine sending the packet |
sourcetype |
true | string | The mode of the machine sending the packet |
destid |
true | int | The CC ID of the intended recipient of the packet |
type |
true | string | An arbitrary string literal corresponding to the type of the request. Common examplse include ping, query, etc. |
itemname |
false | string | The unlocalized name of an item. Used for querying, crafting, movement, etc. |
itemquant |
false | int | Quantity of the aforementioned item |
destination |
false | int | The CC ID of the intended recipient of the item |
Slave Node Initialization
- The slave starts up and immediately listens for messages
Master Node Initialization
- The master node starts up
- The master node sends a packet with type
ping. - The master node listens for
pongpackets from all slaves. - The
sourceidof allpongpackets is recorded for statistics displays. This cached data is only used for user display. Node availability is evaluated at request time.
Inventory Search (query)
- The sender node sends a packet with type
query. Fielditemnameis populated with an item to query for. - Each available slave responds with type
query.itemnameis populated with data from the previous packetitemquantityis populated with the quantity of that item attached to storages the slave has access to.
- The requester waits for a response from each slave that responded to the
pingor until a configurable timeout is reached. - Results are consumed