<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://www.computercraft.info/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dadmob18</id>
		<title>ComputerCraft Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://www.computercraft.info/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dadmob18"/>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/Special:Contributions/Dadmob18"/>
		<updated>2026-07-11T07:38:55Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle.transferTo&amp;diff=3696</id>
		<title>Turtle.transferTo</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle.transferTo&amp;diff=3696"/>
				<updated>2012-11-13T04:32:38Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: Forgot to login on the last three changes-- they were mine, too&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=turtle.transferTo&lt;br /&gt;
|args=slot, quantity &lt;br /&gt;
|returns=bool &amp;quot;success&amp;quot;&lt;br /&gt;
|api=turtle&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Transfers items from the selected slot to the specified slot in the quantity given.  If the [quantity] argument is omitted, tries to transfer all the items from the selected slot.  If the destination slot already has items of a different type, returns false (does not try to fill the next slot, like suck() would).  If there are fewer than [quantity] items in the selected slot or only room for fewer items in the destination slot, transfers as many as possible and returns true.  If none can be transferred, returns false.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Transfers 32 items from the selected slot to slot 6.&lt;br /&gt;
|code=turtle.transferTo(6, 32)&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
This function came available in version 1.45&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle.placeDown&amp;diff=3374</id>
		<title>Turtle.placeDown</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle.placeDown&amp;diff=3374"/>
				<updated>2012-10-11T13:41:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: returns bool&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=turtle.placeDown&lt;br /&gt;
|args=&lt;br /&gt;
|api=turtle&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Places a Block of the selected Slot below &lt;br /&gt;
|returns=[[boolean]] whether the turtle succeeded in placing the block.  False if selected slot is empty, or if there is already a block below.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Places a Block of the selected Slot below &lt;br /&gt;
|code=turtle.placeDown()&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle.placeUp&amp;diff=3373</id>
		<title>Turtle.placeUp</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle.placeUp&amp;diff=3373"/>
				<updated>2012-10-11T13:41:02Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: returns bool&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=turtle.placeUp&lt;br /&gt;
|args=&lt;br /&gt;
|api=turtle&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Places a Block of the selected Slot above&lt;br /&gt;
|returns=[[boolean]] whether the turtle succeeded in placing the block.  False if selected slot is empty, or if there is already a block above.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Places a Block of the selected Slot above&lt;br /&gt;
|code=turtle.placeUp()&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle.place&amp;diff=3372</id>
		<title>Turtle.place</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle.place&amp;diff=3372"/>
				<updated>2012-10-11T13:40:10Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=turtle.place&lt;br /&gt;
|args=&lt;br /&gt;
|api=turtle&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|returns=[[boolean]] whether the turtle succeeded in placing the block.  False if selected slot is empty, or if there is already a block in front.&lt;br /&gt;
|desc=Places the selected block in front of the Turtle. Add [signText] to sign if given.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Places the selected block in front of the Turtle.&lt;br /&gt;
|code=turtle.place()&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle.place&amp;diff=3371</id>
		<title>Turtle.place</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle.place&amp;diff=3371"/>
				<updated>2012-10-11T13:39:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: returns bool&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=turtle.place&lt;br /&gt;
|args=&lt;br /&gt;
|api=turtle&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|returns=[[boolean]] whether the turtle succeeded in placing the block.  False if empty inventory, or if already a block in front.&lt;br /&gt;
|desc=Places the selected block in front of the Turtle. Add [signText] to sign if given.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Places the selected block in front of the Turtle.&lt;br /&gt;
|code=turtle.place()&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle_(API)&amp;diff=3370</id>
		<title>Turtle (API)</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle_(API)&amp;diff=3370"/>
				<updated>2012-10-11T13:36:15Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: Place does return a bool result, not nil&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Turtle API is used to work with your Turtles.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0|&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &amp;lt;center&amp;gt;&amp;lt;b&amp;gt;KEY&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Color&lt;br /&gt;
! Turtles that can perform this&lt;br /&gt;
|-&lt;br /&gt;
|White&lt;br /&gt;
|All&lt;br /&gt;
|-{{row-lightgreen}}&lt;br /&gt;
|Green&lt;br /&gt;
|Crafty&lt;br /&gt;
|-{{row-lightyellow}}&lt;br /&gt;
|Yellow&lt;br /&gt;
|Mining, Felling, Digging, Farming&lt;br /&gt;
|-{{row-lightred}}&lt;br /&gt;
|Red&lt;br /&gt;
|Any tool&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!-- ##################&lt;br /&gt;
To add additional colors, visit Template:row-lightgreen, copy the source, do a search for Template:row-yourcolor and hit Create Page. ################## --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0|&amp;quot;&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;100px&amp;quot;|Return&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;200px&amp;quot;|Method name&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;*&amp;quot;|Description&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;*&amp;quot;|Min version&lt;br /&gt;
|-{{row-lightgreen}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.craft]]()&lt;br /&gt;
|Craft items using ingredients anywhere in the Turtle's inventory and place results in the active slot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.forward]]()&lt;br /&gt;
|Let the Turtle move forward&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.back]]()&lt;br /&gt;
|Let the Turtle move back&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.up]]()&lt;br /&gt;
|Let the Turtle move up&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.down]]()&lt;br /&gt;
|Let the Turtle move down &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;true&amp;quot;&lt;br /&gt;
|[[turtle.turnLeft]]()&lt;br /&gt;
|The Turtle turns left&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;true&amp;quot;&lt;br /&gt;
|[[turtle.turnRight]]()&lt;br /&gt;
|The Turtle turns right&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;slot &amp;gt; 16&amp;quot;&lt;br /&gt;
|[[turtle.select]]( slotNum )&lt;br /&gt;
|The Turtle selects the given Slot (1 is top left, 16 (9 in 1.33 and earlier) is bottom right)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|int &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.getItemCount]]( slotNum )&lt;br /&gt;
|Counts how many items are in the given Slot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|int &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.getItemSpace]]( slotNum )&lt;br /&gt;
|Counts how many remaining items you need to fill the stack in the given Slot&lt;br /&gt;
|&lt;br /&gt;
|-{{row-lightred}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.attack]]()&lt;br /&gt;
|Attacks in front of the turtle.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-{{row-lightred}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot; &lt;br /&gt;
|[[turtle.attackUp]]()&lt;br /&gt;
|Attacks over the turtle.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-{{row-lightred}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.attackDown]]()&lt;br /&gt;
|Attacks under the turtle.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-{{row-lightyellow}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.dig]]()&lt;br /&gt;
|Breaks the Block in front. With hoe: tills the dirt in front of it.&lt;br /&gt;
|&lt;br /&gt;
|-{{row-lightyellow}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.digUp]]()&lt;br /&gt;
|Breaks the Block above. With hoe: tills the dirt above it.&lt;br /&gt;
|&lt;br /&gt;
|-{{row-lightyellow}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.digDown]]()&lt;br /&gt;
|Breaks the Block below. With hoe: tills the dirt below it.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.place]]( [signText] )&lt;br /&gt;
|Places a Block of the selected slot in front. Engrave [signText] on signs if provided.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.placeUp]]()&lt;br /&gt;
|Places a Block of the selected slot above&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.placeDown]]()&lt;br /&gt;
|Places a Block of the selected slot below&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.detect]]()&lt;br /&gt;
|Detects if there is a Block in front.  Does not detect mobs.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.detectUp]]()&lt;br /&gt;
|Detects if there is a Block above&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.detectDown]]()&lt;br /&gt;
|Detects if there is a Block below&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.compare]]()&lt;br /&gt;
|Detects if the block in front is the same as the one in the currently selected slot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.compareUp]]()&lt;br /&gt;
|Detects if the block above is the same as the one in the currently selected slot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.compareDown]]()&lt;br /&gt;
|Detects if the block below is the same as the one in the currently selected slot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.compareTo]]( [slot] )&lt;br /&gt;
|Compare the current selected slot and the given slot to see if the items are the same, yields true if they are the same, and false if not.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.drop]]( [count] )&lt;br /&gt;
|Drops all items in the selected slot, or if [count] is specified, drops that many items.&amp;lt;br /&amp;gt;[&amp;gt;= 1.4 only:] If there is a inventory on the side (i.e in front of the turtle) it will try to place into the inventory, returning false if the inventory is full.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.drop|turtle.dropUp]]( [count] )&lt;br /&gt;
|Drops all items in the selected slot, or if [count] is specified, drops that many items.&amp;lt;br /&amp;gt;[&amp;gt;= 1.4 only:] If there is a inventory on the side (i.e above the turtle) it will try to place into the inventory, returning false if the inventory is full. If below a furnace, will place item in the bottom slot.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.drop|turtle.dropDown]]( [count] )&lt;br /&gt;
|Drops all items in the selected slot, or if [count] is specified, drops that many items.&amp;lt;br /&amp;gt;[&amp;gt;= 1.4 only:] If there is a inventory on the side (i.e below the turtle) it will try to place into the inventory, returning false if the inventory is full. If above a furnace, will place item in the top slot.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.suck]]()&lt;br /&gt;
|Picks up an item stack of any number, from the ground or an inventory in front of the turtle. If the turtle can't pick up the item, the function yields false.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.suckUp]]()&lt;br /&gt;
|Picks up an item stack of any number, from the ground or an inventory above the turtle. If the turtle can't pick up the item, the function yields false.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.suckDown]]()&lt;br /&gt;
|Picks up an item stack of any number, from the ground or an inventory below the turtle. If the turtle can't pick up the item, the function yields false.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.refuel]]([quantity])&lt;br /&gt;
|If the current selected slot contains a fuel item, it will consume it to give the turtle the ability to move.&amp;lt;br /&amp;gt;Added in 1.4  and is only needed in needfuel mode. If the current slot doesn't contain a fuel item, it yields false. Fuel values for different items can be found at [[Turtle.refuel#Fuel_Values]]. If a quantity is specified, it will refuel only up to that many items, otherwise, it will consume all the items in the slot.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|int &amp;quot;fuel&amp;quot;&lt;br /&gt;
|[[turtle.getFuelLevel]]()&lt;br /&gt;
|Returns the current fuel level of the turtle, this is the number of blocks the turtle can move.&amp;lt;br /&amp;gt;If turtleNeedFuel = 0 then it yields &amp;quot;unlimited&amp;quot;.&lt;br /&gt;
| 1.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Trivia:&lt;br /&gt;
During the 1.4 beta, turtle.getFuelLevel() in softcore(that is now turtleneedsfuel = 0) returned 9000.&lt;br /&gt;
[[Category:APIs]]&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Rednet.send&amp;diff=3356</id>
		<title>Rednet.send</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Rednet.send&amp;diff=3356"/>
				<updated>2012-10-08T20:43:36Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=rednet.send&lt;br /&gt;
|args=[[int]] receiverID, [[string]] message, [[boolean]] WaitUntilPortOpen&lt;br /&gt;
|returns=[[boolean]] success code. True if a message has been sent, false if not. &amp;quot;true&amp;quot; does not guarantee, that the destination was reachable!&lt;br /&gt;
|api=rednet&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Sends a message to a specific Computer or Turtle. (see [[rednet.broadcast( message )]] and [[rednet.receive( timeout )]].&amp;lt;br /&amp;gt;To get the id from a computer see [[os.computerID()]]. Setting WaitUntilPortOpen to True can help when the server is not receiving a response from the responding client.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Sends a Message to the Computer with the ID 22 (assuming a modem is attached and open), and will wait until the port is available to use.&lt;br /&gt;
|code=rednet.send(22,&amp;quot;ComputerCraft&amp;quot;, true)&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle.dig&amp;diff=3331</id>
		<title>Turtle.dig</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle.dig&amp;diff=3331"/>
				<updated>2012-10-07T20:46:17Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=turtle.dig&lt;br /&gt;
|args=&lt;br /&gt;
|api=turtle&lt;br /&gt;
|returns=[[boolean]] whether the turtle succeeded in digging.&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Attempts to dig the block in front of the turtle.  If successful, [[Turtle.suck|suck()]] is automatically called, placing the item in turtle inventory in the selected slot if possible (block type matches and the slot is not a full stack yet), or in the next available slot.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Digs the block in front of the turtle.&lt;br /&gt;
|code=[[print]](turtle.dig())&lt;br /&gt;
|output=true if the turtle could dig the block, false if it could not or no block present.&lt;br /&gt;
}}&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Digs the block in front of the turtle, but only if there is a block to dig (saves time).&lt;br /&gt;
|code=if [[turtle.detect]]() then&lt;br /&gt;
  turtle.dig()&lt;br /&gt;
 end&lt;br /&gt;
|output=the turtle digs if there is a block in front.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle.dig&amp;diff=3330</id>
		<title>Turtle.dig</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle.dig&amp;diff=3330"/>
				<updated>2012-10-07T20:44:39Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=turtle.dig&lt;br /&gt;
|args=&lt;br /&gt;
|api=turtle&lt;br /&gt;
|returns=[[boolean]] whether the turtle succeeded in digging.&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Attempts to dig the block in front of the turtle.  If successful, [[Turtle.suck|suck()]] is automatically called, placing the item in turtle inventory in the selected slot if possible, or in the next available slot.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Digs the block in front of the turtle.&lt;br /&gt;
|code=[[print]](turtle.dig())&lt;br /&gt;
|output=true if the turtle could dig the block, false if it could not or no block present.&lt;br /&gt;
}}&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Digs the block in front of the turtle, but only if there is a block to dig (saves time).&lt;br /&gt;
|code=if [[turtle.detect]]() then&lt;br /&gt;
  turtle.dig()&lt;br /&gt;
 end&lt;br /&gt;
|output=the turtle digs if there is a block in front.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle.detect&amp;diff=3318</id>
		<title>Turtle.detect</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle.detect&amp;diff=3318"/>
				<updated>2012-10-06T16:57:51Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=turtle.detect&lt;br /&gt;
|args=&lt;br /&gt;
|api=turtle&lt;br /&gt;
|returns=[[boolean]] If turtle has Detected a Block in front.&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Detects if there is a Block in front.  Does not detect mobs or liquids or floating items.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Detects if there is a Block in front and digs it out.&lt;br /&gt;
|code= if turtle.detect() then &amp;lt;br&amp;gt;    turtle.dig() &amp;lt;br&amp;gt;end&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle.detect&amp;diff=3317</id>
		<title>Turtle.detect</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle.detect&amp;diff=3317"/>
				<updated>2012-10-06T16:57:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=turtle.detect&lt;br /&gt;
|args=&lt;br /&gt;
|api=turtle&lt;br /&gt;
|returns=[[boolean]] If turtle has Detected a Block in front.&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Detects if there is a Block in front.  Does not detect mobs or liquids.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Detects if there is a Block in front and digs it out.&lt;br /&gt;
|code= if turtle.detect() then &amp;lt;br&amp;gt;    turtle.dig() &amp;lt;br&amp;gt;end&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Turtle_(API)&amp;diff=3316</id>
		<title>Turtle (API)</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Turtle_(API)&amp;diff=3316"/>
				<updated>2012-10-06T16:55:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Turtle API is used to work with your Turtles.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0|&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &amp;lt;center&amp;gt;&amp;lt;b&amp;gt;KEY&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Color&lt;br /&gt;
! Turtles that can perform this&lt;br /&gt;
|-&lt;br /&gt;
|White&lt;br /&gt;
|All&lt;br /&gt;
|-{{row-lightgreen}}&lt;br /&gt;
|Green&lt;br /&gt;
|Crafty&lt;br /&gt;
|-{{row-lightyellow}}&lt;br /&gt;
|Yellow&lt;br /&gt;
|Mining, Felling, Digging, Farming&lt;br /&gt;
|-{{row-lightred}}&lt;br /&gt;
|Red&lt;br /&gt;
|Any tool&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!-- ##################&lt;br /&gt;
To add additional colors, visit Template:row-lightgreen, copy the source, do a search for Template:row-yourcolor and hit Create Page. ################## --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0|&amp;quot;&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;100px&amp;quot;|Return&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;200px&amp;quot;|Method name&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;*&amp;quot;|Description&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;*&amp;quot;|Min version&lt;br /&gt;
|-{{row-lightgreen}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.craft]]()&lt;br /&gt;
|Craft items using ingredients in the nine upper left slots&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.forward]]()&lt;br /&gt;
|Let the Turtle move forward&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.back]]()&lt;br /&gt;
|Let the Turtle move back&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.up]]()&lt;br /&gt;
|Let the Turtle move up&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.down]]()&lt;br /&gt;
|Let the Turtle move down &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;true&amp;quot;&lt;br /&gt;
|[[turtle.turnLeft]]()&lt;br /&gt;
|The Turtle turns left&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;true&amp;quot;&lt;br /&gt;
|[[turtle.turnRight]]()&lt;br /&gt;
|The Turtle turns right&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;slot &amp;gt; 16&amp;quot;&lt;br /&gt;
|[[turtle.select]]( slotNum )&lt;br /&gt;
|The Turtle selects the given Slot (1 is top left, 16 (9 in 1.33 and earlier) is bottom right)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|int &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.getItemCount]]( slotNum )&lt;br /&gt;
|Counts how many items are in the given Slot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|int &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.getItemSpace]]( slotNum )&lt;br /&gt;
|Counts how many remaining items you need to fill the stack in the given Slot&lt;br /&gt;
|&lt;br /&gt;
|-{{row-lightred}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.attack]]()&lt;br /&gt;
|Attacks in front of the turtle.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-{{row-lightred}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot; &lt;br /&gt;
|[[turtle.attackUp]]()&lt;br /&gt;
|Attacks over the turtle.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-{{row-lightred}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.attackDown]]()&lt;br /&gt;
|Attacks under the turtle.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-{{row-lightyellow}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.dig]]()&lt;br /&gt;
|Breaks the Block in front. With hoe: tills the dirt in front of it.&lt;br /&gt;
|&lt;br /&gt;
|-{{row-lightyellow}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.digUp]]()&lt;br /&gt;
|Breaks the Block above. With hoe: tills the dirt above it.&lt;br /&gt;
|&lt;br /&gt;
|-{{row-lightyellow}}&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.digDown]]()&lt;br /&gt;
|Breaks the Block below. With hoe: tills the dirt below it.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|nil&lt;br /&gt;
|[[turtle.place]]( [signText] )&lt;br /&gt;
|Places a Block of the selected slot in front. Engrave [signText] on signs if provided.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|nil&lt;br /&gt;
|[[turtle.placeUp]]()&lt;br /&gt;
|Places a Block of the selected slot above&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|nil&lt;br /&gt;
|[[turtle.placeDown]]()&lt;br /&gt;
|Places a Block of the selected slot below&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.detect]]()&lt;br /&gt;
|Detects if there is a Block in front.  Does not detect mobs.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.detectUp]]()&lt;br /&gt;
|Detects if there is a Block above&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.detectDown]]()&lt;br /&gt;
|Detects if there is a Block below&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.compare]]()&lt;br /&gt;
|Detects if the block in front is the same as the one in the currently selected slot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.compareUp]]()&lt;br /&gt;
|Detects if the block above is the same as the one in the currently selected slot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.compareDown]]()&lt;br /&gt;
|Detects if the block below is the same as the one in the currently selected slot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;result&amp;quot;&lt;br /&gt;
|[[turtle.compareTo]]( [slot] )&lt;br /&gt;
|Compare the current selected slot and the given slot to see if the items are the same, yields true if they are the same, and false if not.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.drop]]( [count] )&lt;br /&gt;
|Drops all items in the selected slot, or if [count] is specified, drops that many items.&amp;lt;br /&amp;gt;[&amp;gt;= 1.4 only:] If there is a inventory on the side (i.e in front of the turtle) it will try to place into the inventory, returning false if the inventory is full.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.drop|turtle.dropUp]]( [count] )&lt;br /&gt;
|Drops all items in the selected slot, or if [count] is specified, drops that many items.&amp;lt;br /&amp;gt;[&amp;gt;= 1.4 only:] If there is a inventory on the side (i.e above the turtle) it will try to place into the inventory, returning false if the inventory is full. If below a furnace, will place item in the bottom slot.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.drop|turtle.dropDown]]( [count] )&lt;br /&gt;
|Drops all items in the selected slot, or if [count] is specified, drops that many items.&amp;lt;br /&amp;gt;[&amp;gt;= 1.4 only:] If there is a inventory on the side (i.e below the turtle) it will try to place into the inventory, returning false if the inventory is full. If above a furnace, will place item in the top slot.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.suck]]()&lt;br /&gt;
|Picks up an item stack of any number, from the ground or an inventory in front of the turtle. If the turtle can't pick up the item, the function yields false.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.suckUp]]()&lt;br /&gt;
|Picks up an item stack of any number, from the ground or an inventory above the turtle. If the turtle can't pick up the item, the function yields false.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.suckDown]]()&lt;br /&gt;
|Picks up an item stack of any number, from the ground or an inventory below the turtle. If the turtle can't pick up the item, the function yields false.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|bool &amp;quot;success&amp;quot;&lt;br /&gt;
|[[turtle.refuel]]([quantity])&lt;br /&gt;
|If the current selected slot contains a fuel item, it will consume it to give the turtle the ability to move.&amp;lt;br /&amp;gt;Added in 1.4  and is only needed in needfuel mode. If the current slot doesn't contain a fuel item, it yields false. Fuel values for different items can be found at [[Turtle.refuel#Fuel_Values]]. If a quantity is specified, it will refuel only up to that many items, otherwise, it will consume all the items in the slot.&lt;br /&gt;
| 1.4&lt;br /&gt;
|-&lt;br /&gt;
|int &amp;quot;fuel&amp;quot;&lt;br /&gt;
|[[turtle.getFuelLevel]]()&lt;br /&gt;
|Returns the current fuel level of the turtle, this is the number of blocks the turtle can move.&amp;lt;br /&amp;gt;If turtleNeedFuel = 0 then it yields &amp;quot;unlimited&amp;quot;.&lt;br /&gt;
| 1.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Trivia:&lt;br /&gt;
During the 1.4 beta, turtle.getFuelLevel() in softcore(that is now turtleneedsfuel = 0) returned 9000.&lt;br /&gt;
[[Category:APIs]]&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3293</id>
		<title>Textutils.serialize</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3293"/>
				<updated>2012-10-04T16:19:06Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=textutils.serialize&lt;br /&gt;
|args= [[Table (type)|anything]]&lt;br /&gt;
|returns=a string representing the object&lt;br /&gt;
|api=textutils&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Converts the object to a string that can be saved in a file or sent over rednet and then converted back into a copy of the object later, using [[textutils.unserialize|unserialize]].   Nested structures are supported, but tables with circular graphs will be detected and raise an error.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Sends a table over rednet, demonstrates object recovery&lt;br /&gt;
|code=myThing={name=&amp;quot;Test&amp;quot;, n=2}&lt;br /&gt;
 sThing=textutils.serialize(myThing)&lt;br /&gt;
 [[rednet.send]](receiverID, sThing)  -- assuming you have rednet open and receiverID has a useful value&lt;br /&gt;
 myCopy=[[textutils.unserialize]](sThing)&lt;br /&gt;
 print(myCopy.name)&lt;br /&gt;
|output=Test&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Textutils.unserialize&amp;diff=3292</id>
		<title>Textutils.unserialize</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Textutils.unserialize&amp;diff=3292"/>
				<updated>2012-10-04T16:17:33Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: Created page with &amp;quot;{{lowercase}} {{Function |name=textutils.unserialize |args= serialized |returns=a copy of the original object that was serialized |api=textutils |addon=Compu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=textutils.unserialize&lt;br /&gt;
|args= [[string (type)|serialized]]&lt;br /&gt;
|returns=a copy of the original object that was serialized&lt;br /&gt;
|api=textutils&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Converts the serialized string back into an object.  The string shoudl have been created using [[textutils.serialize()|serialize]].   Note, the representation used by textutils actually creates Lua syntax, so that [loadstring] will also work to deserialize.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3291</id>
		<title>Textutils.serialize</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3291"/>
				<updated>2012-10-04T16:14:19Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=textutils.serialize&lt;br /&gt;
|args= [[Table (type)|anything]]&lt;br /&gt;
|returns=a string representing the object&lt;br /&gt;
|api=textutils&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Converts the object to a string that can be saved in a file or sent over rednet and then converted back into a copy of the object later, using [[textutils.unserialize()|unserialize]].   Nested structures are supported, but tables with circular graphs will be detected and raise an error.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Sends a table over rednet, demonstrates object recovery&lt;br /&gt;
|code=myThing={name=&amp;quot;Test&amp;quot;, n=2}&lt;br /&gt;
 sThing=textutils.serialize(myThing)&lt;br /&gt;
 [[rednet.send]](receiverID, sThing)  -- assuming you have rednet open and receiverID has a useful value&lt;br /&gt;
 myCopy=[[textutils.unserialize]](sThing)&lt;br /&gt;
 print(myCopy.name)&lt;br /&gt;
|output=Test&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3290</id>
		<title>Textutils.serialize</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3290"/>
				<updated>2012-10-04T16:11:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=textutils.serialize&lt;br /&gt;
|args= [[Table (type)|anything]]&lt;br /&gt;
|returns=a string representing the object&lt;br /&gt;
|api=textutils&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Converts the object to a string that can be saved in a file or sent over rednet and then converted back into a copy of the object later, using [[textutils.unserialize()|unserialize]].   Nested structures are supported, but tables with circular graphs will be detected and raise an error.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Sends a table over rednet, demonstrates object recovery&lt;br /&gt;
|code=myThing={name=&amp;quot;Test&amp;quot;, n=2}&lt;br /&gt;
 sThing=textutils.serialize(myThing)&lt;br /&gt;
 [[rednet.send]](receiverID, sThing)&lt;br /&gt;
 myCopy=[[textutils.unserialize]](sThing)&lt;br /&gt;
 print(myCopy.name)&lt;br /&gt;
|output=Test&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Table_(type)&amp;diff=3289</id>
		<title>Table (type)</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Table_(type)&amp;diff=3289"/>
				<updated>2012-10-04T16:09:31Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: Created page with &amp;quot;A table is a basic Lua type that is an associative array, or map, that associates keys with values.  It can be indexed either with numbers, like a plain array, or with any kin...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A table is a basic Lua type that is an associative array, or map, that associates keys with values.  It can be indexed either with numbers, like a plain array, or with any kind of value (except nil), such as a string.&lt;br /&gt;
&lt;br /&gt;
See [[Tables]]&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3288</id>
		<title>Textutils.serialize</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3288"/>
				<updated>2012-10-04T16:05:50Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=textutils.serialize&lt;br /&gt;
|args= [[Table (type)|anything]]&lt;br /&gt;
|returns=a string representing the object&lt;br /&gt;
|api=textutils&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Converts the object to a string that can be saved or sent and then converted back into a copy of the object later, using [[textutils.unserialize()|unserialize]].   Nested structures are supported, but tables with circular graphs will be detected and raise an error.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Sends a table over rednet, demonstrates object recovery&lt;br /&gt;
|code=myThing={name=&amp;quot;Test&amp;quot;, n=2}&lt;br /&gt;
 sThing=textutils.serialize(myThing)&lt;br /&gt;
 [[rednet.send]](receiverID, sThing)&lt;br /&gt;
 myCopy=[[textutils.unserialize]](sThing)&lt;br /&gt;
 print(myCopy.name)&lt;br /&gt;
|output=Test&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3287</id>
		<title>Textutils.serialize</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3287"/>
				<updated>2012-10-04T16:02:15Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=textutils.serialize&lt;br /&gt;
|args= [[Table|anything]]&lt;br /&gt;
|returns=a string representing the object&lt;br /&gt;
|api=textutils&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Converts the object to a string that can be saved or sent and then converted back into a copy of the object later, using [[textutils.unserialize()|unserialize]].   Nested structures are supported, but tables with circular graphs will be detected and raise an error.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Sends a table over rednet, demonstrates object recovery&lt;br /&gt;
|code=myThing={name=&amp;quot;Test&amp;quot;, n=2}&lt;br /&gt;
 sThing=textutils.serialize(myThing)&lt;br /&gt;
 [[rednet.send]](receiverID, sThing)&lt;br /&gt;
 myCopy=[[textutils.unserialize]](sThing)&lt;br /&gt;
 print(myCopy.name)&lt;br /&gt;
|output=Test&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3286</id>
		<title>Textutils.serialize</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3286"/>
				<updated>2012-10-04T15:59:35Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=textutils.serialize&lt;br /&gt;
|args= [[table (type)|anything]]&lt;br /&gt;
|returns=a string representing the object&lt;br /&gt;
|api=textutils&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Converts the object to a string that can be saved or sent and then converted back into a copy of the object later, using [[textutils.unserialize()|unserialize]].   Nested structures are supported, but tables with circular graphs will be detected and raise an error.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Sends a table over rednet, demonstrates object recovery&lt;br /&gt;
|code=myThing={name=&amp;quot;Test&amp;quot;, n=2}&lt;br /&gt;
sThing=textutils.serialize(myThing)&lt;br /&gt;
[[rednet.send]](receiverID, sThing)&lt;br /&gt;
myCopy=[[textutils.unserialize]](sThing)&lt;br /&gt;
print(myCopy.name)&lt;br /&gt;
|output=Test&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3285</id>
		<title>Textutils.serialize</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3285"/>
				<updated>2012-10-04T15:55:18Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=textutils.serialize&lt;br /&gt;
|args= [[table (type)|anything]]&lt;br /&gt;
|returns=a string representing the object&lt;br /&gt;
|api=textutils&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Converts the object to a string that can be saved or sent and then converted back into a copy of the object later, using [[textutils.unserialize()|unserialize]].   Nested structures are supported, but tables with circular graphs will be detected and raise an error.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Sends a table over rednet&lt;br /&gt;
|code=myThing={name=&amp;quot;Test&amp;quot;, n=2}&amp;lt;br&amp;gt;sThing=textutils.serialize(myThing)&amp;lt;br&amp;gt;rednet.send(receiverID, sThing)&amp;lt;br&amp;gt;myCopy=textutils.unserialize(sThing)&amp;lt;br&amp;gt;print(myCopy.name)&lt;br /&gt;
|output=Test&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3284</id>
		<title>Textutils.serialize</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Textutils.serialize&amp;diff=3284"/>
				<updated>2012-10-04T15:54:06Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: Created page with &amp;quot;{{lowercase}} {{Function |name=textutils.serialize |args= anything |returns=a string representing the object |api=textutils |addon=ComputerCraft |desc=Convert...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=textutils.serialize&lt;br /&gt;
|args= [[table (type)|anything]]&lt;br /&gt;
|returns=a string representing the object&lt;br /&gt;
|api=textutils&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Converts the object to a string that can be saved or sent and then converted back into a copy of the object later, using [[textutils.unserialize()|unserialize]].   Nested structures are supported, but tables with circular graphs will be detected an raise an error.&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Sends a table over rednet&lt;br /&gt;
|code=myThing={name=&amp;quot;Test&amp;quot;, n=2}&amp;lt;br&amp;gt;sThing=textutils.serialize(myThing)&amp;lt;br&amp;gt;rednet.send(receiverID, sThing)&amp;lt;br&amp;gt;myCopy=textutils.unserialize(sThing)&amp;lt;br&amp;gt;print(myCopy.name)&lt;br /&gt;
|output=Test&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Recipes&amp;diff=3282</id>
		<title>Recipes</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Recipes&amp;diff=3282"/>
				<updated>2012-10-04T00:05:23Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;200px&amp;quot;|Item&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;*&amp;quot;|Crafting ingredients&lt;br /&gt;
|-&lt;br /&gt;
|[[Computer]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone           |C1=stone&lt;br /&gt;
 |A2=stone |B2=redstone_dust   |C2=stone&lt;br /&gt;
 |A3=stone |B3=glass_pane      |C3=stone&lt;br /&gt;
 |Output=console&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Modem]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone          |C1=stone&lt;br /&gt;
 |A2=stone |B2=redstone_torch |C2=stone&lt;br /&gt;
 |A3=stone |B3=stone          |C3=stone&lt;br /&gt;
 |Output=modem&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Disk Drive]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone         |C1=stone&lt;br /&gt;
 |A2=stone |B2=redstone_dust |C2=stone&lt;br /&gt;
 |A3=stone |B3=redstone_dust |C3=stone&lt;br /&gt;
 |Output=disk_drive&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Floppy Disk]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |B1=redstone_dust&lt;br /&gt;
 |B2=paper&lt;br /&gt;
 |Output=disk&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Turtle]] (and see [[Turtle#Recipes|Turtle recipes]])&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=iron_ingot |B1=iron_ingot    |C1=iron_ingot&lt;br /&gt;
 |A2=iron_ingot |B2=console       |C2=iron_ingot&lt;br /&gt;
 |A3=iron_ingot |B3=chest         |C3=iron_ingot&lt;br /&gt;
 |Output=turtle&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|Mining [[Turtle]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A2=turtle |B2=diamond_pickaxe&lt;br /&gt;
 |Output=mining_turtle&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|Wireless [[Turtle]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A2=turtle |B2=modem&lt;br /&gt;
 |Output=wireless_turtle&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|Wireless Mining [[Turtle]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A2=diamond_pickaxe |B2=turtle |C2=modem&lt;br /&gt;
 |Output=wireless_mining_turtle&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Monitor]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone      |C1=stone&lt;br /&gt;
 |A2=stone |B2=glass_pane |C2=stone&lt;br /&gt;
 |A3=stone |B3=stone      |C3=stone&lt;br /&gt;
 |Output=screen&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Printer]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone         |C1=stone&lt;br /&gt;
 |A2=stone |B2=redstone_dust |C2=stone&lt;br /&gt;
 |A3=stone |B3=Ink_Sac |C3=stone&lt;br /&gt;
 |Output=printer&lt;br /&gt;
 }}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Recipes&amp;diff=3281</id>
		<title>Recipes</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Recipes&amp;diff=3281"/>
				<updated>2012-10-04T00:04:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;200px&amp;quot;|Item&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;*&amp;quot;|Crafting ingredients&lt;br /&gt;
|-&lt;br /&gt;
|[[Computer]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone           |C1=stone&lt;br /&gt;
 |A2=stone |B2=redstone_dust   |C2=stone&lt;br /&gt;
 |A3=stone |B3=glass_pane      |C3=stone&lt;br /&gt;
 |Output=console&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Modem]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone          |C1=stone&lt;br /&gt;
 |A2=stone |B2=redstone_torch |C2=stone&lt;br /&gt;
 |A3=stone |B3=stone          |C3=stone&lt;br /&gt;
 |Output=modem&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Disk Drive]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone         |C1=stone&lt;br /&gt;
 |A2=stone |B2=redstone_dust |C2=stone&lt;br /&gt;
 |A3=stone |B3=redstone_dust |C3=stone&lt;br /&gt;
 |Output=disk_drive&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Floppy Disk]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |B1=redstone_dust&lt;br /&gt;
 |B2=paper&lt;br /&gt;
 |Output=disk&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Turtle]] (and see [[Turtle#recipes|Turtle recipes]])&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=iron_ingot |B1=iron_ingot    |C1=iron_ingot&lt;br /&gt;
 |A2=iron_ingot |B2=console       |C2=iron_ingot&lt;br /&gt;
 |A3=iron_ingot |B3=chest         |C3=iron_ingot&lt;br /&gt;
 |Output=turtle&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|Mining [[Turtle]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A2=turtle |B2=diamond_pickaxe&lt;br /&gt;
 |Output=mining_turtle&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|Wireless [[Turtle]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A2=turtle |B2=modem&lt;br /&gt;
 |Output=wireless_turtle&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|Wireless Mining [[Turtle]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A2=diamond_pickaxe |B2=turtle |C2=modem&lt;br /&gt;
 |Output=wireless_mining_turtle&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Monitor]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone      |C1=stone&lt;br /&gt;
 |A2=stone |B2=glass_pane |C2=stone&lt;br /&gt;
 |A3=stone |B3=stone      |C3=stone&lt;br /&gt;
 |Output=screen&lt;br /&gt;
 }}&lt;br /&gt;
|-&lt;br /&gt;
|[[Printer]]&lt;br /&gt;
|{{Crafting grid&lt;br /&gt;
 |A1=stone |B1=stone         |C1=stone&lt;br /&gt;
 |A2=stone |B2=redstone_dust |C2=stone&lt;br /&gt;
 |A3=stone |B3=Ink_Sac |C3=stone&lt;br /&gt;
 |Output=printer&lt;br /&gt;
 }}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3277</id>
		<title>Rednet.receive</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3277"/>
				<updated>2012-10-03T01:48:37Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=rednet.receive&lt;br /&gt;
|args=[[float (type)|float]] timeoutSeconds&lt;br /&gt;
|returns=senderId, message, distance-to-sender (or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; if using redpower bundled cable instead of a modem)&lt;br /&gt;
|api=rednet&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Waits for &amp;lt;var&amp;gt;timeoutSeconds&amp;lt;/var&amp;gt; or until another computer sends a message to this computer. (see [[rednet.broadcast( message )]] and [[rednet.send( receiverID, message )]].  If a Timeout occurs the return id and message are set to nil.  If timeout is nil, waits forever.&amp;lt;br /&amp;gt;To get the id from a computer see  [[os.computerID()]], or the [[id]] command.&amp;lt;br/&amp;gt;You must be calling this function at the moment a message is sent, or you will miss it.  If you need to watch for messages while doing something else at the same time, see [[Parallel.waitForAny]]&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Waits forever until someone sends a message to this computer and displays it.&lt;br /&gt;
|code=senderId, message, distance = rednet.receive()&amp;lt;br&amp;gt;term.write(message)&lt;br /&gt;
|output=The received message.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Category:APIs&amp;diff=3267</id>
		<title>Category:APIs</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Category:APIs&amp;diff=3267"/>
				<updated>2012-10-02T02:01:05Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Apis.png|thumb|350px|API's being listed with the &amp;quot;apis&amp;quot; command run in a computer.]]An API (Application Programming Interface) is a collection of code that, rather than being run directly by the user as a program, is meant to be used by other programs. This is different from a function in that an API may contain many functions that perform related tasks; the API groups them together.  It is a library of functions.&lt;br /&gt;
There are two reasons why one might want to use an API:&lt;br /&gt;
* The API may provide a function that you could write yourself if you had to, but using the one from the API means you don't have to do that work.&lt;br /&gt;
	&lt;br /&gt;
* The API may provide something it's impossible to do yourself because it has to be done in Java rather than Lua.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
ComputerCraft itself ships with a collection of APIs of both types. For example:&lt;br /&gt;
	&lt;br /&gt;
* The [[color (API)|color API]] provides names for the various numbers used in RedPower bundled cable, and functions that manipulate those numbers. The names for the numbers are just variables, and the functions are written in Lua (you can find this in &amp;quot;rom/apis/colors&amp;quot;). You could write the same variables and functions in your own code if you wanted, but using the API saves you from doing that.&lt;br /&gt;
	&lt;br /&gt;
* The [[fs (API)|fs API]] provides functions to work with files. You couldn't write the functions from this API in Lua because they have to access the corresponding files in your real computer (the one running Minecraft), and the only way to do that from Lua is… through the fs API (or the [[IO (API)|io API]], but that's just a wrapper around fs).&lt;br /&gt;
	&lt;br /&gt;
All the stock APIs of the first kind, those that are implemented in Lua, can be found in your &amp;quot;mods/ComputerCraft/lua/rom/apis&amp;quot; directory. Inside Minecraft, on a ComputerCraft computer, these appear in the directory &amp;quot;rom/apis&amp;quot;. All the built-in APIs of both kinds (Lua and Java) are automatically loaded, so you don't have to use &amp;quot;[[OS (API)|os]].loadAPI&amp;quot; on them.&lt;br /&gt;
&lt;br /&gt;
ComputerCraft mods, for example mods that add custom peripherals, might also add APIs that help you work with those peripherals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you might find APIs written by other people that you can download, or you might write APIs yourself if you'll be using a function in many different programs and don't want to keep rewriting it. If you're playing single-player or you're running the multiplayer server, you can add those APIs to &amp;quot;rom/apis&amp;quot; and they will automatically be loaded on every computer in the world. Normally, though, you would leave the APIs somewhere else and use &amp;quot;os.loadAPI&amp;quot; to make them available to your program.&lt;br /&gt;
&lt;br /&gt;
You can see a list of APIs built-in to ComputerCraft by typing &amp;quot;apis&amp;quot; in the terminal.&lt;br /&gt;
&lt;br /&gt;
[[Category:Lists]]&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3266</id>
		<title>Rednet.receive</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3266"/>
				<updated>2012-10-02T01:52:04Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=rednet.receive&lt;br /&gt;
|args=[[float (type)|float]] timeoutSeconds&lt;br /&gt;
|returns=senderId, message, distance-to-sender (or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; if using redpower bundled cable instead of a modem)&lt;br /&gt;
|api=rednet&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Waits for &amp;lt;var&amp;gt;timeoutSeconds&amp;lt;/var&amp;gt; or until another computer sends a message to this computer. (see [[rednet.broadcast( message )]] and [[rednet.send( receiverID, message )]].  If a Timeout occurs the return id and message are set to nil.&amp;lt;br /&amp;gt;To get the id from a computer see  [[os.computerID()]], or the [[id]] command.&amp;lt;br/&amp;gt;You must be calling this function at the moment a message is sent, or you will miss it.  If you need to watch for messages while doing something else at the same time, see [[Parallel.waitForAny]]&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Waits forever until someone sends a message to this computer and displays it.&lt;br /&gt;
|code=senderId, message, distance = rednet.receive()&amp;lt;br&amp;gt;term.write(message)&lt;br /&gt;
|output=The received message.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3265</id>
		<title>Rednet.receive</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3265"/>
				<updated>2012-10-02T01:50:31Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=rednet.receive&lt;br /&gt;
|args=[[float (type)|float]] timeoutSeconds&lt;br /&gt;
|returns=senderId, message, distance-to-sender (or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; if using redpower bundled cable instead of a modem)&lt;br /&gt;
|api=rednet&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Waits for &amp;lt;var&amp;gt;timeoutSeconds&amp;lt;/var&amp;gt; or until another computer sends a message to this computer. (see [[rednet.broadcast( message )]] and [[rednet.send( receiverID, message )]].&amp;lt;br /&amp;gt;To get the id from a computer see  [[os.computerID()]], or the [[id]] command.  If a Timeout occurs the return id and message are set to nil.&amp;lt;br/&amp;gt;You must be calling this function at the moment a message is sent, or you will miss it.  If you need to watch for messages while doing something else at the same time, see [[Parallel.waitForAny]]&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Waits forever until someone sends a message to this computer and displays it.&lt;br /&gt;
|code=senderId, message, distance = rednet.receive()&amp;lt;br&amp;gt;term.write(message)&lt;br /&gt;
|output=The received message.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3264</id>
		<title>Rednet.receive</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3264"/>
				<updated>2012-10-02T01:49:21Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=rednet.receive&lt;br /&gt;
|args=[[float (type)|float]] timeoutSeconds&lt;br /&gt;
|returns=senderId, message, distance-to-sender (or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; if using redpower bundled cable instead of a modem)&lt;br /&gt;
|api=rednet&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Waits for &amp;lt;var&amp;gt;timeoutSeconds&amp;lt;/var&amp;gt; or until another computer sends a message to this computer. (see [[rednet.broadcast( message )]] and [[rednet.send( receiverID, message )]].&amp;lt;br /&amp;gt;To get the id from a computer see  [[os.computerID()]], or the [[id]] command.  If a Timeout occurs the return id and message are set to nil.&amp;lt;br/&amp;gt;You must be calling this function at the moment a message is sent, or you will miss it.  If you need to watch for messages while doing something else at the same time, use [[Parallel.waitForAny]]&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=Waits forever until someone sends a message to this computer and displays it.&lt;br /&gt;
|code=senderId, message, distance = rednet.receive()&amp;lt;br&amp;gt;term.write(message)&lt;br /&gt;
|output=The received message.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Talk:APIs&amp;diff=3260</id>
		<title>Talk:APIs</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Talk:APIs&amp;diff=3260"/>
				<updated>2012-10-02T01:39:16Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: Created page with &amp;quot;So sorry-- this page is the result of trying to fix a link elsewhere back to Category:APIs, and now I can't delete it.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;So sorry-- this page is the result of trying to fix a link elsewhere back to Category:APIs, and now I can't delete it.&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=OS_(API)&amp;diff=3256</id>
		<title>OS (API)</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=OS_(API)&amp;diff=3256"/>
				<updated>2012-10-02T01:35:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: /* API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
''You may be looking for alternative OS's for ComputerCraft. If so, go to the [[list of oses|list of OSes]].''&lt;br /&gt;
&lt;br /&gt;
The Operating System API allows for interfacing with the Lua based Operating System itself.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;200px&amp;quot;|Method name&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;*&amp;quot;|Description&lt;br /&gt;
|-&lt;br /&gt;
|[[os.version]]()&lt;br /&gt;
|Returns the version of the OS the computer is running.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.computerID]]()&lt;br /&gt;
|Returns the unique ID of this computer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.getComputerLabel]]()&lt;br /&gt;
|Returns the label of this computer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.setComputerLabel]]( label )&lt;br /&gt;
|Set the label of this computer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.run]]( environment, programpath, arguments )&lt;br /&gt;
|An advanced way of starting programs. A started program will have a given&lt;br /&gt;
Environment table which determines what functions it has available, as well as&lt;br /&gt;
any variables it will be able to access by default. You may prefer to use the&lt;br /&gt;
[[Shell (API)]] unless you need to do something special.&lt;br /&gt;
|-&lt;br /&gt;
|[[#api|os.loadAPI]]( name )&lt;br /&gt;
|Loads a lua script as an API in it's own namespace (see example). It will be available to *all* programs.&lt;br /&gt;
  -- &amp;quot;apiTest&amp;quot; file&lt;br /&gt;
  function foo(bar)&lt;br /&gt;
    print(bar)&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  -- &amp;quot;program&amp;quot; file&lt;br /&gt;
  apiTest.foo(&amp;quot;this is a test&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|[[#api|os.unloadAPI]]( name )&lt;br /&gt;
|Unloads a previously loaded API.&lt;br /&gt;
|-&lt;br /&gt;
|[[Os.pullEvent|os.pullEvent]]( only-event-to-accept )&lt;br /&gt;
|Blocks until the computer has detected an event, then returns the event.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pullEvent|os.pullEventRaw]]()&lt;br /&gt;
|Advanced version of pullEvent().&lt;br /&gt;
|-&lt;br /&gt;
|[[os.queueEvent]]( event, param1, param2, ... )&lt;br /&gt;
|Adds an event to the event queue with the name &amp;lt;var&amp;gt;event&amp;lt;/var&amp;gt; and the given parameters&lt;br /&gt;
|-&lt;br /&gt;
|[[os.clock]]()&lt;br /&gt;
|Returns CPU time.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.startTimer]]( timeout )&lt;br /&gt;
|Queues an event to be triggered after a number of seconds.&lt;br /&gt;
The ID of the timer is returned from this function to differentiate multiple&lt;br /&gt;
timers. Timers are one-shot, once they have fired an event you will need to&lt;br /&gt;
start another one if you need a recurring timer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.sleep]]( timeout )&lt;br /&gt;
|Makes the system wait a number of seconds before continuing in the program.&lt;br /&gt;
May also be used as simply &amp;quot;sleep( timeout )&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.time]]()&lt;br /&gt;
|Returns the current Minecraft world time.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.setAlarm]]( time )&lt;br /&gt;
|Queues an event to be triggered at the specific Minecraft world time.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.shutdown]]()&lt;br /&gt;
|Turns off the computer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.reboot]]()&lt;br /&gt;
|Reboots the computer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;api&amp;quot;&amp;gt;API&amp;lt;/div&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
API are programs which are loaded in to the OS itself, and expose functions&lt;br /&gt;
which other programs may use. The stock [[APIs]] that ship with&lt;br /&gt;
ComputerCraft are loaded in this way, and may be replaced by a computer's&lt;br /&gt;
user or programs.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;pullEvent&amp;quot;&amp;gt;os.pullEvent()&amp;lt;/div&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
os.pullEvent() causes the current program to pause, retrieving the next event&lt;br /&gt;
from the computer's queue of events. If there is no event to read, then the&lt;br /&gt;
program will stall until such an event becomes available. Note that if a&lt;br /&gt;
program has not attempted to pull an event in the past ten seconds, it will&lt;br /&gt;
be forcefully terminated to prevent CPU waste in SMP environments.&lt;br /&gt;
&lt;br /&gt;
pullEvent returns the name of the event that was read, as well as up to&lt;br /&gt;
five parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
local event, p1, p2, p3, p4, p5 = os.pullEvent()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
os.pullEvent() is usually run inside a 'while true do' loop.&lt;br /&gt;
&lt;br /&gt;
An advanced version of this method &amp;lt;code&amp;gt;os.pullEventRaw&amp;lt;/code&amp;gt; bypasses the&lt;br /&gt;
normal handling of events from the OS. You may use this to act on the&lt;br /&gt;
&amp;quot;Terminate&amp;quot; event (triggered when holding Ctrl-T) for custom termination logic.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Event names ===&lt;br /&gt;
-- please wikitable this --&lt;br /&gt;
*[[Raw key events|&amp;quot;key&amp;quot;: keypress]]&lt;br /&gt;
*&amp;quot;rednet_message&amp;quot;: recieved a rednet message&lt;br /&gt;
*&amp;quot;terminate&amp;quot; (? please verify name): Ctrl-T held&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[Category:APIs]]&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=OS_(API)&amp;diff=3255</id>
		<title>OS (API)</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=OS_(API)&amp;diff=3255"/>
				<updated>2012-10-02T01:32:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: /* API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
''You may be looking for alternative OS's for ComputerCraft. If so, go to the [[list of oses|list of OSes]].''&lt;br /&gt;
&lt;br /&gt;
The Operating System API allows for interfacing with the Lua based Operating System itself.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;200px&amp;quot;|Method name&lt;br /&gt;
!style=&amp;quot;background:#EEE&amp;quot; width=&amp;quot;*&amp;quot;|Description&lt;br /&gt;
|-&lt;br /&gt;
|[[os.version]]()&lt;br /&gt;
|Returns the version of the OS the computer is running.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.computerID]]()&lt;br /&gt;
|Returns the unique ID of this computer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.getComputerLabel]]()&lt;br /&gt;
|Returns the label of this computer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.setComputerLabel]]( label )&lt;br /&gt;
|Set the label of this computer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.run]]( environment, programpath, arguments )&lt;br /&gt;
|An advanced way of starting programs. A started program will have a given&lt;br /&gt;
Environment table which determines what functions it has available, as well as&lt;br /&gt;
any variables it will be able to access by default. You may prefer to use the&lt;br /&gt;
[[Shell (API)]] unless you need to do something special.&lt;br /&gt;
|-&lt;br /&gt;
|[[#api|os.loadAPI]]( name )&lt;br /&gt;
|Loads a lua script as an API in it's own namespace (see example). It will be available to *all* programs.&lt;br /&gt;
  -- &amp;quot;apiTest&amp;quot; file&lt;br /&gt;
  function foo(bar)&lt;br /&gt;
    print(bar)&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  -- &amp;quot;program&amp;quot; file&lt;br /&gt;
  apiTest.foo(&amp;quot;this is a test&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|[[#api|os.unloadAPI]]( name )&lt;br /&gt;
|Unloads a previously loaded API.&lt;br /&gt;
|-&lt;br /&gt;
|[[Os.pullEvent|os.pullEvent]]( only-event-to-accept )&lt;br /&gt;
|Blocks until the computer has detected an event, then returns the event.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pullEvent|os.pullEventRaw]]()&lt;br /&gt;
|Advanced version of pullEvent().&lt;br /&gt;
|-&lt;br /&gt;
|[[os.queueEvent]]( event, param1, param2, ... )&lt;br /&gt;
|Adds an event to the event queue with the name &amp;lt;var&amp;gt;event&amp;lt;/var&amp;gt; and the given parameters&lt;br /&gt;
|-&lt;br /&gt;
|[[os.clock]]()&lt;br /&gt;
|Returns CPU time.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.startTimer]]( timeout )&lt;br /&gt;
|Queues an event to be triggered after a number of seconds.&lt;br /&gt;
The ID of the timer is returned from this function to differentiate multiple&lt;br /&gt;
timers. Timers are one-shot, once they have fired an event you will need to&lt;br /&gt;
start another one if you need a recurring timer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.sleep]]( timeout )&lt;br /&gt;
|Makes the system wait a number of seconds before continuing in the program.&lt;br /&gt;
May also be used as simply &amp;quot;sleep( timeout )&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.time]]()&lt;br /&gt;
|Returns the current Minecraft world time.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.setAlarm]]( time )&lt;br /&gt;
|Queues an event to be triggered at the specific Minecraft world time.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.shutdown]]()&lt;br /&gt;
|Turns off the computer.&lt;br /&gt;
|-&lt;br /&gt;
|[[os.reboot]]()&lt;br /&gt;
|Reboots the computer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;api&amp;quot;&amp;gt;API&amp;lt;/div&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
API are programs which are loaded in to the OS itself, and expose functions&lt;br /&gt;
which other programs may use. The stock [[APIs|APIs that ship with&lt;br /&gt;
ComputerCraft]] are loaded in this way, and may be replaced by a computer's&lt;br /&gt;
user or programs.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;pullEvent&amp;quot;&amp;gt;os.pullEvent()&amp;lt;/div&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
os.pullEvent() causes the current program to pause, retrieving the next event&lt;br /&gt;
from the computer's queue of events. If there is no event to read, then the&lt;br /&gt;
program will stall until such an event becomes available. Note that if a&lt;br /&gt;
program has not attempted to pull an event in the past ten seconds, it will&lt;br /&gt;
be forcefully terminated to prevent CPU waste in SMP environments.&lt;br /&gt;
&lt;br /&gt;
pullEvent returns the name of the event that was read, as well as up to&lt;br /&gt;
five parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
local event, p1, p2, p3, p4, p5 = os.pullEvent()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
os.pullEvent() is usually run inside a 'while true do' loop.&lt;br /&gt;
&lt;br /&gt;
An advanced version of this method &amp;lt;code&amp;gt;os.pullEventRaw&amp;lt;/code&amp;gt; bypasses the&lt;br /&gt;
normal handling of events from the OS. You may use this to act on the&lt;br /&gt;
&amp;quot;Terminate&amp;quot; event (triggered when holding Ctrl-T) for custom termination logic.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Event names ===&lt;br /&gt;
-- please wikitable this --&lt;br /&gt;
*[[Raw key events|&amp;quot;key&amp;quot;: keypress]]&lt;br /&gt;
*&amp;quot;rednet_message&amp;quot;: recieved a rednet message&lt;br /&gt;
*&amp;quot;terminate&amp;quot; (? please verify name): Ctrl-T held&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[Category:APIs]]&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=User:Dadmob18&amp;diff=3218</id>
		<title>User:Dadmob18</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=User:Dadmob18&amp;diff=3218"/>
				<updated>2012-09-27T12:53:20Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: Created page with &amp;quot;I'm a developer by day and a father of two boys by night, and we all enjoy playing Minecraft.  My ultimate goal for turtles is to build a self-replicating set of them... but I...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm a developer by day and a father of two boys by night, and we all enjoy playing Minecraft.  My ultimate goal for turtles is to build a self-replicating set of them... but I only get one hour of playing each night.&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Talk:Turtle_(API)&amp;diff=3217</id>
		<title>Talk:Turtle (API)</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Talk:Turtle_(API)&amp;diff=3217"/>
				<updated>2012-09-27T12:50:02Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: /* turtle collect ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Is there a way to detect a block's type? Preferably without picking it up; it would be nice to be able to write a function to check the block about to be broken against a list of &amp;quot;Do not break&amp;quot; blocks, such as Industrial craft's MFSU, which loses all held power when picked up. &lt;br /&gt;
&lt;br /&gt;
Also I request a way to set server-wide list of blocks immune to the turtle.dig() functions, such as say personal safes (Industrial Craft again).&amp;lt;small&amp;gt;&amp;lt;span class=&amp;quot;autosigned&amp;quot;&amp;gt;— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[User:50.131.199.48|50.131.199.48]] ([[User talk:50.131.199.48|talk]] • [[Special:Contributions/50.131.199.48|contribs]]) &amp;lt;/span&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;!-- Template:Unsigned --&amp;gt;&lt;br /&gt;
:As far as I know, there's no way to check the block type with the current API. Could be a feature in the future though, never know. {{User:Scarfacial/Signature|22:17 - 8 March 2012}}&lt;br /&gt;
::Would be interesting to see if one could write a function for that. {{User:Banane9/Signature|22:43 - 9 March 2012}}&lt;br /&gt;
:::i would see it too please. But i dont think that you can make that in a function&lt;br /&gt;
:::[[User:Dude|Dude]] 22:13, 9 March 2012 (UTC)&lt;br /&gt;
::::You can determine if the block matches the one in its inventory using turtle.select(slot) and then turtle.compare() or turtle.compareUp() or turtle.compareDown()&lt;br /&gt;
&lt;br /&gt;
== turtle collect ? ==&lt;br /&gt;
&lt;br /&gt;
i understand that the turtle can drop items from its inventory with turtle.drop( [amount] )&lt;br /&gt;
but is there a way to make the turtle collect items (like a player would do) around and store it in inventory ?&lt;br /&gt;
(from what i understand right now the turtle collects items taken from a digged block ?&lt;br /&gt;
thanks&lt;br /&gt;
:Nope they don't collect items that are already dropped --[[User:Banane9|Banane9]] 12:22, 11 July 2012 (UTC)&lt;br /&gt;
:Now in 1.4 there is the [[turtle.suck|turtle.suck()]] function --[[User:Dadmob18|Dadmob18]] 12:22, 27 Sep 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
== treefarm ==&lt;br /&gt;
&lt;br /&gt;
i have write a big programm (120 lines) that destory the tree full (with the leaves) when the tree is grown. so the turtle can plant an new tree an beginn at the start. My problem: the programm dont work and i cant find the faults... &amp;lt;small&amp;gt;&amp;lt;span class=&amp;quot;autosigned&amp;quot;&amp;gt;— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[User:Dude|Dude]] ([[User talk:Dude|talk]] • [[Special:Contributions/Dude|contribs]]) &amp;lt;/span&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;!-- Template:Unsigned --&amp;gt;&lt;br /&gt;
:Maybe because the leaves of the tree decay and that f*cks up the code? We cant help you without seeing your code ;) --[[User:Banane9|Banane9]] 12:22, 11 July 2012 (UTC)&lt;br /&gt;
::On a similar note, I have written a disassembler script which (mostly) disassembles arbitrary things from the top down, but it really gets messed up by doors and other turtles and pistons, it is basically because interacting with blocks only works well if the blocks don't change while you are trying to deal with them/use them for navigating.&lt;br /&gt;
&lt;br /&gt;
== Turtle API to detect block/item ID? ==&lt;br /&gt;
&lt;br /&gt;
I have a suggestion, what if you have a function like: turtle.getBlockID() which would return ID, damage value, or simmilar&lt;br /&gt;
:Dan doesn't want Block IDs as they'd break the 4th wall. --[[User:Pinkishu|Pinkishu]] 13:12, 16 August 2012 (CEST)&lt;br /&gt;
&lt;br /&gt;
== More than 1 mover per turtle.up() ==&lt;br /&gt;
&lt;br /&gt;
is there a way to make a turtle go up more than once for each turtle.up() ? like maybe turtle.up(36) (i tried that but it said attempt to call nil)&lt;br /&gt;
&lt;br /&gt;
You could use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
turtleold = turtle.up&lt;br /&gt;
function turtlenew(times)&lt;br /&gt;
for i=1,times do&lt;br /&gt;
turtle.up()&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
turtle.up = turtlenew&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then just use turtle.up(5) and stuff, because it overrides the function.&lt;br /&gt;
&lt;br /&gt;
Can you tell the turtle to drop/not pick up unwanted items like dirt, cobble, sand and gravel?&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Talk:Turtle_(API)&amp;diff=3216</id>
		<title>Talk:Turtle (API)</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Talk:Turtle_(API)&amp;diff=3216"/>
				<updated>2012-09-27T12:49:02Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: /* turtle collect ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Is there a way to detect a block's type? Preferably without picking it up; it would be nice to be able to write a function to check the block about to be broken against a list of &amp;quot;Do not break&amp;quot; blocks, such as Industrial craft's MFSU, which loses all held power when picked up. &lt;br /&gt;
&lt;br /&gt;
Also I request a way to set server-wide list of blocks immune to the turtle.dig() functions, such as say personal safes (Industrial Craft again).&amp;lt;small&amp;gt;&amp;lt;span class=&amp;quot;autosigned&amp;quot;&amp;gt;— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[User:50.131.199.48|50.131.199.48]] ([[User talk:50.131.199.48|talk]] • [[Special:Contributions/50.131.199.48|contribs]]) &amp;lt;/span&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;!-- Template:Unsigned --&amp;gt;&lt;br /&gt;
:As far as I know, there's no way to check the block type with the current API. Could be a feature in the future though, never know. {{User:Scarfacial/Signature|22:17 - 8 March 2012}}&lt;br /&gt;
::Would be interesting to see if one could write a function for that. {{User:Banane9/Signature|22:43 - 9 March 2012}}&lt;br /&gt;
:::i would see it too please. But i dont think that you can make that in a function&lt;br /&gt;
:::[[User:Dude|Dude]] 22:13, 9 March 2012 (UTC)&lt;br /&gt;
::::You can determine if the block matches the one in its inventory using turtle.select(slot) and then turtle.compare() or turtle.compareUp() or turtle.compareDown()&lt;br /&gt;
&lt;br /&gt;
== turtle collect ? ==&lt;br /&gt;
&lt;br /&gt;
i understand that the turtle can drop items from its inventory with turtle.drop( [amount] )&lt;br /&gt;
but is there a way to make the turtle collect items (like a player would do) around and store it in inventory ?&lt;br /&gt;
(from what i understand right now the turtle collects items taken from a digged block ?&lt;br /&gt;
thanks&lt;br /&gt;
:Nope they don't collect items that are already dropped --[[User:Banane9|Banane9]] 12:22, 11 July 2012 (UTC)&lt;br /&gt;
:Now in 1.4 there is the [[turtle.suck()|Turtle.suck]] function --[[User:Dadmob18|Dadmob18]] 12:22, 27 Sep 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
== treefarm ==&lt;br /&gt;
&lt;br /&gt;
i have write a big programm (120 lines) that destory the tree full (with the leaves) when the tree is grown. so the turtle can plant an new tree an beginn at the start. My problem: the programm dont work and i cant find the faults... &amp;lt;small&amp;gt;&amp;lt;span class=&amp;quot;autosigned&amp;quot;&amp;gt;— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[User:Dude|Dude]] ([[User talk:Dude|talk]] • [[Special:Contributions/Dude|contribs]]) &amp;lt;/span&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;!-- Template:Unsigned --&amp;gt;&lt;br /&gt;
:Maybe because the leaves of the tree decay and that f*cks up the code? We cant help you without seeing your code ;) --[[User:Banane9|Banane9]] 12:22, 11 July 2012 (UTC)&lt;br /&gt;
::On a similar note, I have written a disassembler script which (mostly) disassembles arbitrary things from the top down, but it really gets messed up by doors and other turtles and pistons, it is basically because interacting with blocks only works well if the blocks don't change while you are trying to deal with them/use them for navigating.&lt;br /&gt;
&lt;br /&gt;
== Turtle API to detect block/item ID? ==&lt;br /&gt;
&lt;br /&gt;
I have a suggestion, what if you have a function like: turtle.getBlockID() which would return ID, damage value, or simmilar&lt;br /&gt;
:Dan doesn't want Block IDs as they'd break the 4th wall. --[[User:Pinkishu|Pinkishu]] 13:12, 16 August 2012 (CEST)&lt;br /&gt;
&lt;br /&gt;
== More than 1 mover per turtle.up() ==&lt;br /&gt;
&lt;br /&gt;
is there a way to make a turtle go up more than once for each turtle.up() ? like maybe turtle.up(36) (i tried that but it said attempt to call nil)&lt;br /&gt;
&lt;br /&gt;
You could use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
turtleold = turtle.up&lt;br /&gt;
function turtlenew(times)&lt;br /&gt;
for i=1,times do&lt;br /&gt;
turtle.up()&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
turtle.up = turtlenew&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then just use turtle.up(5) and stuff, because it overrides the function.&lt;br /&gt;
&lt;br /&gt;
Can you tell the turtle to drop/not pick up unwanted items like dirt, cobble, sand and gravel?&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Talk:Turtle_(API)&amp;diff=3215</id>
		<title>Talk:Turtle (API)</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Talk:Turtle_(API)&amp;diff=3215"/>
				<updated>2012-09-27T12:46:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: /* turtle collect ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Is there a way to detect a block's type? Preferably without picking it up; it would be nice to be able to write a function to check the block about to be broken against a list of &amp;quot;Do not break&amp;quot; blocks, such as Industrial craft's MFSU, which loses all held power when picked up. &lt;br /&gt;
&lt;br /&gt;
Also I request a way to set server-wide list of blocks immune to the turtle.dig() functions, such as say personal safes (Industrial Craft again).&amp;lt;small&amp;gt;&amp;lt;span class=&amp;quot;autosigned&amp;quot;&amp;gt;— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[User:50.131.199.48|50.131.199.48]] ([[User talk:50.131.199.48|talk]] • [[Special:Contributions/50.131.199.48|contribs]]) &amp;lt;/span&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;!-- Template:Unsigned --&amp;gt;&lt;br /&gt;
:As far as I know, there's no way to check the block type with the current API. Could be a feature in the future though, never know. {{User:Scarfacial/Signature|22:17 - 8 March 2012}}&lt;br /&gt;
::Would be interesting to see if one could write a function for that. {{User:Banane9/Signature|22:43 - 9 March 2012}}&lt;br /&gt;
:::i would see it too please. But i dont think that you can make that in a function&lt;br /&gt;
:::[[User:Dude|Dude]] 22:13, 9 March 2012 (UTC)&lt;br /&gt;
::::You can determine if the block matches the one in its inventory using turtle.select(slot) and then turtle.compare() or turtle.compareUp() or turtle.compareDown()&lt;br /&gt;
&lt;br /&gt;
== turtle collect ? ==&lt;br /&gt;
&lt;br /&gt;
i understand that the turtle can drop items from its inventory with turtle.drop( [amount] )&lt;br /&gt;
but is there a way to make the turtle collect items (like a player would do) around and store it in inventory ?&lt;br /&gt;
(from what i understand right now the turtle collects items taken from a digged block ?&lt;br /&gt;
thanks&lt;br /&gt;
:Nope they don't collect items that are already dropped --[[User:Banane9|Banane9]] 12:22, 11 July 2012 (UTC)&lt;br /&gt;
:Now in 1.4 there is the turtle.suck() function --[[User:Dadmob18|Dadmob18]] 12:22, 27 Sep 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
== treefarm ==&lt;br /&gt;
&lt;br /&gt;
i have write a big programm (120 lines) that destory the tree full (with the leaves) when the tree is grown. so the turtle can plant an new tree an beginn at the start. My problem: the programm dont work and i cant find the faults... &amp;lt;small&amp;gt;&amp;lt;span class=&amp;quot;autosigned&amp;quot;&amp;gt;— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[User:Dude|Dude]] ([[User talk:Dude|talk]] • [[Special:Contributions/Dude|contribs]]) &amp;lt;/span&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;!-- Template:Unsigned --&amp;gt;&lt;br /&gt;
:Maybe because the leaves of the tree decay and that f*cks up the code? We cant help you without seeing your code ;) --[[User:Banane9|Banane9]] 12:22, 11 July 2012 (UTC)&lt;br /&gt;
::On a similar note, I have written a disassembler script which (mostly) disassembles arbitrary things from the top down, but it really gets messed up by doors and other turtles and pistons, it is basically because interacting with blocks only works well if the blocks don't change while you are trying to deal with them/use them for navigating.&lt;br /&gt;
&lt;br /&gt;
== Turtle API to detect block/item ID? ==&lt;br /&gt;
&lt;br /&gt;
I have a suggestion, what if you have a function like: turtle.getBlockID() which would return ID, damage value, or simmilar&lt;br /&gt;
:Dan doesn't want Block IDs as they'd break the 4th wall. --[[User:Pinkishu|Pinkishu]] 13:12, 16 August 2012 (CEST)&lt;br /&gt;
&lt;br /&gt;
== More than 1 mover per turtle.up() ==&lt;br /&gt;
&lt;br /&gt;
is there a way to make a turtle go up more than once for each turtle.up() ? like maybe turtle.up(36) (i tried that but it said attempt to call nil)&lt;br /&gt;
&lt;br /&gt;
You could use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
turtleold = turtle.up&lt;br /&gt;
function turtlenew(times)&lt;br /&gt;
for i=1,times do&lt;br /&gt;
turtle.up()&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
turtle.up = turtlenew&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then just use turtle.up(5) and stuff, because it overrides the function.&lt;br /&gt;
&lt;br /&gt;
Can you tell the turtle to drop/not pick up unwanted items like dirt, cobble, sand and gravel?&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3192</id>
		<title>Rednet.receive</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3192"/>
				<updated>2012-09-25T21:07:20Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=rednet.receive&lt;br /&gt;
|args=[[float (type)|float]] timeoutSeconds&lt;br /&gt;
|returns=senderId, message, distance-to-sender (or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; if using redpower bundled cable instead of a modem)&lt;br /&gt;
|api=rednet&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Waits for &amp;lt;var&amp;gt;timeoutSeconds&amp;lt;/var&amp;gt; or until another computer sends a message to this computer. (see [[rednet.broadcast( message )]] and [[rednet.send( receiverID, message )]].&amp;lt;br /&amp;gt;To get the id from a computer see  [[os.computerID()]], or the [[id]] command.  If a Timeout occurs the return id and message are set to nil&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=waits unlimited till someone sends a message to this computer and displays it&lt;br /&gt;
|code=senderId, message, distance = rednet.receive()&amp;lt;br&amp;gt;term.write(message)&lt;br /&gt;
|output=The received message.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3191</id>
		<title>Rednet.receive</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Rednet.receive&amp;diff=3191"/>
				<updated>2012-09-25T21:06:51Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
{{Function&lt;br /&gt;
|name=rednet.receive&lt;br /&gt;
|args=[[float (type)|float]] timeoutSeconds&lt;br /&gt;
|returns=senderId, message, distance-to-sender (or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; if using redpower bundled cable instead of a modem)&lt;br /&gt;
|api=rednet&lt;br /&gt;
|addon=ComputerCraft&lt;br /&gt;
|desc=Waits for &amp;lt;var&amp;gt;timeoutSeconds&amp;lt;/var&amp;gt; or until another computer sends a message to this computer. (see [[rednet.broadcast( message )]] and [[rednet.send( receiverID, message )]].&amp;lt;br /&amp;gt;To get the id from a computer see  [[os.computerID()]].  If a Timeout occurs the return id and message are set to nil&lt;br /&gt;
|examples=&lt;br /&gt;
{{Example&lt;br /&gt;
|desc=waits unlimited till someone sends a message to this computer and displays it&lt;br /&gt;
|code=senderId, message, distance = rednet.receive()&amp;lt;br&amp;gt;term.write(message)&lt;br /&gt;
|output=The received message.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	<entry>
		<id>https://www.computercraft.info/wiki/index.php?title=Login_with_Roaming_Profiles&amp;diff=3185</id>
		<title>Login with Roaming Profiles</title>
		<link rel="alternate" type="text/html" href="https://www.computercraft.info/wiki/index.php?title=Login_with_Roaming_Profiles&amp;diff=3185"/>
				<updated>2012-09-25T02:07:58Z</updated>
		
		<summary type="html">&lt;p&gt;Dadmob18: /* Setting Up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This tutorial covers how to make a password server and a password client. The server will host a Lua table of usernames and passwords and the client will remotely connect each start up, ask the user for their username and password and compare it to that on the password server.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Setting Up ==&lt;br /&gt;
As I'm sure you're aware, writing code directly into the computer terminal can be difficult, slow, and therefore annoying. I highly recommend writing/copying the following code into a Lua editor and then using FTP to transfer the documents across to the computer or disk. Please ensure you do not add the .lua extension.  Programs are saved in your minecraft world under the &amp;quot;computer&amp;quot; directory, with one folder for each computer plus the folder &amp;quot;disk&amp;quot; which contains a directory for each disk.&lt;br /&gt;
&lt;br /&gt;
First craft two or more computers. One will act as your password server, any others will be connecting to that computer. Find the computer ID of your password server. This is important as we don't want to broadcast password requests and replies. In the following code I have also locked the requests to certain computers to ensure security but it is not a needed component of the code. If you decide to take the security as well, make a note of all of the ID's of the client computers. I found it useful to give each computer a label and then search for labels.txt on the server to map it out easily.&lt;br /&gt;
&lt;br /&gt;
Each computer you craft needs a [[modem|rednet modem]].&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
=== Server Code ===&lt;br /&gt;
&lt;br /&gt;
 os.pullEvent = os.pullEventRaw&lt;br /&gt;
 term.clear()&lt;br /&gt;
 term.setCursorPos(1,1)&lt;br /&gt;
 print(&amp;quot;This is a password server. There is no user interaction here.&amp;quot;)&lt;br /&gt;
 print(&amp;quot;Please find a computer and login there.&amp;quot;)   &lt;br /&gt;
 local firstCycle = true&lt;br /&gt;
 local validSender = false&lt;br /&gt;
 local modemSide = &amp;quot;left&amp;quot; -- change to the side of the computer your modem is on&lt;br /&gt;
 local valid = false&lt;br /&gt;
 users = { username1, username2 } --make sure users and passwords line up&lt;br /&gt;
 passwords = { password1, password2 }&lt;br /&gt;
 senders = { 13, 14, 15, 17 } -- computer ID's of the computers you want to accept requests from&lt;br /&gt;
 function bootUp()&lt;br /&gt;
  rednet.open(modemSide)&lt;br /&gt;
 end &lt;br /&gt;
 while true do &lt;br /&gt;
  validSender = false&lt;br /&gt;
  if firstCycle then&lt;br /&gt;
   bootUp()&lt;br /&gt;
   firstCycle = false&lt;br /&gt;
  end&lt;br /&gt;
  senderId, message, distance = rednet.receive()&lt;br /&gt;
  for i,v in ipairs(senders) do&lt;br /&gt;
   if v == senderId then&lt;br /&gt;
    validSender = true&lt;br /&gt;
    break&lt;br /&gt;
   end&lt;br /&gt;
  end&lt;br /&gt;
  if validSender then&lt;br /&gt;
   for i,v in ipairs(users) do&lt;br /&gt;
    if message == v then&lt;br /&gt;
     valid = true&lt;br /&gt;
     password = passwords[i]&lt;br /&gt;
    else&lt;br /&gt;
     valid = false&lt;br /&gt;
    end&lt;br /&gt;
   end&lt;br /&gt;
   if valid then&lt;br /&gt;
    rednet.send(senderId, password)&lt;br /&gt;
   else&lt;br /&gt;
    rednet.send(senderId, &amp;quot;Not Valid&amp;quot;)&lt;br /&gt;
   end&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=== Client Code ===&lt;br /&gt;
&lt;br /&gt;
 os.pullEvent = os.pullEventRaw&lt;br /&gt;
 local locker = true&lt;br /&gt;
 local failed = true&lt;br /&gt;
 local attempted_login = true&lt;br /&gt;
 local password_server = 17 -- change to the ID of your password server computer&lt;br /&gt;
 rednet.open(&amp;quot;left&amp;quot;) -- change to the side your rednet modem is on&lt;br /&gt;
 while locker do&lt;br /&gt;
  attempted_login = false&lt;br /&gt;
  term.clear()&lt;br /&gt;
  term.setCursorPos(1,1)&lt;br /&gt;
  print(&amp;quot;Welcome to a USERS PC : Roaming Profile Enabled&amp;quot;)&lt;br /&gt;
  print(&amp;quot;What would you like to do?&amp;quot;)&lt;br /&gt;
  print(&amp;quot;[1] Login (*)&amp;quot;)&lt;br /&gt;
  print(&amp;quot;[2] Shutdown&amp;quot;)&lt;br /&gt;
  write(&amp;quot;&amp;gt; &amp;quot;)&lt;br /&gt;
  local input = read()&lt;br /&gt;
  if input == &amp;quot;2&amp;quot; then&lt;br /&gt;
   os.shutdown()&lt;br /&gt;
  elseif input == &amp;quot;1&amp;quot; then&lt;br /&gt;
   attempted_login = true&lt;br /&gt;
   print(&amp;quot;Please login...&amp;quot;)&lt;br /&gt;
   write(&amp;quot;Username: &amp;quot;)&lt;br /&gt;
   local username = read()&lt;br /&gt;
   write(&amp;quot;Password: &amp;quot;)&lt;br /&gt;
   local password = read(&amp;quot;*&amp;quot;)&lt;br /&gt;
   rednet.send(password_server, username)&lt;br /&gt;
   senderId, message, distance = rednet.receive(5)&lt;br /&gt;
   if password == message then&lt;br /&gt;
    failed = false&lt;br /&gt;
    locker = false&lt;br /&gt;
    term.clear()&lt;br /&gt;
    term.setCursorPos(1,1)&lt;br /&gt;
    print(&amp;quot;Welcome &amp;quot;, username)&lt;br /&gt;
   else&lt;br /&gt;
    print(&amp;quot;Not authorised.&amp;quot;)&lt;br /&gt;
    sleep(1)&lt;br /&gt;
   end&lt;br /&gt;
  else&lt;br /&gt;
   print(&amp;quot;Command not recognised...&amp;quot;)&lt;br /&gt;
   sleep(2)&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== Thoughts and Notes ==&lt;br /&gt;
If you change the client code, to &amp;quot;startup&amp;quot; and put it in the root directory, it works very well as a login system.&lt;br /&gt;
You may also want to put in the line &lt;br /&gt;
 os.pullEvent = os.pullEventRaw -- disables Ctrl+T&lt;br /&gt;
as if it doesn't work first time it can be difficult to get out of the program.&lt;br /&gt;
&lt;br /&gt;
If you have either Railcraft or Additional Pipes, find the 'World Anchor' or 'Teleport Tether' block. If your server can afford the resources, place the block within a 3x3 grid of your password server. It will ensure that even if you leave the chunk, the password server still is operational. Otherwise you may find that you cannot login because you've left the chunk and the password server is no longer dealing with requests.&lt;br /&gt;
&lt;br /&gt;
This is a minor security flaw but it is only if someone has access to a computer that is 'whitelisted' to access the password server. The security flaw is that if they use the password Not Valid on that computer they are allowed access;&lt;br /&gt;
&lt;br /&gt;
if valid then&lt;br /&gt;
 --send client password&lt;br /&gt;
else&lt;br /&gt;
 --send client Not Valid&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
to fix remove the else statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:User Management]]&lt;/div&gt;</summary>
		<author><name>Dadmob18</name></author>	</entry>

	</feed>