Download the mod from here.
Archive:
version 51.x.x for MC 1.4.5
version 50.x.x for MC 1.2.5/1.3.2/1.4.2
version 49.x.x for MC 1.2.5
Requirements: Minecraft Forge, ComputerCraft, and Immibis Core (which you can download from the same page).
RFID cards
Spoiler
An RFID card is an item that can hold up to 80 characters of data. If you are holding one anywhere in your inventory, it can be read by any computer with a connected RFID reader within 5 metres.They can only be written once, and writers are quite expensive and slow, though readers are not.
RFID reader
Spoiler
This block reads RFID cards held by players within 5 metres. It has no GUI and can only be used from Lua code.
It can also read RFID cards inside storage carts (within 5 metres)
RFID writer
Spoiler
No card inserted:Blank card inserted:
Non-blank card inserted:
Busy writing:
(the red line shows progress)
Right click with a RFID card in your hand to insert the card.
Right click with an empty hand to remove the card, if there is one in the writer. You cannot remove the card unless the glass cover is completely open.
RFID peripheral API
Spoiler
RFID reader, if "reader" is the wrapped peripheral:
reader.scan([range])
Starts scanning for nearby RFID cards. Returns true on success, or false and an error message on failure.
Range is optional and defaults to 5. If specified, it must be a number between 1 and 5 inclusive, in blocks.
This is the maximum distance between the centre of the block and the player's feet, and seems to be about
1.4 metres when the player is standing right up against the block.
reader.isScanning() -- Returns whether the reader is currently scanning for nearby cards (true or false)
reader.getProgress() -- Returns progress, from 0 to 1, or -1 if not currently scanning.
Scans take 0.5 seconds at maximum range. At lower ranges the time is proportionally shorter (eg 0.25 seconds at 2.5m).In previous versions, it took 1 second to scan at maximum range.
RFID readers can scan with a distance longer than 5 blocks. However, they will take proportionally longer.
At distances longer than 5 blocks, you can detect the existence of a card, but the data returned will be blank.
Events:
"rfid_detected", data, distance, side -- Queued once for each detected RFID card, before rfid_scan_done
"rfid_scan_done", side -- Queued when an RFID scan is finished.
RFID cards can only be read from players' inventories and storage minecarts.RFID writer, if "writer" is the wrapped peripheral:
writer.encode("card data", "card label") -- Starts writing the inserted card with the given data and label. Returns true on success, or false and an error message on failure.
writer.isPresent() -- Returns whether there is an RFID card inserted (true or false)
writer.getProgress() -- Returns progress, from 0 to 1, or -1 if not currently writing.
writer.isCoded() -- Returns whether there is an RFID card inserted which has already been written (true or false)
Events:
"rfid_written", side -- Queued when an RFID writer finishes writing
Writing takes 30 seconds. When writing is complete, you will get an "rfid_written" event. Writing will abort if the chunk unloads.If you set peripherals.adminPassword to a non-empty string in config/immibis.cfg and pass that string as a third argument to writer.encode, it will only take one tick to write, instead of 30 seconds. (Requested by DV8FromTheWorld)
RFID recipes
Spoiler
RFID card recipe:You can also craft a card with any dye to change the colour of the white tab - this is purely visual and doesn't affect anything else.
RFID reader recipe:
RFID writer recipe:
Mag-cards
Spoiler
Mag-cards (magnetic stripe cards) are similar to RFID cards, but they are rewritable, store slightly more data (100 chars instead of 80) and require physical contact with the machine to read or write. They're also written and read with the same device, which is cheaper than an RFID reader and much cheaper than an RFID writer.Mag-card device
Spoiler
This is a peripheral that reads and writes mag-cards.Right click while holding a mag-card to swipe it.
The green light shows whether the device is attached to a computer.
The yellow light shows whether the device will write (on) or read (off) the next card swiped.
The orange light is controlled through the API, and is intended to indicate that the computer is waiting for you to swipe a card.
Mag-card peripheral API
Spoiler
Mag-card device, if "device" is the wrapped peripheral:
reader.beginWrite("card data", "card label") -- Sets the device to write the next swiped card with the given label and data.
reader.cancelWrite() -- If the device is waiting for a card to write, cancel that (the next card will be read instead)
reader.isWaiting() -- Returns whether the device is waiting for a card to write
reader.setInsertCardLight(true/false) -- Sets the state of the orange light
Events:
"mag_write_done", side, old_data -- Queued when a card is written.
"mag_swipe", data, side -- Queued when a card is read.
Mag-card recipes
Spoiler
Mag-card recipe:Like with RFID cards, you can craft a card with any dye to change its colour.
Mag-card device recipe:
Speaker
Spoiler
Speaker blockThis is a peripheral that plays square waves.
Speaker peripheral API
There are two main parts to the API, the "simple API" (which lets you control the speaker directly) and the "Forth API" (which lets you upload a program to be run on clients). If you don't know Forth, don't use that part of the API - it's an advanced feature.
Simple API, if "speaker" is the wrapped speaker:
speaker.shutdown() - stops playing and stops all playing sounds
speaker.setAttenuation(db) - sets the attenuation (negative volume) in dB. A good default seems to be 20.
speaker.start(channel, frequency) - starts playing a square wave
speaker.stop(channel) - stops playing a square wave
There are 8 channels, numbered from 0 to 7.Forth information
Speaker recipe
LAN cables
Spoiler
Despite the name, these will work over any distance - even through unloaded chunks.Network data is stored in (your world folder)/data/immibis's-peripherals-networks.dat - if you delete this, you'll need to break and replace every cable and modem before they'll work again.
LAN modem
This peripheral is the interface between a network and a computer. It must be placed on the side of a block, but will stay even if that block is removed - this allows it to be used with turtles.
LAN cable
This is the cable you can use to connect modems together.
Modem recipe
Cable recipe
This uses blue wool, not lapis blocks!
LAN messages
LAN messages are strings, similar to rednet.
Each modem can send a maximum of 10 messages per second, regardless of size, and stores up to 25 unsent messages - if you try to send more, you will receive a "Buffer full" error.
Each LAN message is addressed to a channel.
There are 128 channels which any computer can listen to, numbered from 1 to 128 ("positive channels").
By default, a computer listens to channel 1, and no other positive channels.
Channel numbers can also be below 1 ("negative channels"). If a message is addressed to a negative channel, it is received by the computer with that ID (eg, messages addressed to -5 will be received by computer 5) and also to any modems that are in "promiscuous mode," which can be set using a peripheral function.
LAN messages also carry a sender ID. Sender IDs can be faked, unless disabled in the config.
Modem API
If "modem" is a wrapped modem:
modem.send(message) - sends a message on the default channel
modem.sendChannel(channel, message) - sends a message on a channel
modem.sendFrom(channel, sender, message) - sends a message on a channel with a faked sender ID
modem.setDefaultChannel(channel) - sets the default channel for this modem
modem.getDefaultChannel() - returns the default channel for this modem
modem.setPromiscuous(boolean) - sets or clears promiscuous mode for this modem
modem.getPromiscuous() - returns true if this modem is in promiscuous mode, or false otherwise.
modem.setListening(channel, state) - starts or stops listening on a channel. state is a boolean. channel must be in the range 1 to 128.
modem.getListening(channel) - returns true if this modem is listening on a channel, or false otherwise. channel can be any number.
When a message is received, you get a lan_message event with the arguments: modem side, sender ID, channel, messageCryptographic accelerator
Spoiler
This peripheral allows your programs to easily encrypt and decrypt things.
If you'd rather people have to write their own encryption programs, you can easily disable the recipe in the config.
Recipe
The middle slot must have 64 items. All 64 will be consumed.
This recipe will not work with automatic crafting devices.
Alternate recipe
This recipe is compatible with automatic crafting devices.
API
API documentation
Example program
Adventure map interface
Spoiler
This is like the Operator Panel or Adventure Map Peripheral, but with more stuff. It lets your computer programs edit the world.It won't do anything if disabled in the config. Disabled by default in SMP. Uncraftable of course.
API documentation
Known bugs
The volume control (in the options menu) works a bit weirdly on the speaker, as it bypasses Minecraft's normal sound system.
Speakers can cause the client to freeze for a few seconds once per game start (possibly because it's loading something inside Java Sound)
The speaker "cone" can change brightness randomly.
License
Spoiler
Copyright (c) 2012 Alex "immibis" Campbell
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
And almost forgot, a lot of the ideas and most of the textures were by ozbar11. The code was by me.