<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.ac.ghxx.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GHXX</id>
	<title>Advanced Computers Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ac.ghxx.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GHXX"/>
	<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/Special:Contributions/GHXX"/>
	<updated>2026-09-14T12:46:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=318</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=318"/>
		<updated>2026-09-10T04:16:57Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter block.png|alt=Digital Crafter block|thumb|Digital Crafter block]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also comes with an inventory of 27 slots from which the ingredients are taken. Extra-results (such as empty buckets when crafting a cake) and the desired output (e.g. the cake) are either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemsByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:searchItemsByDisplayName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;Torch&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Redstone Lamp&amp;lt;/code&amp;gt;.&lt;br /&gt;
FUTURE (0.7.1+): will return a table whose keys are internal names, and the values are the found display item names. E.g. &amp;lt;code&amp;gt;{[&amp;quot;minecraft:torch&amp;quot;]=&amp;quot;Torch&amp;quot;}&amp;lt;/code&amp;gt; as otherwise it is hard to convert an item name to the id format.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result and extra results (such as empty buckets) are put into the own inventory. Otherwise they are pushed into the inventory that may be above, or are ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=317</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=317"/>
		<updated>2026-09-09T06:09:29Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter block.png|alt=Digital Crafter block|thumb|Digital Crafter block]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also comes with an inventory of 27 slots from which the ingredients are taken. Extra-results (such as empty buckets when crafting a cake) and the desired output (e.g. the cake) are either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemsByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:searchItemsByDisplayName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;Torch&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Redstone Lamp&amp;lt;/code&amp;gt;.&lt;br /&gt;
FUTURE (0.7.1+): will return a table whose keys are internal names, and the values are the found display item names. E.g. &amp;lt;code&amp;gt;{[&amp;quot;minecraft:torch&amp;quot;]=&amp;quot;Torch&amp;quot;}&amp;lt;/code&amp;gt; as otherwise it is hard to convert an item name to the id format.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result and extra results (such as empty buckets) are put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=316</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=316"/>
		<updated>2026-09-09T05:58:02Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter block.png|alt=Digital Crafter block|thumb|Digital Crafter block]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also comes with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemsByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:searchItemsByDisplayName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;Torch&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Redstone Lamp&amp;lt;/code&amp;gt;.&lt;br /&gt;
FUTURE (0.7.1+): will return a table whose keys are internal names, and the values are the found display item names. E.g. &amp;lt;code&amp;gt;{[&amp;quot;minecraft:torch&amp;quot;]=&amp;quot;Torch&amp;quot;}&amp;lt;/code&amp;gt; as otherwise it is hard to convert an item name to the id format.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=315</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=315"/>
		<updated>2026-09-07T19:58:29Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter block.png|alt=Digital Crafter block|thumb|Digital Crafter block]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemsByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:searchItemsByDisplayName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;Torch&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Redstone Lamp&amp;lt;/code&amp;gt;.&lt;br /&gt;
FUTURE (0.7.1+): will return a table whose keys are internal names, and the values are the found display item names. E.g. &amp;lt;code&amp;gt;{[&amp;quot;minecraft:torch&amp;quot;]=&amp;quot;Torch&amp;quot;}&amp;lt;/code&amp;gt; as otherwise it is hard to convert an item name to the id format.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=314</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=314"/>
		<updated>2026-09-07T19:50:36Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter block.png|alt=Digital Crafter block|thumb|Digital Crafter block]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemsByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:searchItemsByDisplayName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;Torch&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Redstone Lamp&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Adapter&amp;diff=313</id>
		<title>Adapter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Adapter&amp;diff=313"/>
		<updated>2026-09-07T02:18:08Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Adapter block.png|alt=Adapter block|thumb|Adapter block]]&lt;br /&gt;
This block allows you to interact with non [[Advanced Computers]] blocks, such as the vanilla Minecraft jukebox, or blocks from other addon mods. It also offers special functionality for interacting with another [[Computer]]. The provided functionality changes based on the block that it is facing.&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;adapter&amp;lt;/code&amp;gt; component, offering the following properties/methods regardless of the block placed in front of it:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AdapterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AdapterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getBlockName()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the name of the block that it is facing at. E.g. &amp;lt;code&amp;gt;minecraft:air&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;minecraft:jukebox&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
The remaining properties / methods are only available when the adapter is facing the respective block.&lt;br /&gt;
&lt;br /&gt;
=== Jukebox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Jukebox properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;isPlaying&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Whether the jukebox is currently playing music.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;containedItem&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The name of the currently contained item, e.g. &amp;lt;code&amp;gt;minecraft:music_disc_otherside&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;recordName&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The fancy title of the music disc that is currently playing, e.g. &amp;lt;code&amp;gt;Lena Raine - otherside&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Jukebox methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:restartPlaying()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Starts or restarts the current track.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:eject()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Ejects the current music disc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Noteblock ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Noteblock properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;instrument&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The name of the instrument that this noteblock is representing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;notePitch&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|READWRITE&lt;br /&gt;
|The current pitch of the note that would be played.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Computer (Advanced Computers) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Computer properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;runState&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The computer&#039;s runstate, see [[Computer]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;crashReason&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The crashReason that can also be read via the [[Debugger]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ME Interface (Applied Energistics 2) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ME Interface methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:search(partialName:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a table of at most 1000 of the first items that match the given name. The keys of the table are the full item names and the associated values are the quantities of each item.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getCount(fullName:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns how much of the given item is available in the storage system.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:extract(fullName:string, direction:int, maxQuantity:int)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Tries to push the given amount of the given item into the adjacent inventory on the side given by &amp;lt;code&amp;gt;direction&amp;lt;/code&amp;gt;, relative to the interface block. Returns the actual quantity that was extracted.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Debugger&amp;diff=312</id>
		<title>Debugger</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Debugger&amp;diff=312"/>
		<updated>2026-09-07T02:15:43Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Debugger thumbnail.png|alt=Debugger|thumb|Debugger]]&lt;br /&gt;
The allows obtaining additional information about the state of a variety of blocks. It also provides access to the crash information of computers as can be seen in the screenshot below. You can access this information by holding the debugger in your hand and right-clicking any block with it.&lt;br /&gt;
&lt;br /&gt;
== Displayed output ==&lt;br /&gt;
Currently it lists the following properties about blocks that support this information.&lt;br /&gt;
[[File:Debugger crash information.png|alt=Debugger output|thumb|Debugger output]]&lt;br /&gt;
&lt;br /&gt;
=== Computer info ===&lt;br /&gt;
For [[Computer|Computers]], the following information is added:&lt;br /&gt;
&lt;br /&gt;
* The current state of the computer, i.e. whether it is stopped, running or crashed.&lt;br /&gt;
* In case the computer is in the crashed state, a reason is also displayed, such as &amp;quot;No mainboard installed&amp;quot;.&lt;br /&gt;
* If the computer did boot initially and a fatal Lua error occurred which was not caught by the OS or [[UEFI]], the stacktrace is also shown in this output.&lt;br /&gt;
* The Ac IP Address of this computer&lt;br /&gt;
&lt;br /&gt;
=== Peripheral info ===&lt;br /&gt;
Blocks that act as device cable peripherals also have a unique, numeric id assigned to them which is accessible via the property &amp;lt;code&amp;gt;.uniqueId&amp;lt;/code&amp;gt;. This is also shown on block right-click, making it an ideal way for finding the correct peripheral if you have multiple of the same type.&lt;br /&gt;
&lt;br /&gt;
=== Cluster info ===&lt;br /&gt;
For any blocks that support connecting to cables but are not just cables, the debugger lists all connected cable clusters and all participants in each cluster. For brevity, participants are only listed for the first occurrence of a given network id, but networks with the same id also share the same participants.&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Debugger&amp;diff=311</id>
		<title>Debugger</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Debugger&amp;diff=311"/>
		<updated>2026-09-07T02:15:24Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Debugger thumbnail.png|alt=Debugger|thumb|Debugger]]&lt;br /&gt;
The allows obtaining additional information about the state of a variety of blocks. It also provides access to the crash information of computers as can be seen in the screenshot below. You can access this information by holding the debugger in your hand and right-clicking any block with it.&lt;br /&gt;
&lt;br /&gt;
== Displayed output ==&lt;br /&gt;
Currently it lists the following properties about blocks that support this information.&lt;br /&gt;
[[File:Debugger crash information.png|alt=Debugger output|thumb|Debugger output]]&lt;br /&gt;
&lt;br /&gt;
=== Computer info ===&lt;br /&gt;
For [[Computer|Computers]], the following information is added:&lt;br /&gt;
&lt;br /&gt;
* The current state of the computer, i.e. whether it is stopped, running or crashed.&lt;br /&gt;
* In case the computer is in the crashed state, a reason is also displayed, such as &amp;quot;No mainboard installed&amp;quot;.&lt;br /&gt;
* If the computer did boot initially and a fatal Lua error occurred which was not caught by the OS or [[UEFI]], the stacktrace is also shown in this output.&lt;br /&gt;
* The Ac IP Address of this computer&lt;br /&gt;
&lt;br /&gt;
=== Peripheral info ===&lt;br /&gt;
Blocks that act as device cable peripherals also have a unique, numeric id assigned to them which is accessible via the property &amp;lt;code&amp;gt;.uniqueId&amp;lt;/code&amp;gt;. This is is also shown on block right-click, making it an ideal way for finding the correct peripheral if you have multiple of the same type.&lt;br /&gt;
&lt;br /&gt;
=== Cluster info ===&lt;br /&gt;
For any blocks that support connecting to cables but are not just cables, the debugger lists all connected cable clusters and all participants in each cluster. For brevity, participants are only listed for the first occurrence of a given network id, but networks with the same id also share the same participants.&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Adapter&amp;diff=310</id>
		<title>Adapter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Adapter&amp;diff=310"/>
		<updated>2026-09-07T02:12:11Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Adapter block.png|alt=Adapter block|thumb|Adapter block]]&lt;br /&gt;
This block allows you to interact with non [[Advanced Computers]] blocks, such as the vanilla Minecraft jukebox, or blocks from other addon mods. It also offers special functionality for interacting with another [[Computer]]. The provided functionality changes based on the block that it is facing.&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;adapter&amp;lt;/code&amp;gt; component, offering the following properties/methods regardless of the block placed in front of it:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AdapterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AdapterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getBlockName()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the name of the block that it is facing at. E.g. &amp;lt;code&amp;gt;minecraft:air&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;minecraft:jukebox&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
The remaining properties / methods are only available when the adapter is facing the respective block.&lt;br /&gt;
&lt;br /&gt;
=== Jukebox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Jukebox properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;isPlaying&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Whether the jukebox is currently playing music.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;containedItem&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The name of the currently contained item, e.g. &amp;lt;code&amp;gt;minecraft:music_disc_otherside&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;recordName&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The fancy title of the music disc that is currently playing, e.g. &amp;lt;code&amp;gt;Lena Raine - otherside&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Jukebox methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:restartPlaying()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Starts or restarts the current track.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:eject()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Ejects the current music disc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Noteblock ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Noteblock properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;instrument&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The name of the instrument that this noteblock is representing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;notePitch&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|READWRITE&lt;br /&gt;
|The current pitch of the note that would be played.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Computer (Advanced Computers) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Computer properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;runState&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The computer&#039;s runstate, see [[Computer]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;crashReason&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The crashReason that can also be read via the [[Debugger]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Future content ==&lt;br /&gt;
{{Future Content}}&lt;br /&gt;
&lt;br /&gt;
=== ME Interface (Applied Energistics 2) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ME Interface methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:search(partialName:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a table of at most 1000 of the first items that match the given name. The keys of the table are the full item names and the associated values are the quantities of each item.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getCount(fullName:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns how much of the given item is available in the storage system.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:extract(fullName:string, direction:int, maxQuantity:int)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Tries to push the given amount of the given item into the adjacent inventory on the side given by &amp;lt;code&amp;gt;direction&amp;lt;/code&amp;gt;, relative to the interface block. Returns the actual quantity that was extracted.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Redstone_IO&amp;diff=309</id>
		<title>Redstone IO</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Redstone_IO&amp;diff=309"/>
		<updated>2026-09-07T02:11:40Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:RedstoneIoBlock.png|alt=Redstone IO block|thumb|Redstone IO block]]&lt;br /&gt;
The Redstone IO block provides support for reading and setting redstone signals. It even supports specifying signal levels.&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;itemInterface&amp;lt;/code&amp;gt; component, offering methods shown below. For information on the side argument, see [[API:Sides]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+RedstoneIoUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ RedstoneIoUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getInput(side:integer)&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;|| Returns the current signal strength that is supplied to the redstone io block on the given side.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:setOutput(side:integer, level:integer|boolean)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;|| Sets the redstone signal outputted by the redstone io block on the given side. A value of true/false is interpreted as 15 and 0 respectively.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Item_Interface&amp;diff=308</id>
		<title>Item Interface</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Item_Interface&amp;diff=308"/>
		<updated>2026-09-07T02:10:40Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ItemInterfaceThumb.png|alt=Item interface block|thumb|Item interface block]]&lt;br /&gt;
The Item Interface allows interacting with in-world inventories and moving items between inventories of blocks that are adjacent to the item interface. A basic example would be reading inventory contents, or making a sorting system that automatically voids certain items by dropping them into lava.&lt;br /&gt;
[[File:ItemInterfaceExampleSetup.png|alt=Example setup utilizing the item interface to transfer items between two chests and a dropper.|thumb|250x250px|Example setup utilizing the item interface to transfer items between two chests and a dropper.]]&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;itemInterface&amp;lt;/code&amp;gt; component, offering methods shown below. For information on the side argument, see [[API:Sides]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ItemInterfaceUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ItemInterfaceUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getNeighborBlockName(side:integer)&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;|| Returns the name of the block that is connected on that side, e.g. &amp;lt;code&amp;gt;minecraft:chest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;minecraft:air&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getNeighborSlotCount(side:integer)&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;|| Returns the number of slots of the given inventory.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:moveItemStackFromTo(sideSource:integer, slotSource:integer, sideDest:integer, slotDest:integer[, maxAmount:integer])&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|Moves the maximum amount of items from the given &#039;&#039;source side&#039;&#039; and &#039;&#039;source slot&#039;&#039; to the given &#039;&#039;destination side&#039;&#039; and &#039;&#039;destination slot&#039;&#039;. If &amp;lt;code&amp;gt;maxAmount&amp;lt;/code&amp;gt; is omitted, it defaults to &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;2^{31}-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getStackInSlot(side:integer, slot:integer)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns information about the itemstack in the slot of the inventory at the given side. This will be a table with the following entries: &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;stackSize&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxStackSize&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;damage&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxDamage&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hasNbt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;isEdible&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Screen&amp;diff=307</id>
		<title>Screen</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Screen&amp;diff=307"/>
		<updated>2026-09-07T02:10:21Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Ingame screens.png|alt=Screens in Minecraft|thumb|Screens in Minecraft]]&lt;br /&gt;
Similar to [[Computer|computers]], screens are offered in different tiers. For now, there is no technical difference between the screens. In the future they will differ by their feature set. Particularly, the iron tier will add support for color rendering and diamond will add touch-support on top of that.&lt;br /&gt;
&lt;br /&gt;
Screens add several events that are listed in the [[Computer#Machine events|Machine events section]] of [[Computer]]. These events include the ability to detect keypresses and pasting the clipboard via middle-mouse-button. intuitively, screens can be right-clicked to bring up a GUI which displays the text in a more readable form and also accepts keyboard input and pasting. &lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
While the screen does provide a ScreenUD component, this component does not provide any direct functionality. Rendering is performed by the virtual [[Gpu]] component which also allows allocating and binding a [[Gpu#TextBufferUD|TextBuffer]] to this screen. That way multiple displays can use the same buffer and will automatically display the same content.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ScreenUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Punchcard_Reader&amp;diff=306</id>
		<title>Punchcard Reader</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Punchcard_Reader&amp;diff=306"/>
		<updated>2026-09-07T02:08:59Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Punchcard Reader.png|alt=Punchcard Reader block|thumb|Punchcard Reader block]]&lt;br /&gt;
Besides the [[Punchcard Machine]], this is the second block needed for using punch cards. It is capable of reading the [[Punchcard]] that is currently in the reader-slot (see the image below). It is also capable of shifting items from right-to-left in the &#039;Input slots&#039; row, then into the &#039;Reader slot&#039; and then left-to-right into and in the &#039;Output slots&#039; row.&lt;br /&gt;
[[File:Punchcard_Reader_GUI.png|alt=Punchcard Reader GUI|frame|none|Punchcard Reader GUI]]&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;punchcardReader&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ PunchcardReaderUD component properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hasCardInReader&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt; || READ || Returns whether a punchcard is located in the reader slot.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;unreadCardCnt&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Returns how many punchcards are located in the top Input slot row, excluding the reader slot.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;freeOutSlotCnt&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Returns how many slots of the Output slots are empty, excluding the reader slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ PunchcardReaderUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:read(shiftCards:boolean)&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; || style=&amp;quot;padding:0;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! shiftCards !! Action&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; || Returns the contents of the card in the reader slot, or errors if none exists&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; || Shifts the cards downwards if reader slot is empty, then performs a regular read, then shifts again. If a card was already in the slot, the initial shift is skipped&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:shift()&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;|| Shifts any existing card in the reader slot down into the output slots and shifts those to the right. Then shifts the input slots to the left, attempting to put a punchcard into the reader slot. &#039;&#039;&#039;Returns whether the inventory was modified&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Mainboard_Programmer&amp;diff=305</id>
		<title>Mainboard Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Mainboard_Programmer&amp;diff=305"/>
		<updated>2026-09-07T02:08:43Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Mainboard programmer block.png|alt=Mainboard Programmer block|thumb|Mainboard Programmer block]]&lt;br /&gt;
Sometimes you may wish to modify a [[Mainboard]] that is not located in the current [[Computer]]. This is precisely the purpose of the Mainboard Programmer block. To modify a mainboard, simply put it into the block&#039;s GUI and run any of the component API methods below.&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;mainboardProgrammer&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MainboardProgrammerUD component properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;containsMainboard&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt; || READ || Returns whether a mainboard is located in the GUI slot. If this is false, most methods will throw an error.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MainboardProgrammerUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getMainboardTier()&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt; || Returns the tier of the mainboard, ranging from 1 to 3.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:setUefiData(data:string)&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;|| Sets the executable [[UEFI]] data to the given string.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getUefiData()&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Returns the executable UEFI data.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=304</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=304"/>
		<updated>2026-09-07T02:08:34Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter block.png|alt=Digital Crafter block|thumb|Digital Crafter block]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID tied to this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemsByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:searchItemsByDisplayName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;Torch&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Redstone Lamp&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Mainboard_Programmer&amp;diff=303</id>
		<title>Mainboard Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Mainboard_Programmer&amp;diff=303"/>
		<updated>2026-09-07T02:06:59Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Mainboard programmer block.png|alt=Mainboard Programmer block|thumb|Mainboard Programmer block]]&lt;br /&gt;
Sometimes you may wish to modify a [[Mainboard]] that is not located in the current [[Computer]]. This is precisely the purpose of the Mainboard Programmer block. To modify a mainboard, simply put it into the block&#039;s GUI and run any of the component API methods below.&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;mainboardProgrammer&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MainboardProgrammerUD component properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID representing this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;containsMainboard&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt; || READ || Returns whether a mainboard is located in the GUI slot. If this is false, most methods will throw an error.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MainboardProgrammerUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getMainboardTier()&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt; || Returns the tier of the mainboard, ranging from 1 to 3.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:setUefiData(data:string)&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;|| Sets the executable [[UEFI]] data to the given string.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getUefiData()&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; || Returns the executable UEFI data.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=302</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=302"/>
		<updated>2026-09-07T02:06:13Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter block.png|alt=Digital Crafter block|thumb|Digital Crafter block]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uniqueId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A unique numeric ID representing this peripheral device, generated on block placement and persistent across restarts.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemsByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:searchItemsByDisplayName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string in the format &amp;lt;code&amp;gt;Torch&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Redstone Lamp&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=301</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=301"/>
		<updated>2026-09-04T22:23:36Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter block.png|alt=Digital Crafter block|thumb|Digital Crafter block]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemsByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Internet&amp;diff=300</id>
		<title>Internet</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Internet&amp;diff=300"/>
		<updated>2026-09-04T20:35:50Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The InternetUD component allows making real-world [https://simple.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP(s)] requests. In order to be able to send HTTP(s) requests, make sure the current computer is connected to a [[WAN Router]] either directly via [[Network Cable]] or indirectly through [[Network Router|Network Routers]]. &lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
By default, requests to local IP addresses are blocked (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://127.0.0.1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;). Domains are not filtered. You can allow access to local IPs by disabling the filtering in the config file.&lt;br /&gt;
{{Caution|Disabling this filtering will allow ingame computers to access webservices on the server&#039;s local machine or network. This could pose a security threat if any of those local webservices assume local traffic to be trustworthy. Be careful!}}&lt;br /&gt;
If you wish, HTTP(s) functionality can also be disabled entirely in the config file. This completely removes the ability to make any kind of HTTP(s) requests. &lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
This APi is provided by the virtual &amp;lt;code&amp;gt;internet&amp;lt;/code&amp;gt; component.:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ InternetUD component properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;isHttpEnabled&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || READ || Returns whether HTTP(s) is enabled at all. True by default, but can be changed in the server&#039;s config. &#039;&#039;&#039;Required to be true in order to use any methods.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;isConnectedToWan&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Returns whether the current computer can reach a WAN router via the network. &#039;&#039;&#039;Required to be true in order to use any methods.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ InternetUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Returns !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:sendHttpRequest(url:string&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;[, method:string&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;[, postData:string&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;[, headers:table]]])&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;HttpResponseUD&amp;lt;/code&amp;gt;&lt;br /&gt;
|Asynchronously sends an HTTP(s) request to the given URL with the given request method (e.g. GET, POST, etc.). &lt;br /&gt;
If the request method is set to something supporting a post body, you may provide one as a string in &amp;lt;code&amp;gt;postData&amp;lt;/code&amp;gt;. Otherwise &amp;lt;code&amp;gt;postData&amp;lt;/code&amp;gt; must be set to &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;. &lt;br /&gt;
Headers may be provided as a table consisting of string keys and string values.&lt;br /&gt;
&#039;&#039;&#039;The request method TRACE is not allowed for security reasons.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Handling responses ===&lt;br /&gt;
Upon making an HTTP(s) request you are provided with an &amp;lt;code&amp;gt;HttpResponseUD&amp;lt;/code&amp;gt; object offering the following functionality.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ HttpResponseUD properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;responseAvailable&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || READ || Returns whether this HTTP(s) request has been completed and therefore a response is available.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ HttpResponseUD methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Returns !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:waitForCompletion()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Blocks until &amp;lt;code&amp;gt;responseAvailable&amp;lt;/code&amp;gt; is true. All other &#039;&#039;functions&#039;&#039; implicitly call this prior to executing and thus show the same behaviour.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getStatusCode()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the [[wikipedia:List_of_HTTP_status_codes|HTTP status]] code of the response. Response codes in the 2xx range typically indicate success.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getResponseBody()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the response body as a string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getResponseBodySize()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the length of the string that will be returned by &amp;lt;code&amp;gt;:getResponseBody()&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getResponseHeaders()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a table listing all response headers. Headers with multiple values are concatenated using commas as a delimeter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Internet&amp;diff=299</id>
		<title>Internet</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Internet&amp;diff=299"/>
		<updated>2026-09-04T20:35:31Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The InternetUD component allows making real-world [https://simple.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP(s)] requests. In order to be able to send HTTP(s) requests, make sure the current computer is connected to a [[WAN Router]] either directly via [[Network Cable]] or indirectly through [[Network Router|Network Routers]]. &lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
By default, requests to local IP addresses are blocked (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://127.0.0.1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;). Domains are not filtered. You can allow access to local IPs by disabling the filtering in the config file.&lt;br /&gt;
{{Caution|Disabling this filtering will allow ingame computers to access webservices on the server&#039;s local machine or network. This could pose a security threat if any of those local webservices assume local traffic to be trustworthy. Be careful!}}&lt;br /&gt;
If you wish, HTTP(s) functionality can also be disabled entirely in the config file. This completely removes the ability to make any kind of HTTP(s) requests. &lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
This APi is provided by the virtual &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;ernet&amp;lt;/code&amp;gt; component.:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ InternetUD component properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;isHttpEnabled&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || READ || Returns whether HTTP(s) is enabled at all. True by default, but can be changed in the server&#039;s config. &#039;&#039;&#039;Required to be true in order to use any methods.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;isConnectedToWan&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Returns whether the current computer can reach a WAN router via the network. &#039;&#039;&#039;Required to be true in order to use any methods.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ InternetUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Returns !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:sendHttpRequest(url:string&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;[, method:string&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;[, postData:string&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;[, headers:table]]])&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;HttpResponseUD&amp;lt;/code&amp;gt;&lt;br /&gt;
|Asynchronously sends an HTTP(s) request to the given URL with the given request method (e.g. GET, POST, etc.). &lt;br /&gt;
If the request method is set to something supporting a post body, you may provide one as a string in &amp;lt;code&amp;gt;postData&amp;lt;/code&amp;gt;. Otherwise &amp;lt;code&amp;gt;postData&amp;lt;/code&amp;gt; must be set to &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;. &lt;br /&gt;
Headers may be provided as a table consisting of string keys and string values.&lt;br /&gt;
&#039;&#039;&#039;The request method TRACE is not allowed for security reasons.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Handling responses ===&lt;br /&gt;
Upon making an HTTP(s) request you are provided with an &amp;lt;code&amp;gt;HttpResponseUD&amp;lt;/code&amp;gt; object offering the following functionality.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ HttpResponseUD properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;responseAvailable&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || READ || Returns whether this HTTP(s) request has been completed and therefore a response is available.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ HttpResponseUD methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Returns !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:waitForCompletion()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Blocks until &amp;lt;code&amp;gt;responseAvailable&amp;lt;/code&amp;gt; is true. All other &#039;&#039;functions&#039;&#039; implicitly call this prior to executing and thus show the same behaviour.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getStatusCode()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the [[wikipedia:List_of_HTTP_status_codes|HTTP status]] code of the response. Response codes in the 2xx range typically indicate success.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getResponseBody()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the response body as a string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getResponseBodySize()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the length of the string that will be returned by &amp;lt;code&amp;gt;:getResponseBody()&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getResponseHeaders()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a table listing all response headers. Headers with multiple values are concatenated using commas as a delimeter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Internet&amp;diff=298</id>
		<title>Internet</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Internet&amp;diff=298"/>
		<updated>2026-09-04T20:35:14Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The InternetUD component allows making real-world [https://simple.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP(s)] requests. In order to be able to send HTTP(s) requests, make sure the current computer is connected to a [[WAN Router]] either directly via [[Network Cable]] or indirectly through [[Network Router|Network Routers]]. &lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
By default, requests to local IP addresses are blocked (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://127.0.0.1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;). Domains are not filtered. You can allow access to local IPs by disabling the filtering in the config file.&lt;br /&gt;
{{Caution|Disabling this filtering will allow ingame computers to access webservices on the server&#039;s local machine or network. This could pose a security threat if any of those local webservices assume local traffic to be trustworthy. Be careful!}}&lt;br /&gt;
If you wish, HTTP(s) functionality can also be disabled entirely in the config file. This completely removes the ability to make any kind of HTTP(s) requests. &lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
This APi is provided by the virtual &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;ternet&amp;lt;/code&amp;gt; component.:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ InternetUD component properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;isHttpEnabled&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || READ || Returns whether HTTP(s) is enabled at all. True by default, but can be changed in the server&#039;s config. &#039;&#039;&#039;Required to be true in order to use any methods.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;isConnectedToWan&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Returns whether the current computer can reach a WAN router via the network. &#039;&#039;&#039;Required to be true in order to use any methods.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ InternetUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Returns !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:sendHttpRequest(url:string&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;[, method:string&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;[, postData:string&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;[, headers:table]]])&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;HttpResponseUD&amp;lt;/code&amp;gt;&lt;br /&gt;
|Asynchronously sends an HTTP(s) request to the given URL with the given request method (e.g. GET, POST, etc.). &lt;br /&gt;
If the request method is set to something supporting a post body, you may provide one as a string in &amp;lt;code&amp;gt;postData&amp;lt;/code&amp;gt;. Otherwise &amp;lt;code&amp;gt;postData&amp;lt;/code&amp;gt; must be set to &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;. &lt;br /&gt;
Headers may be provided as a table consisting of string keys and string values.&lt;br /&gt;
&#039;&#039;&#039;The request method TRACE is not allowed for security reasons.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Handling responses ===&lt;br /&gt;
Upon making an HTTP(s) request you are provided with an &amp;lt;code&amp;gt;HttpResponseUD&amp;lt;/code&amp;gt; object offering the following functionality.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ HttpResponseUD properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;responseAvailable&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || READ || Returns whether this HTTP(s) request has been completed and therefore a response is available.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ HttpResponseUD methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Returns !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:waitForCompletion()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Blocks until &amp;lt;code&amp;gt;responseAvailable&amp;lt;/code&amp;gt; is true. All other &#039;&#039;functions&#039;&#039; implicitly call this prior to executing and thus show the same behaviour.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getStatusCode()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the [[wikipedia:List_of_HTTP_status_codes|HTTP status]] code of the response. Response codes in the 2xx range typically indicate success.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getResponseBody()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the response body as a string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getResponseBodySize()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the length of the string that will be returned by &amp;lt;code&amp;gt;:getResponseBody()&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getResponseHeaders()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a table listing all response headers. Headers with multiple values are concatenated using commas as a delimeter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Adapter&amp;diff=297</id>
		<title>Adapter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Adapter&amp;diff=297"/>
		<updated>2026-08-31T05:38:53Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Adapter block.png|alt=Adapter block|thumb|Adapter block]]&lt;br /&gt;
This block allows you to interact with non [[Advanced Computers]] blocks, such as the vanilla Minecraft jukebox, or blocks from other addon mods. It also offers special functionality for interacting with another [[Computer]]. The provided functionality changes based on the block that it is facing.&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;adapter&amp;lt;/code&amp;gt; component, offering the following properties regardless of the block placed in front of it:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AdapterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getBlockName()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the name of the block that it is facing at. E.g. &amp;lt;code&amp;gt;minecraft:air&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;minecraft:jukebox&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
The remaining properties / methods are only available when the adapter is facing the respective block.&lt;br /&gt;
&lt;br /&gt;
=== Jukebox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Jukebox properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;isPlaying&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Whether the jukebox is currently playing music.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;containedItem&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The name of the currently contained item, e.g. &amp;lt;code&amp;gt;minecraft:music_disc_otherside&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;recordName&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The fancy title of the music disc that is currently playing, e.g. &amp;lt;code&amp;gt;Lena Raine - otherside&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Jukebox methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:restartPlaying()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Starts or restarts the current track.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:eject()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Ejects the current music disc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Noteblock ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Noteblock properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;instrument&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The name of the instrument that this noteblock is representing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;notePitch&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|READWRITE&lt;br /&gt;
|The current pitch of the note that would be played.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Computer (Advanced Computers) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Computer properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;runState&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The computer&#039;s runstate, see [[Computer]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;crashReason&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The crashReason that can also be read via the [[Debugger]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Future content ==&lt;br /&gt;
{{Future Content}}&lt;br /&gt;
&lt;br /&gt;
=== ME Interface (Applied Energistics 2) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ME Interface methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:search(partialName:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a table of at most 1000 of the first items that match the given name. The keys of the table are the full item names and the associated values are the quantities of each item.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getCount(fullName:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns how much of the given item is available in the storage system.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:extract(fullName:string, direction:int, maxQuantity:int)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|Tries to push the given amount of the given item into the adjacent inventory on the side given by &amp;lt;code&amp;gt;direction&amp;lt;/code&amp;gt;, relative to the interface block. Returns the actual quantity that was extracted.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Template:Future_Content&amp;diff=296</id>
		<title>Template:Future Content</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Template:Future_Content&amp;diff=296"/>
		<updated>2026-08-31T05:24:19Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Places a Future Content box, indicating that this article describes experimental content that may or may not be added.&amp;quot;,&lt;br /&gt;
    &amp;quot;params&amp;quot;: {&lt;br /&gt;
        &amp;quot;1&amp;quot;: {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Extra message suffix&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;: &amp;quot;Message with additional notes&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;prefix text&amp;lt;/noinclude&amp;gt;&amp;lt;div class=&amp;quot;cdx-message cdx-message--block&amp;quot; style=&amp;quot;&lt;br /&gt;
    background-color: #2c4647;&lt;br /&gt;
    border-color: #00fdff;&lt;br /&gt;
&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;ac-background-img-experimental&amp;quot; style=&amp;quot;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    width: 32px;&lt;br /&gt;
    height: 32px;&lt;br /&gt;
    align-self: center;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;cdx-message__content&amp;quot;&amp;gt;This section describes unreleased, experimental content that is still in development which might undergo significant changes or be removed entirely. {{{1|}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;suffix text&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Redstone_IO&amp;diff=295</id>
		<title>Redstone IO</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Redstone_IO&amp;diff=295"/>
		<updated>2026-08-30T22:19:49Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:RedstoneIoBlock.png|alt=Redstone IO block|thumb|Redstone IO block]]&lt;br /&gt;
The Redstone IO block provides support for reading and setting redstone signals. It even supports specifying signal levels.&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;itemInterface&amp;lt;/code&amp;gt; component, offering methods shown below. For information on the side argument, see [[API:Sides]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ItemInterfaceUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getInput(side:integer)&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;|| Returns the current signal strength that is supplied to the redstone io block on the given side.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:setOutput(side:integer, level:integer|boolean)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;|| Sets the redstone signal outputted by the redstone io block on the given side. A value of true/false is interpreted as 15 and 0 respectively.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Item_Interface&amp;diff=294</id>
		<title>Item Interface</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Item_Interface&amp;diff=294"/>
		<updated>2026-08-27T16:01:07Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ItemInterfaceThumb.png|alt=Item interface block|thumb|Item interface block]]&lt;br /&gt;
The Item Interface allows interacting with in-world inventories and moving items between inventories of blocks that are adjacent to the item interface. A basic example would be reading inventory contents, or making a sorting system that automatically voids certain items by dropping them into lava.&lt;br /&gt;
[[File:ItemInterfaceExampleSetup.png|alt=Example setup utilizing the item interface to transfer items between two chests and a dropper.|thumb|250x250px|Example setup utilizing the item interface to transfer items between two chests and a dropper.]]&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;itemInterface&amp;lt;/code&amp;gt; component, offering methods shown below. For information on the side argument, see [[API:Sides]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ItemInterfaceUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getNeighborBlockName(side:integer)&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;|| Returns the name of the block that is connected on that side, e.g. &amp;lt;code&amp;gt;minecraft:chest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;minecraft:air&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:getNeighborSlotCount(side:integer)&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;|| Returns the number of slots of the given inventory.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:moveItemStackFromTo(sideSource:integer, slotSource:integer, sideDest:integer, slotDest:integer[, maxAmount:integer])&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|Moves the maximum amount of items from the given &#039;&#039;source side&#039;&#039; and &#039;&#039;source slot&#039;&#039; to the given &#039;&#039;destination side&#039;&#039; and &#039;&#039;destination slot&#039;&#039;. If &amp;lt;code&amp;gt;maxAmount&amp;lt;/code&amp;gt; is omitted, it defaults to &amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;2^{31}-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getStackInSlot(side:integer, slot:integer)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns information about the itemstack in the slot of the inventory at the given side. This will be a table with the following entries: &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;stackSize&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxStackSize&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;damage&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxDamage&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hasNbt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;isEdible&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=ManagedMassStorage&amp;diff=293</id>
		<title>ManagedMassStorage</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=ManagedMassStorage&amp;diff=293"/>
		<updated>2026-08-27T02:26:37Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The ManagedMassStorageUD component is what backs [[Hard Disk Drive|Hard Disk Drives]] and [[Floppy Disk|Floppy Disks]]. This virtual component offers the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ManagedMassStorageUD component properties&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Read/Write !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;totalCapacityBytes&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt; || READ || Total capacity of this drive (capacity is currently not limited, so this is not meaningful currently).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storageFamilyName&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|A string representing the type of storage medium, e.g. &amp;lt;code&amp;gt;hdd&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;floppy&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;storageApiType&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Simply &amp;lt;code&amp;gt;managed&amp;lt;/code&amp;gt; for now. [[UnmanagedMassStorage]] would state &amp;lt;code&amp;gt;unmanaged&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;diskId&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The unique id of this disk.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ManagedMassStorageUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Returns !! Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; | &amp;lt;code&amp;gt;:open(string:filePath[, string:mode=r])&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;LuaFsFileUD&amp;lt;/code&amp;gt;|| style=&amp;quot;padding:0;&amp;quot;|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0;&amp;quot;&lt;br /&gt;
!mode&lt;br /&gt;
!Attempted action&lt;br /&gt;
|-&lt;br /&gt;
|r&lt;br /&gt;
|Open an existing file in read-only mode.&lt;br /&gt;
|-&lt;br /&gt;
|r+&lt;br /&gt;
|Open an existing file in read-write mode.&lt;br /&gt;
|-&lt;br /&gt;
|w&lt;br /&gt;
|Open a potentially existent file, erase the contents and open it in write-only mode.&lt;br /&gt;
|-&lt;br /&gt;
|w+&lt;br /&gt;
|Same as w but also allows reading.&lt;br /&gt;
|-&lt;br /&gt;
|a&lt;br /&gt;
|Open or create a new file, do not erase the contents, allow only appending.&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:list(string:path)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a list of file and directory names in the given directory. Directory names are indicated by a trailing slash.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:fileExists(string:path)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns whether the given path exists and represents a file&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:directoryExists(string:path)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns whether the given path exists and represents a directory&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:delete(string:path)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Deletes the specified file or directory. Directories are deleted recursively.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:move(string:srcPath, string:destPath)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Moves the specified file or directory to the destination path.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:makeDirection(string:path)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Creates a new directory at the specified path.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:spaceUsed([string:path=&amp;quot;/&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;long&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the amount of space used on this storage device. If a path is given, only the space in this directory is measured.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LuaFsFileUD ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ManagedMassStorageUD component methods&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Returns !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;:read(integer:count)&amp;lt;/code&amp;gt;|| &amp;lt;code&amp;gt;string?&amp;lt;/code&amp;gt;|| Reads a string from the handle&#039;s current position. Reads as much as possible, but at most &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt; characters. If count is set to &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;, as many chracters as possible are returned.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:write(string:s)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Writes the given string to the handle&#039;s current position.&lt;br /&gt;
|- style=&amp;quot;white-space: nowrap;&amp;quot; |&lt;br /&gt;
|&amp;lt;code&amp;gt;:seek(string:relativeTo, integer:offset)&amp;lt;/code&amp;gt; &lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|style=&amp;quot;white-space: wrap;&amp;quot; |Adjusts the handle&#039;s current position as specified by &amp;lt;code&amp;gt;relativeTo&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt;. Valid values for relativeTo are &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;relative&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:flush()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Writes all changes to the host filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:close()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Closes the handle, automatically flushing.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=File:Adapter_thumb.png&amp;diff=292</id>
		<title>File:Adapter thumb.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=File:Adapter_thumb.png&amp;diff=292"/>
		<updated>2026-08-26T14:35:22Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Adapter&amp;diff=291</id>
		<title>Adapter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Adapter&amp;diff=291"/>
		<updated>2026-08-26T14:17:19Z</updated>

		<summary type="html">&lt;p&gt;GHXX: Created page with &amp;quot;Adapter block This block allows you to interact with non Advanced Computers blocks, such as the vanilla Minecraft jukebox, or blocks from other addon mods. It also offers special functionality for interacting with another Computer. The provided functionality changes based on the block that it is facing. == Provided component == This block provides the &amp;lt;code&amp;gt;adapter&amp;lt;/code&amp;gt; component, offering the following propert...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Adapter block.png|alt=Adapter block|thumb|Adapter block]]&lt;br /&gt;
This block allows you to interact with non [[Advanced Computers]] blocks, such as the vanilla Minecraft jukebox, or blocks from other addon mods. It also offers special functionality for interacting with another [[Computer]]. The provided functionality changes based on the block that it is facing.&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;adapter&amp;lt;/code&amp;gt; component, offering the following properties regardless of the block placed in front of it:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+AdapterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:getBlockName()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the name of the block that it is facing at. E.g. &amp;lt;code&amp;gt;minecraft:air&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;minecraft:jukebox&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
The remaining properties / methods are only available when the adapter is facing the respective block.&lt;br /&gt;
&lt;br /&gt;
=== Jukebox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Jukebox properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;isPlaying&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|Whether the jukebox is currently playing music.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;containedItem&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The name of the currently contained item, e.g. &amp;lt;code&amp;gt;minecraft:music_disc_otherside&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;recordName&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The fancy title of the music disc that is currently playing, e.g. &amp;lt;code&amp;gt;Lena Raine - otherside&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Jukebox methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:restartPlaying()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Starts or restarts the current track.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:eject()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Ejects the current music disc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Noteblock ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Noteblock properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;instrument&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The name of the instrument that this noteblock is representing.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;notePitch&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|READWRITE&lt;br /&gt;
|The current pitch of the note that would be played.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Computer (Advanced Computers) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Computer properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;runState&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The computer&#039;s runstate, see [[Computer]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;crashReason&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The crashReason that can also be read via the [[Debugger]].&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=File:Adapter_block.png&amp;diff=290</id>
		<title>File:Adapter block.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=File:Adapter_block.png&amp;diff=290"/>
		<updated>2026-08-26T14:03:55Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=File:Digital_crafter_block.png&amp;diff=289</id>
		<title>File:Digital crafter block.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=File:Digital_crafter_block.png&amp;diff=289"/>
		<updated>2026-08-26T14:02:32Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=288</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=288"/>
		<updated>2026-08-26T14:00:45Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter block.png|alt=Digital Crafter block|thumb|Digital Crafter block]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Template:Navbox_content&amp;diff=287</id>
		<title>Template:Navbox content</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Template:Navbox_content&amp;diff=287"/>
		<updated>2026-08-26T02:33:29Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{Navbox&lt;br /&gt;
| title=Content in [[Advanced Computers]]&lt;br /&gt;
| Blocks&lt;br /&gt;
|+ [[File:Computer block wood thumbnail.png|16px]] [[File:Computer block iron thumbnail.png|16px]] [[File:Computer block diamond thumbnail.png|16px]] [[File:Computer block netherite thumbnail.png|16px]] [[File:Computer block creative thumbnail.png|16px]] [[Computer]]&lt;br /&gt;
|+ [[File:Screen block wood thumbnail.png|16px]] [[File:Screen block iron thumbnail.png|16px]] [[File:Screen block diamond thumbnail.png|16px]] [[Screen]]&lt;br /&gt;
|+ [[File:Keycard reader thumbnail.png|16px]] [[Keycard Reader]]&lt;br /&gt;
|+ [[File:Mainboard programmer thumbnail.png|16px]] [[Mainboard Programmer]]&lt;br /&gt;
|+ [[File:Punchcard machine thumbnail.png|16px]] [[Punchcard Machine]]&lt;br /&gt;
|+ [[File:Punchcard reader thumbnail.png|16px]] [[Punchcard Reader]]&lt;br /&gt;
|+ [[File:Item interface thumbnail.png|16px]] [[Item Interface]]&lt;br /&gt;
|+ [[File:Redstone io thumbnail.png|16px]] [[Redstone IO]]&lt;br /&gt;
|+ [[File:Wan router thumbnail.png|16px]] [[File:Wan router cheap thumbnail.png|16px]] [[WAN Router]]&lt;br /&gt;
|+ [[File:Network router thumbnail.png|16px]] [[Network Router]]&lt;br /&gt;
|+ [[File:Digital_crafter_thumb.png|16px]] [[Digital Crafter]]&lt;br /&gt;
|+ [[File:Adapter_thumb.png|16px]] [[Adapter]]&lt;br /&gt;
| Items&lt;br /&gt;
|+ [[File:Hard disk drive iron thumbnail.png|16px]] [[File:Hard disk drive copper thumbnail.png|16px]] [[File:Hard disk drive gold thumbnail.png|16px]] [[File:Hard disk drive diamond thumbnail.png|16px]] [[File:Hard disk drive netherite thumbnail.png|16px]] [[Hard Disk Drive]]&lt;br /&gt;
|+ [[File:Keycard thumbnail.png|16px]] [[Keycard]]&lt;br /&gt;
|+ [[File:Advanced keycard thumbnail.png|16px]] [[Advanced Keycard]]&lt;br /&gt;
|+ [[File:Floppy disk thumbnail.png|16px]] [[File:Floppy disk premade acos thumbnail.png|16px]] [[Floppy Disk]]&lt;br /&gt;
|+ [[File:Mainboard t1 thumbnail.png|16px]] [[File:Mainboard t2 thumbnail.png|16px]] [[File:Mainboard t3 thumbnail.png|16px]] [[Mainboard]]&lt;br /&gt;
|+ [[File:Punchcard thumbnail.png|16px]] [[Punchcard]]&lt;br /&gt;
|+ [[File:Debugger thumbnail.png|16px]] [[Debugger]]&lt;br /&gt;
| Cables&lt;br /&gt;
|+ [[File:Device cable thumbnail.png|16px]] [[Device Cable]]&lt;br /&gt;
|+ [[File:Network cable thumbnail.png|16px]] [[Network Cable]]&lt;br /&gt;
| Virtual Components&lt;br /&gt;
|+ [[UEFI]] |+ [[NVRAM]] |+ [[ManagedMassStorage]] |+ [[UnmanagedMassStorage]] |+ [[Component Registry]] |+ [[Gpu]]|+ [[Internet]]|+ [[Network]]&lt;br /&gt;
| Other&lt;br /&gt;
|+ [[JLuaVM]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=JLuaVM&amp;diff=286</id>
		<title>JLuaVM</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=JLuaVM&amp;diff=286"/>
		<updated>2026-08-25T16:33:34Z</updated>

		<summary type="html">&lt;p&gt;GHXX: /* Additional standard library functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The JLuaVM, is the runtime that executes the Lua code that is running on computers in [[Advanced Computers]]. The source can be found [https://github.com/MidnightMages/JLuaVM on GitHub]. The most important feature for Advanced Computers is the ability to save and restore the Lua execution state, regardless of what Lua code may be loaded. We are not aware of any Java based Lua runtime being capable of this, hence why this project was born in the first place.&lt;br /&gt;
&lt;br /&gt;
While we try to keep things very similar, there are a few tiny differences, listed below. In the remainder of this article, LuaC refers to PUC-Rio&#039;s implementation of Lua. If you spot a difference between JLuaVM and LuaC which is not listed here, please open a ticket at https://github.com/MidnightMages/JLuaVM/issues with a snippet that functions differently between JLuaVM and LuaC.&lt;br /&gt;
&lt;br /&gt;
If you would like to contribute please see https://github.com/MidnightMages/JLuaVM/tree/master#contributing.&lt;br /&gt;
&lt;br /&gt;
== LuaC deviations ==&lt;br /&gt;
In these cases JLuaVM (referred to as &#039;we&#039;) behaves differently than LuaC, &#039;&#039;&#039;but we still fulfill the Lua specification&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Area&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Indexing of strings&lt;br /&gt;
|In LuaC indexing a string, where the index value &amp;lt;code&amp;gt;someIndex&amp;lt;/code&amp;gt; can be an arbitrary value, always evaluates to &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. We argue that this is inconsistent and is almost never wanted behaviour. Therefore we instead throw an error just like indexing any other non-indexable type.&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
(&amp;quot;someString&amp;quot;)[someIndex]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Length of strings&lt;br /&gt;
|We intentionally return the number of characters instead of the length in bytes.&lt;br /&gt;
|-&lt;br /&gt;
|assert&lt;br /&gt;
|Produces a slightly different error message. Further, the message argument (second argument) is &amp;lt;code&amp;gt;tostring()&amp;lt;/code&amp;gt;&#039;ed before printing. This means that when the second argument happens to be a boolean, we properly print the value instead of simply stating that it was a boolean.&lt;br /&gt;
The following snippet will raise an error (as the first argument is falsy) and the message is simply the constant &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; represented as a string.&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
assert(false, true)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ipairs&lt;br /&gt;
|In our case, ipairs only allows iterating over tables. LuaC would return nil when operating on a string and error when passing a type that is neither a string nor a table. For robustness we throw on all non-table arguments as it seems very unlikely that a string is passed intentionally.&lt;br /&gt;
|-&lt;br /&gt;
|pairs&lt;br /&gt;
|The order in which the items are returned may differ from LuaC.&lt;br /&gt;
|-&lt;br /&gt;
|table.insert&lt;br /&gt;
|In LuaC this function seems to behave differently depending on whether the table is a sequence or an actual dictionary. In our case table.insert behaves identical in both cases.&lt;br /&gt;
|-&lt;br /&gt;
|table.remove&lt;br /&gt;
|behaviour differs slightly as the table-length operator behaves differently.&lt;br /&gt;
|-&lt;br /&gt;
|Printing numbers&lt;br /&gt;
|We print numbers with a few more digits of precision.&lt;br /&gt;
|-&lt;br /&gt;
|Stacktraces are formatted differently&lt;br /&gt;
|Due to the lack of a &amp;lt;code&amp;gt;loadfile&amp;lt;/code&amp;gt; function, the chunkname is directly fed into stacktraces, allowing for specifying filenames, etc. without being surrounded by quotes. Also some things are named slightly different within the stacktrace. This indirectly also affects the &amp;lt;code&amp;gt;error(msg [, level])&amp;lt;/code&amp;gt; function when &amp;lt;code&amp;gt;msg&amp;lt;/code&amp;gt; is directly a &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;level == nil or level &amp;gt; 0&amp;lt;/code&amp;gt;, and thus, part of the stacktrace is appended.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lua language spec deviations ==&lt;br /&gt;
In this one case we &#039;&#039;&#039;do not&#039;&#039;&#039; follow the spec.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Area&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|math.randomseed(seed)&lt;br /&gt;
|This function does not accept two seeds, but instead only one. Similarly it also only returns one number. Extra arguments are ignored.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lua language spec extensions ==&lt;br /&gt;
We have also slightly extended the existing specification.&lt;br /&gt;
&lt;br /&gt;
=== OOP callable constants ===&lt;br /&gt;
The following expression is not syntactically allowed in LuaC: &amp;lt;code&amp;gt;&amp;quot;someString&amp;quot;:sub(1,3)&amp;lt;/code&amp;gt;. In LuaC this would need to instead be written as &amp;lt;code&amp;gt;(&amp;quot;someString&amp;quot;):sub(1,3)&amp;lt;/code&amp;gt;. But as there is no grammatical conflict, we simply treat them the same.&lt;br /&gt;
&lt;br /&gt;
=== Type Extension Methods ===&lt;br /&gt;
LuaC supports setting type-metatables using &amp;lt;code&amp;gt;debug.setmetatable&amp;lt;/code&amp;gt;, e.g. for the string type. This, to our knowledge, however only works on a global level, so you cannot easily configure this on a per-environment (as in &amp;lt;code&amp;gt;_ENV&amp;lt;/code&amp;gt;) setting.&lt;br /&gt;
&lt;br /&gt;
We have therefore added support for what we call &amp;quot;Type Extension Methods&amp;quot;, as they behave similarly to extension methods in C#. If an index operation fails and would normally result in an error, we try to perform a lookup in a subtable of &amp;lt;code&amp;gt;_EXT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, the following code &amp;lt;code&amp;gt;&amp;quot;test&amp;quot;:sub(1,3)&amp;lt;/code&amp;gt; is processed as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;test&amp;quot; is a string, hence is not indexable, nor can it contain a metatable, so we immediately check for an extension function (or throw an index error otherwise)&lt;br /&gt;
* Thus we check for &amp;lt;code&amp;gt;_ENV[&amp;quot;_EXT&amp;quot;][&amp;quot;string&amp;quot;][&amp;quot;sub&amp;quot;]&amp;lt;/code&amp;gt;, which by default does exist, as &amp;lt;code&amp;gt;_ENV._EXT.string&amp;lt;/code&amp;gt; is set to a table that contains most of the string-library functions.&lt;br /&gt;
&lt;br /&gt;
In more general terms we access &amp;lt;code&amp;gt;_ENV[&amp;quot;_EXT][NAME OF TYPE][NAME OF FUNCTION]&amp;lt;/code&amp;gt; (where &amp;lt;code&amp;gt;_ENV&amp;lt;/code&amp;gt; is often equivalent to &amp;lt;code&amp;gt;_G&amp;lt;/code&amp;gt;). If no match is found, we simply raise the usual error.&lt;br /&gt;
&lt;br /&gt;
== Additional standard library functions ==&lt;br /&gt;
This is a list of all additional callable, non-standard functions provided by JLuaVM.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Function&lt;br /&gt;
!Returns&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vm.listUdKeys(obj:userdata)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a table whose keys are all values that are readable or writable in the given userdata object &amp;lt;code&amp;gt;obj&amp;lt;/code&amp;gt;. The value of each key is either &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rw&amp;lt;/code&amp;gt;, depending on whether the key is readable writable or readwrite.&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |&amp;lt;code&amp;gt;coroutine.resumeWithTimeout(co:thread, timeout:number, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;padding:0;&amp;quot; |&amp;lt;code&amp;gt;true, ...&amp;lt;/code&amp;gt;&lt;br /&gt;
|The coroutine has yielded on its own. Any arguments supplied to &amp;lt;code&amp;gt;coroutine.yield(...)&amp;lt;/code&amp;gt;, are returned after &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;false, any:errorMessage&amp;lt;/code&amp;gt;&lt;br /&gt;
|The coroutine has errored.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;preempted&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|The coroutine has exceeded the execution &amp;lt;code&amp;gt;timeout&amp;lt;/code&amp;gt; (given in seconds) and has been forcefully paused. In this event &amp;lt;code&amp;gt;coroutine.status(co)&amp;lt;/code&amp;gt; will return &amp;lt;code&amp;gt;&amp;quot;preempted_resumable&amp;quot;&amp;lt;/code&amp;gt;. Any child coroutines that were currently running at the time of yielding will enter the state &amp;lt;code&amp;gt;&amp;quot;preempted_blocked&amp;quot;&amp;lt;/code&amp;gt;. Attempting to &amp;lt;code&amp;gt;resume()&amp;lt;/code&amp;gt; such &amp;lt;code&amp;gt;preempted_blocked&amp;lt;/code&amp;gt; coroutines will throw an error.&lt;br /&gt;
This is intended as a last-resort mechanism for task schedulers to interrupt uncooperative processes.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;coroutine.status(co:thread)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|For completeness, this function may return all of the LuaC states &amp;lt;code&amp;gt;suspended&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dead&amp;lt;/code&amp;gt; as well as &amp;lt;code&amp;gt;preempted_resumable&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;preempted_blocked&amp;lt;/code&amp;gt;.&lt;br /&gt;
Resumable states are &amp;lt;code&amp;gt;suspended&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;preempted_resumable&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
Further functionality that is NOT available in [[Advanced Computers]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Function&lt;br /&gt;
!Returns&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vm.pause()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Immediately pauses the current LuaVM.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=285</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=285"/>
		<updated>2026-08-25T16:31:14Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter thumb.png|alt=Digital crafter|thumb|Digital Crafter]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Template:Navbox_content&amp;diff=284</id>
		<title>Template:Navbox content</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Template:Navbox_content&amp;diff=284"/>
		<updated>2026-08-25T16:30:07Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{Navbox&lt;br /&gt;
| title=Content in [[Advanced Computers]]&lt;br /&gt;
| Blocks&lt;br /&gt;
|+ [[File:Computer block wood thumbnail.png|16px]] [[File:Computer block iron thumbnail.png|16px]] [[File:Computer block diamond thumbnail.png|16px]] [[File:Computer block netherite thumbnail.png|16px]] [[File:Computer block creative thumbnail.png|16px]] [[Computer]]&lt;br /&gt;
|+ [[File:Screen block wood thumbnail.png|16px]] [[File:Screen block iron thumbnail.png|16px]] [[File:Screen block diamond thumbnail.png|16px]] [[Screen]]&lt;br /&gt;
|+ [[File:Keycard reader thumbnail.png|16px]] [[Keycard Reader]]&lt;br /&gt;
|+ [[File:Mainboard programmer thumbnail.png|16px]] [[Mainboard Programmer]]&lt;br /&gt;
|+ [[File:Punchcard machine thumbnail.png|16px]] [[Punchcard Machine]]&lt;br /&gt;
|+ [[File:Punchcard reader thumbnail.png|16px]] [[Punchcard Reader]]&lt;br /&gt;
|+ [[File:Item interface thumbnail.png|16px]] [[Item Interface]]&lt;br /&gt;
|+ [[File:Redstone io thumbnail.png|16px]] [[Redstone IO]]&lt;br /&gt;
|+ [[File:Wan router thumbnail.png|16px]] [[File:Wan router cheap thumbnail.png|16px]] [[WAN Router]]&lt;br /&gt;
|+ [[File:Network router thumbnail.png|16px]] [[Network Router]]&lt;br /&gt;
|+ [[File:Digital_crafter_thumb.png|16px]] [[Digital Crafter]]&lt;br /&gt;
| Items&lt;br /&gt;
|+ [[File:Hard disk drive iron thumbnail.png|16px]] [[File:Hard disk drive copper thumbnail.png|16px]] [[File:Hard disk drive gold thumbnail.png|16px]] [[File:Hard disk drive diamond thumbnail.png|16px]] [[File:Hard disk drive netherite thumbnail.png|16px]] [[Hard Disk Drive]]&lt;br /&gt;
|+ [[File:Keycard thumbnail.png|16px]] [[Keycard]]&lt;br /&gt;
|+ [[File:Advanced keycard thumbnail.png|16px]] [[Advanced Keycard]]&lt;br /&gt;
|+ [[File:Floppy disk thumbnail.png|16px]] [[File:Floppy disk premade acos thumbnail.png|16px]] [[Floppy Disk]]&lt;br /&gt;
|+ [[File:Mainboard t1 thumbnail.png|16px]] [[File:Mainboard t2 thumbnail.png|16px]] [[File:Mainboard t3 thumbnail.png|16px]] [[Mainboard]]&lt;br /&gt;
|+ [[File:Punchcard thumbnail.png|16px]] [[Punchcard]]&lt;br /&gt;
|+ [[File:Debugger thumbnail.png|16px]] [[Debugger]]&lt;br /&gt;
| Cables&lt;br /&gt;
|+ [[File:Device cable thumbnail.png|16px]] [[Device Cable]]&lt;br /&gt;
|+ [[File:Network cable thumbnail.png|16px]] [[Network Cable]]&lt;br /&gt;
| Virtual Components&lt;br /&gt;
|+ [[UEFI]] |+ [[NVRAM]] |+ [[ManagedMassStorage]] |+ [[UnmanagedMassStorage]] |+ [[Component Registry]] |+ [[Gpu]]|+ [[Internet]]|+ [[Network]]&lt;br /&gt;
| Other&lt;br /&gt;
|+ [[JLuaVM]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=283</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=283"/>
		<updated>2026-08-25T16:29:19Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Digital crafter thumb.png|alt=Digital crafter|thumb|Digital crafter]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=282</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=282"/>
		<updated>2026-08-25T16:28:55Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Future Content}}&lt;br /&gt;
[[File:Digital crafter thumb.png|alt=Digital crafter|thumb|Digital crafter]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Every crafting operation is instant but may impose a delay that is computed as stated in the description of &amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;. The base cooldown of crafting operations is configurable in the mod config.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=281</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=281"/>
		<updated>2026-08-25T16:23:52Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Future Content}}&lt;br /&gt;
[[File:Digital crafter thumb.png|alt=Digital crafter|thumb|Digital crafter]]&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]]&lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
The crafter also come with an inventory of 27 slots from which the ingredients are taken. Extra-results, such as empty buckets when crafting a cake, are returned into this inventory again. The desired output, e.g. the cake, is either pushed upwards (into a block with inventory or ejected), or alternatively returned into the own inventory, depending on the &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=File:Digital_crafter_thumb.png&amp;diff=280</id>
		<title>File:Digital crafter thumb.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=File:Digital_crafter_thumb.png&amp;diff=280"/>
		<updated>2026-08-25T16:20:36Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;digital crafter thumb&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=279</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=279"/>
		<updated>2026-08-25T16:17:26Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Future Content}}&lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]] &lt;br /&gt;
A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=File:Digital_crafter_inventory_comparison.png&amp;diff=278</id>
		<title>File:Digital crafter inventory comparison.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=File:Digital_crafter_inventory_comparison.png&amp;diff=278"/>
		<updated>2026-08-25T16:15:59Z</updated>

		<summary type="html">&lt;p&gt;GHXX: GHXX uploaded a new version of File:Digital crafter inventory comparison.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;digital crafter inventory comparison&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=277</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=277"/>
		<updated>2026-08-25T16:15:46Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Future Content}}A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
[[File:Digital crafter inventory comparison.png|thumb|Digital crafter crafting a cake]] &lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=File:Digital_crafter_inventory_comparison.png&amp;diff=276</id>
		<title>File:Digital crafter inventory comparison.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=File:Digital_crafter_inventory_comparison.png&amp;diff=276"/>
		<updated>2026-08-25T16:14:57Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;digital crafter inventory comparison&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=275</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=275"/>
		<updated>2026-08-25T16:12:06Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Future Content}}A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;baseCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|The base cooldown after each &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; operation. The actual cooldown is given by &amp;lt;math&amp;gt;baseCooldown \cdot \sqrt{craftingRecipeAmount}&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned. This returned value is referred to as &amp;lt;code&amp;gt;craftingRecipeAmount&amp;lt;/code&amp;gt; above.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=274</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=274"/>
		<updated>2026-08-25T16:05:22Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Future Content}}A block that allows crafting any crafting recipes using a set of Lua functions. Also allows searching for items and looking up recipes by ingredient names or result names. &lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=273</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=273"/>
		<updated>2026-08-25T15:53:20Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Future Content}}Description&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charcoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;The &amp;lt;code&amp;gt;ingredients&amp;lt;/code&amp;gt; entry represents a 3x3 grid, left to right, top to bottom.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(result:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that produce the given item.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all item names matching the given query string.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:craft(ingredients:(string|nil)[], resultItem:string, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
Ingredients are supplied as a table of entries, similar to the ingredients field in recipes, but with a fixed value instead of a table in each slot. E.g. The recipe above can be supplied as &amp;lt;code&amp;gt;{&amp;quot;minecraft:coal&amp;quot;, nil, nil, &amp;quot;minecraft:stick&amp;quot;}&amp;lt;/code&amp;gt;. The parameter &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt; refers to how often this recipe should be crafted. So applying this recipe 3 times and crafting &amp;lt;code&amp;gt;minecraft:torch&amp;lt;/code&amp;gt; will try to produce 12 items. &lt;br /&gt;
&lt;br /&gt;
Due to the possibility of &amp;lt;code&amp;gt;recipe.resultCount * amount&amp;lt;/code&amp;gt; exceeding the stacksize of the result item, the actual amount of crafted recipes may need to be corrected to be smaller than &amp;lt;code&amp;gt;amount&amp;lt;/code&amp;gt;. For ease of use, this corrected, actual amount of crafting iterations is returned.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=272</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=272"/>
		<updated>2026-08-25T15:38:12Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Future Content}}Description&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    ingredients={&lt;br /&gt;
        {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charCoal&amp;quot;}, nil, nil,&lt;br /&gt;
        {&amp;quot;minecraft:stick&amp;quot;}, nil, nil,&lt;br /&gt;
        nil,nil,nil&lt;br /&gt;
    },&lt;br /&gt;
    result=&amp;quot;minecraft:torch&amp;quot;,&lt;br /&gt;
    resultCount=4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(string&amp;quot;modname:itemname&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the full name of the item&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:craft(string&amp;quot;modname:itemname&amp;quot;[]:ingredients, string&amp;quot;modname:itemname&amp;quot;:resultItem, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=271</id>
		<title>Digital Crafter</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=Digital_Crafter&amp;diff=271"/>
		<updated>2026-08-25T15:35:53Z</updated>

		<summary type="html">&lt;p&gt;GHXX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Future Content}}Description&lt;br /&gt;
&lt;br /&gt;
== Provided component ==&lt;br /&gt;
This block provides the &amp;lt;code&amp;gt;digitalCrafter&amp;lt;/code&amp;gt; component, offering the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component properties&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Read/Write&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cooldownRemaining&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
|READ&lt;br /&gt;
|How much more time needs to pass before &amp;lt;code&amp;gt;:craft&amp;lt;/code&amp;gt; may be called again.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+DigitalCrafterUD component methods&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithIngredient(ingredient:string)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns all crafting recipes that use &amp;lt;code&amp;gt;ingredient&amp;lt;/code&amp;gt; as an input. The ingredient needs to be in the format &amp;lt;code&amp;gt;modname:itemname&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;minecraft:stick&amp;lt;/code&amp;gt;.&lt;br /&gt;
The result is a table of recipes, where each recipe is again a table that looks like the following:&lt;br /&gt;
&amp;lt;code&amp;gt;{ingredients={ {&amp;quot;minecraft:coal&amp;quot;,&amp;quot;minecraft:charCoal&amp;quot;},nil,nil,{&amp;quot;minecraft:stick&amp;quot;}, nil,nil,&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;nil,nil,nil},&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;result=&amp;quot;minecraft:torch&amp;quot;,&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;resultCount=4}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchRecipesWithResult(string&amp;quot;modname:itemname&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;recipe[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space: nowrap;&amp;quot; |&amp;lt;code&amp;gt;:searchItemByName(string:partialName)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns the full name of the item&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;:craft(string&amp;quot;modname:itemname&amp;quot;[]:ingredients, string&amp;quot;modname:itemname&amp;quot;:resultItem, int:amount, boolean:outputIntoOwnInventory)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;&lt;br /&gt;
|If all required items are available, crafts the result. If &amp;lt;code&amp;gt;outputIntoOwnInventory&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the result is put into the own inventory. Otherwise it is pushed into the inventory that may be above, or it is ejected above in-world. &#039;&#039;&#039;Beware that there is no destination check to make sure that there is room in the inventory above, so items may spill if the destination is full.&#039;&#039;&#039;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=JLuaVM&amp;diff=270</id>
		<title>JLuaVM</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=JLuaVM&amp;diff=270"/>
		<updated>2026-08-25T15:21:53Z</updated>

		<summary type="html">&lt;p&gt;GHXX: /* Additional standard library functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The JLuaVM, is the runtime that executes the Lua code that is running on computers in [[Advanced Computers]]. The source can be found [https://github.com/MidnightMages/JLuaVM on GitHub]. The most important feature for Advanced Computers is the ability to save and restore the Lua execution state, regardless of what Lua code may be loaded. We are not aware of any Java based Lua runtime being capable of this, hence why this project was born in the first place.&lt;br /&gt;
&lt;br /&gt;
While we try to keep things very similar, there are a few tiny differences, listed below. In the remainder of this article, LuaC refers to PUC-Rio&#039;s implementation of Lua. If you spot a difference between JLuaVM and LuaC which is not listed here, please open a ticket at https://github.com/MidnightMages/JLuaVM/issues with a snippet that functions differently between JLuaVM and LuaC.&lt;br /&gt;
&lt;br /&gt;
If you would like to contribute please see https://github.com/MidnightMages/JLuaVM/tree/master#contributing.&lt;br /&gt;
&lt;br /&gt;
== LuaC deviations ==&lt;br /&gt;
In these cases JLuaVM (referred to as &#039;we&#039;) behaves differently than LuaC, &#039;&#039;&#039;but we still fulfill the Lua specification&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Area&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Indexing of strings&lt;br /&gt;
|In LuaC indexing a string, where the index value &amp;lt;code&amp;gt;someIndex&amp;lt;/code&amp;gt; can be an arbitrary value, always evaluates to &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. We argue that this is inconsistent and is almost never wanted behaviour. Therefore we instead throw an error just like indexing any other non-indexable type.&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
(&amp;quot;someString&amp;quot;)[someIndex]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Length of strings&lt;br /&gt;
|We intentionally return the number of characters instead of the length in bytes.&lt;br /&gt;
|-&lt;br /&gt;
|assert&lt;br /&gt;
|Produces a slightly different error message. Further, the message argument (second argument) is &amp;lt;code&amp;gt;tostring()&amp;lt;/code&amp;gt;&#039;ed before printing. This means that when the second argument happens to be a boolean, we properly print the value instead of simply stating that it was a boolean.&lt;br /&gt;
The following snippet will raise an error (as the first argument is falsy) and the message is simply the constant &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; represented as a string.&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
assert(false, true)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ipairs&lt;br /&gt;
|In our case, ipairs only allows iterating over tables. LuaC would return nil when operating on a string and error when passing a type that is neither a string nor a table. For robustness we throw on all non-table arguments as it seems very unlikely that a string is passed intentionally.&lt;br /&gt;
|-&lt;br /&gt;
|pairs&lt;br /&gt;
|The order in which the items are returned may differ from LuaC.&lt;br /&gt;
|-&lt;br /&gt;
|table.insert&lt;br /&gt;
|In LuaC this function seems to behave differently depending on whether the table is a sequence or an actual dictionary. In our case table.insert behaves identical in both cases.&lt;br /&gt;
|-&lt;br /&gt;
|table.remove&lt;br /&gt;
|behaviour differs slightly as the table-length operator behaves differently.&lt;br /&gt;
|-&lt;br /&gt;
|Printing numbers&lt;br /&gt;
|We print numbers with a few more digits of precision.&lt;br /&gt;
|-&lt;br /&gt;
|Stacktraces are formatted differently&lt;br /&gt;
|Due to the lack of a &amp;lt;code&amp;gt;loadfile&amp;lt;/code&amp;gt; function, the chunkname is directly fed into stacktraces, allowing for specifying filenames, etc. without being surrounded by quotes. Also some things are named slightly different within the stacktrace. This indirectly also affects the &amp;lt;code&amp;gt;error(msg [, level])&amp;lt;/code&amp;gt; function when &amp;lt;code&amp;gt;msg&amp;lt;/code&amp;gt; is directly a &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;level == nil or level &amp;gt; 0&amp;lt;/code&amp;gt;, and thus, part of the stacktrace is appended.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lua language spec deviations ==&lt;br /&gt;
In this one case we &#039;&#039;&#039;do not&#039;&#039;&#039; follow the spec.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Area&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|math.randomseed(seed)&lt;br /&gt;
|This function does not accept two seeds, but instead only one. Similarly it also only returns one number. Extra arguments are ignored.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lua language spec extensions ==&lt;br /&gt;
We have also slightly extended the existing specification.&lt;br /&gt;
&lt;br /&gt;
=== OOP callable constants ===&lt;br /&gt;
The following expression is not syntactically allowed in LuaC: &amp;lt;code&amp;gt;&amp;quot;someString&amp;quot;:sub(1,3)&amp;lt;/code&amp;gt;. In LuaC this would need to instead be written as &amp;lt;code&amp;gt;(&amp;quot;someString&amp;quot;):sub(1,3)&amp;lt;/code&amp;gt;. But as there is no grammatical conflict, we simply treat them the same.&lt;br /&gt;
&lt;br /&gt;
=== Type Extension Methods ===&lt;br /&gt;
LuaC supports setting type-metatables using &amp;lt;code&amp;gt;debug.setmetatable&amp;lt;/code&amp;gt;, e.g. for the string type. This, to our knowledge, however only works on a global level, so you cannot easily configure this on a per-environment (as in &amp;lt;code&amp;gt;_ENV&amp;lt;/code&amp;gt;) setting.&lt;br /&gt;
&lt;br /&gt;
We have therefore added support for what we call &amp;quot;Type Extension Methods&amp;quot;, as they behave similarly to extension methods in C#. If an index operation fails and would normally result in an error, we try to perform a lookup in a subtable of &amp;lt;code&amp;gt;_EXT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, the following code &amp;lt;code&amp;gt;&amp;quot;test&amp;quot;:sub(1,3)&amp;lt;/code&amp;gt; is processed as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;test&amp;quot; is a string, hence is not indexable, nor can it contain a metatable, so we immediately check for an extension function (or throw an index error otherwise)&lt;br /&gt;
* Thus we check for &amp;lt;code&amp;gt;_ENV[&amp;quot;_EXT&amp;quot;][&amp;quot;string&amp;quot;][&amp;quot;sub&amp;quot;]&amp;lt;/code&amp;gt;, which by default does exist, as &amp;lt;code&amp;gt;_ENV._EXT.string&amp;lt;/code&amp;gt; is set to a table that contains most of the string-library functions.&lt;br /&gt;
&lt;br /&gt;
In more general terms we access &amp;lt;code&amp;gt;_ENV[&amp;quot;_EXT][NAME OF TYPE][NAME OF FUNCTION]&amp;lt;/code&amp;gt; (where &amp;lt;code&amp;gt;_ENV&amp;lt;/code&amp;gt; is often equivalent to &amp;lt;code&amp;gt;_G&amp;lt;/code&amp;gt;). If no match is found, we simply raise the usual error.&lt;br /&gt;
&lt;br /&gt;
== Additional standard library functions ==&lt;br /&gt;
This is a list of all additional callable, non-standard functions provided by JLuaVM.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Function&lt;br /&gt;
!Returns&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vm.listUdKeys(obj:userdata)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a table whose keys are all values that are readable or writable in the given userdata object &amp;lt;code&amp;gt;obj&amp;lt;/code&amp;gt;. The value of each key is either &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rw&amp;lt;/code&amp;gt;, depending on whether the key is readable writable or readwrite.&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |&amp;lt;code&amp;gt;coroutine.resumeWithTimeout(co:thread, timeout:number, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;padding:0;&amp;quot; |&amp;lt;code&amp;gt;true, ...&amp;lt;/code&amp;gt;&lt;br /&gt;
|The coroutine has yielded on its own. Any arguments supplied to &amp;lt;code&amp;gt;coroutine.yield(...)&amp;lt;/code&amp;gt;, are returned after &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;false, any:errorMessage&amp;lt;/code&amp;gt;&lt;br /&gt;
|The coroutine has errored.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;preempted&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|The coroutine has exceeded the execution &amp;lt;code&amp;gt;timeout&amp;lt;/code&amp;gt; (given in seconds) and has been forcefully paused. In this event &amp;lt;code&amp;gt;coroutine.status(co)&amp;lt;/code&amp;gt; will return &amp;lt;code&amp;gt;&amp;quot;preempted_resumable&amp;quot;&amp;lt;/code&amp;gt;. Any child coroutines that were currently running at the time of yielding will enter the state &amp;lt;code&amp;gt;&amp;quot;preempted_blocked&amp;quot;&amp;lt;/code&amp;gt;. Attempting to &amp;lt;code&amp;gt;resume()&amp;lt;/code&amp;gt; such &amp;lt;code&amp;gt;preempted_blocked&amp;lt;/code&amp;gt; coroutines will throw an error.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;coroutine.status(co:thread)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|For completeness, this function may return all of the LuaC states &amp;lt;code&amp;gt;suspended&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dead&amp;lt;/code&amp;gt; as well as &amp;lt;code&amp;gt;preempted_resumable&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;preempted_blocked&amp;lt;/code&amp;gt;.&lt;br /&gt;
Resumable states are &amp;lt;code&amp;gt;suspended&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;preempted_resumable&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
Further functionality that is NOT available in [[Advanced Computers]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Function&lt;br /&gt;
!Returns&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vm.pause()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Immediately pauses the current LuaVM.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ac.ghxx.dev/index.php?title=JLuaVM&amp;diff=269</id>
		<title>JLuaVM</title>
		<link rel="alternate" type="text/html" href="https://wiki.ac.ghxx.dev/index.php?title=JLuaVM&amp;diff=269"/>
		<updated>2026-08-25T15:20:25Z</updated>

		<summary type="html">&lt;p&gt;GHXX: /* Additional standard library functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The JLuaVM, is the runtime that executes the Lua code that is running on computers in [[Advanced Computers]]. The source can be found [https://github.com/MidnightMages/JLuaVM on GitHub]. The most important feature for Advanced Computers is the ability to save and restore the Lua execution state, regardless of what Lua code may be loaded. We are not aware of any Java based Lua runtime being capable of this, hence why this project was born in the first place.&lt;br /&gt;
&lt;br /&gt;
While we try to keep things very similar, there are a few tiny differences, listed below. In the remainder of this article, LuaC refers to PUC-Rio&#039;s implementation of Lua. If you spot a difference between JLuaVM and LuaC which is not listed here, please open a ticket at https://github.com/MidnightMages/JLuaVM/issues with a snippet that functions differently between JLuaVM and LuaC.&lt;br /&gt;
&lt;br /&gt;
If you would like to contribute please see https://github.com/MidnightMages/JLuaVM/tree/master#contributing.&lt;br /&gt;
&lt;br /&gt;
== LuaC deviations ==&lt;br /&gt;
In these cases JLuaVM (referred to as &#039;we&#039;) behaves differently than LuaC, &#039;&#039;&#039;but we still fulfill the Lua specification&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Area&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Indexing of strings&lt;br /&gt;
|In LuaC indexing a string, where the index value &amp;lt;code&amp;gt;someIndex&amp;lt;/code&amp;gt; can be an arbitrary value, always evaluates to &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. We argue that this is inconsistent and is almost never wanted behaviour. Therefore we instead throw an error just like indexing any other non-indexable type.&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
(&amp;quot;someString&amp;quot;)[someIndex]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Length of strings&lt;br /&gt;
|We intentionally return the number of characters instead of the length in bytes.&lt;br /&gt;
|-&lt;br /&gt;
|assert&lt;br /&gt;
|Produces a slightly different error message. Further, the message argument (second argument) is &amp;lt;code&amp;gt;tostring()&amp;lt;/code&amp;gt;&#039;ed before printing. This means that when the second argument happens to be a boolean, we properly print the value instead of simply stating that it was a boolean.&lt;br /&gt;
The following snippet will raise an error (as the first argument is falsy) and the message is simply the constant &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; represented as a string.&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
assert(false, true)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ipairs&lt;br /&gt;
|In our case, ipairs only allows iterating over tables. LuaC would return nil when operating on a string and error when passing a type that is neither a string nor a table. For robustness we throw on all non-table arguments as it seems very unlikely that a string is passed intentionally.&lt;br /&gt;
|-&lt;br /&gt;
|pairs&lt;br /&gt;
|The order in which the items are returned may differ from LuaC.&lt;br /&gt;
|-&lt;br /&gt;
|table.insert&lt;br /&gt;
|In LuaC this function seems to behave differently depending on whether the table is a sequence or an actual dictionary. In our case table.insert behaves identical in both cases.&lt;br /&gt;
|-&lt;br /&gt;
|table.remove&lt;br /&gt;
|behaviour differs slightly as the table-length operator behaves differently.&lt;br /&gt;
|-&lt;br /&gt;
|Printing numbers&lt;br /&gt;
|We print numbers with a few more digits of precision.&lt;br /&gt;
|-&lt;br /&gt;
|Stacktraces are formatted differently&lt;br /&gt;
|Due to the lack of a &amp;lt;code&amp;gt;loadfile&amp;lt;/code&amp;gt; function, the chunkname is directly fed into stacktraces, allowing for specifying filenames, etc. without being surrounded by quotes. Also some things are named slightly different within the stacktrace. This indirectly also affects the &amp;lt;code&amp;gt;error(msg [, level])&amp;lt;/code&amp;gt; function when &amp;lt;code&amp;gt;msg&amp;lt;/code&amp;gt; is directly a &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;level == nil or level &amp;gt; 0&amp;lt;/code&amp;gt;, and thus, part of the stacktrace is appended.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lua language spec deviations ==&lt;br /&gt;
In this one case we &#039;&#039;&#039;do not&#039;&#039;&#039; follow the spec.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Area&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|math.randomseed(seed)&lt;br /&gt;
|This function does not accept two seeds, but instead only one. Similarly it also only returns one number. Extra arguments are ignored.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lua language spec extensions ==&lt;br /&gt;
We have also slightly extended the existing specification.&lt;br /&gt;
&lt;br /&gt;
=== OOP callable constants ===&lt;br /&gt;
The following expression is not syntactically allowed in LuaC: &amp;lt;code&amp;gt;&amp;quot;someString&amp;quot;:sub(1,3)&amp;lt;/code&amp;gt;. In LuaC this would need to instead be written as &amp;lt;code&amp;gt;(&amp;quot;someString&amp;quot;):sub(1,3)&amp;lt;/code&amp;gt;. But as there is no grammatical conflict, we simply treat them the same.&lt;br /&gt;
&lt;br /&gt;
=== Type Extension Methods ===&lt;br /&gt;
LuaC supports setting type-metatables using &amp;lt;code&amp;gt;debug.setmetatable&amp;lt;/code&amp;gt;, e.g. for the string type. This, to our knowledge, however only works on a global level, so you cannot easily configure this on a per-environment (as in &amp;lt;code&amp;gt;_ENV&amp;lt;/code&amp;gt;) setting.&lt;br /&gt;
&lt;br /&gt;
We have therefore added support for what we call &amp;quot;Type Extension Methods&amp;quot;, as they behave similarly to extension methods in C#. If an index operation fails and would normally result in an error, we try to perform a lookup in a subtable of &amp;lt;code&amp;gt;_EXT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, the following code &amp;lt;code&amp;gt;&amp;quot;test&amp;quot;:sub(1,3)&amp;lt;/code&amp;gt; is processed as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;test&amp;quot; is a string, hence is not indexable, nor can it contain a metatable, so we immediately check for an extension function (or throw an index error otherwise)&lt;br /&gt;
* Thus we check for &amp;lt;code&amp;gt;_ENV[&amp;quot;_EXT&amp;quot;][&amp;quot;string&amp;quot;][&amp;quot;sub&amp;quot;]&amp;lt;/code&amp;gt;, which by default does exist, as &amp;lt;code&amp;gt;_ENV._EXT.string&amp;lt;/code&amp;gt; is set to a table that contains most of the string-library functions.&lt;br /&gt;
&lt;br /&gt;
In more general terms we access &amp;lt;code&amp;gt;_ENV[&amp;quot;_EXT][NAME OF TYPE][NAME OF FUNCTION]&amp;lt;/code&amp;gt; (where &amp;lt;code&amp;gt;_ENV&amp;lt;/code&amp;gt; is often equivalent to &amp;lt;code&amp;gt;_G&amp;lt;/code&amp;gt;). If no match is found, we simply raise the usual error.&lt;br /&gt;
&lt;br /&gt;
== Additional standard library functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Function&lt;br /&gt;
!Returns&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vm.listUdKeys(obj:userdata)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;&lt;br /&gt;
|Returns a table whose keys are all values that are readable or writable in the given userdata object &amp;lt;code&amp;gt;obj&amp;lt;/code&amp;gt;. The value of each key is either &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rw&amp;lt;/code&amp;gt;, depending on whether the key is readable writable or readwrite.&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |&amp;lt;code&amp;gt;coroutine.resumeWithTimeout(co:thread, timeout:number, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;padding:0;&amp;quot; |&amp;lt;code&amp;gt;true, ...&amp;lt;/code&amp;gt;&lt;br /&gt;
|The coroutine has yielded on its own. Any arguments supplied to &amp;lt;code&amp;gt;coroutine.yield(...)&amp;lt;/code&amp;gt;, are returned after &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;false, any:errorMessage&amp;lt;/code&amp;gt;&lt;br /&gt;
|The coroutine has errored.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;preempted&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|The coroutine has exceeded the execution &amp;lt;code&amp;gt;timeout&amp;lt;/code&amp;gt; (given in seconds) and has been forcefully paused. In this event &amp;lt;code&amp;gt;coroutine.status(co)&amp;lt;/code&amp;gt; will return &amp;lt;code&amp;gt;&amp;quot;preempted_resumable&amp;quot;&amp;lt;/code&amp;gt;. Any child coroutines that were currently running at the time of yielding will enter the state &amp;lt;code&amp;gt;&amp;quot;preempted_blocked&amp;quot;&amp;lt;/code&amp;gt;. Attempting to &amp;lt;code&amp;gt;resume()&amp;lt;/code&amp;gt; such &amp;lt;code&amp;gt;preempted_blocked&amp;lt;/code&amp;gt; coroutines will throw an error.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;coroutine.status(co:thread)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
|For completeness, this function may return all of the LuaC states &amp;lt;code&amp;gt;suspended&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dead&amp;lt;/code&amp;gt; as well as &amp;lt;code&amp;gt;preempted_resumable&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;preempted_blocked&amp;lt;/code&amp;gt;.&lt;br /&gt;
Resumable states are &amp;lt;code&amp;gt;suspended&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;preempted_resumable&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
Further functionality that is NOT available in [[Advanced Computers]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Function&lt;br /&gt;
!Returns&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vm.pause()&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;&lt;br /&gt;
|Immediately pauses the current LuaVM.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Navbox content}}&lt;/div&gt;</summary>
		<author><name>GHXX</name></author>
	</entry>
</feed>