.. | ||
.gitignore | ||
common.lua | ||
deploy.sh | ||
masterconfig.lua | ||
README.md | ||
slaveconfig.lua |
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()]
// Dump for additional body data
body: any
}
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 |
body |
false | any | Any additional body data per the requirements of a query, such as a detailed list of inventory contents |
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
pong
packets from all slaves. - The
sourceid
of allpong
packets 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
. Fielditemname
is populated with an item to query for. - Each available slave responds with type
query
.itemname
is populated with data from the previous packetitemquantity
is 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
ping
or until a configurable timeout is reached. - Results are consumed