<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://minetweaker3.aizistral.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aizistral</id>
		<title>MineTweaker3 Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://minetweaker3.aizistral.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aizistral"/>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/wiki/Special:Contributions/Aizistral"/>
		<updated>2026-05-08T16:30:04Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.0</generator>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Main_Page&amp;diff=1501</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Main_Page&amp;diff=1501"/>
				<updated>2025-08-26T22:54:17Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Update preface&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Preface =&lt;br /&gt;
This is a functional backup of the '''MineTweaker 3 Wiki''' formerly hosted at https://minetweaker3.powerofbytes.com. It is maintained by '''[https://aizistral.com Aizistral]'''.&lt;br /&gt;
&lt;br /&gt;
As it happens, shortly before the original wiki went down I have made a dump of its contents using the '''[https://github.com/WikiTeam/wikiteam WikiTeam]''' tool. You can download the dump itself from here: https://files.aizistral.com/random/MineTweaker3-Wiki-Dump.zip&lt;br /&gt;
&lt;br /&gt;
The purpose of this backup is purely archival. It will not be updated with new content or altered in any way, save for adding this preface. For that reason public editing access and account creation is disabled.&lt;br /&gt;
&lt;br /&gt;
If you have any questions, or find that some part of this wiki is broken - feel free to reach out to me directly at '''[mailto:admin@aizistral.com admin@aizistral.com]'''.&lt;br /&gt;
&lt;br /&gt;
== MineTweaker3 ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the MineTweaker 3 wiki! The aim of MineTweaker is to provide modpack creators, server administrators and map makers with the capability of customizing Minecraft without having to write a custom mod for it. All functionality is provided through an easy-to-use scripting language. (no prior knowledge or programming experience required!)&lt;br /&gt;
&lt;br /&gt;
Using MineTweaker, you can...&lt;br /&gt;
* Add and remove any crafting recipe&lt;br /&gt;
* Add and remove mod machine recipes for supported mods&lt;br /&gt;
* Modify the ore dictionary&lt;br /&gt;
&lt;br /&gt;
Additionally, all scripts are sent from server to client, and thus only need to be stored server-side. They can be altered and reloaded without having to restart anything.&lt;br /&gt;
&lt;br /&gt;
Forge Mods can also execute scripts in MineTweaker. [[Mod Script Execution]]&lt;br /&gt;
&lt;br /&gt;
== Comparison with MineTweaker 2 ==&lt;br /&gt;
&lt;br /&gt;
* [[guide:Comparison_with_MineTweaker_2|Comparison with MineTweaker 2]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials (1.7.X) ==&lt;br /&gt;
&lt;br /&gt;
* Lesson 1: [[tutorial:Introduction|Introduction]]&lt;br /&gt;
* Lesson 2: [[tutorial:Basic_Recipes|Basic Recipes]]&lt;br /&gt;
* Lesson 3: [[tutorial:Ore_Dictionary|Ore Dictionary]]&lt;br /&gt;
* Lesson 4: [[tutorial:Furnace|Furnace]]&lt;br /&gt;
* Lesson 5: [[tutorial:Advanced_Recipes|Advanced Recipes]]&lt;br /&gt;
* Lesson 6: [[tutorial:Item_Renaming|Item Renaming]]&lt;br /&gt;
* Lesson 7: [[tutorial:Tooltips|Tooltips]]&lt;br /&gt;
* Lesson 8: [[tutorial:Loot|Loot and seeds]]&lt;br /&gt;
* Lesson 9: [[tutorial:Control_Structures|Loops]]&lt;br /&gt;
* Lesson 10: [[tutorial:Localization|Localization]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials (1.6.4) ==&lt;br /&gt;
&lt;br /&gt;
* Lesson 1: [[tutorial:Introduction|Introduction]]&lt;br /&gt;
* Lesson 2: [[tutorial:Basic_Recipes_164|Basic Recipes]]&lt;br /&gt;
* Lesson 3: [[tutorial:Ore_Dictionary_164|Ore Dictionary]]&lt;br /&gt;
* Lesson 4: [[tutorial:Furnace_164|Furnace]]&lt;br /&gt;
* Lesson 5: [[tutorial:Advanced_Recipes_164|Advanced Recipes]]&lt;br /&gt;
* Lesson 6: [[tutorial:item_Renaming_164|Item Renaming]]&lt;br /&gt;
* Lesson 7: [[tutorial:Tooltips_164|Tooltips]]&lt;br /&gt;
* Lesson 8: [[tutorial:Loot_164|Loot and seeds]]&lt;br /&gt;
* Lesson 9: [[tutorial:Control_Structures_164|Loops]]&lt;br /&gt;
* Lesson 10: [[tutorial:Localization_164|Localization]]&lt;br /&gt;
&lt;br /&gt;
== Guides ==&lt;br /&gt;
&lt;br /&gt;
* [[guide:Script_Introduction|Script Introduction]]&lt;br /&gt;
* [[guide:Script_Statements|Script Statements]]&lt;br /&gt;
* [[guide:Script_Expression|Script Expressions]]&lt;br /&gt;
* [[guide:Script_Function|Script Functions]]&lt;br /&gt;
&lt;br /&gt;
== Mod Support ==&lt;br /&gt;
&lt;br /&gt;
* BetterStorage: [[Mods:BetterStorage|BetterStorage Support]]&lt;br /&gt;
* Blood Magic: [[Mods:Blood Magic Support|Blood Magic Support]]&lt;br /&gt;
* BuildCraft: [[mods:BuildCraft_Support|BuildCraft Support]]&lt;br /&gt;
* GregTech: [[mods:GregTech_Support|GregTech Support]]&lt;br /&gt;
* Harvest Festival: [[Mods:Harvest Festival Support|Harvest Festival Support]]&lt;br /&gt;
* IC2: [[mods:IC2_Support|IC2 Support]]&lt;br /&gt;
* Immersive Engineering: [[mods:Immersive_Engineering_Support|Immersive Engineering Support]]&lt;br /&gt;
* Magneticraft: [[mods:Magneticraft_Support|Magneticraft Support]]&lt;br /&gt;
* MineFactory Reloaded: [[mods:MFR Support|MFR Support]]&lt;br /&gt;
* NEI: [[mods:NEI_Support|NEI Support]]&lt;br /&gt;
* Tinkers' Steelworks: [[mods:TSteelworks_Support|Tinkers' Steelworks Support]]&lt;br /&gt;
* Witching Gadgets: [[mods:Witching_Gadgets_Support|Witching Gadgets Support]]&lt;br /&gt;
&lt;br /&gt;
* Additional Support: [[ModTweaker|ModTweaker]]&lt;br /&gt;
&lt;br /&gt;
* Additional Content: [[ContentTweaker|ContentTweaker]]&lt;br /&gt;
&lt;br /&gt;
== Known incompatibilities ==&lt;br /&gt;
&lt;br /&gt;
* CraftingManager isn't compatible - crafting recipes can't load properly upon starting a game. (A manual reload does fix this, though, but it's not very practical)&lt;br /&gt;
* Some of the Sync recipes don't get modified properly. A manual reload fixes this. The issue is most likely due to Sync changing its own recipes depending on the server configuration, after MineTweaker did its work.&lt;br /&gt;
&lt;br /&gt;
If you encounter any other incompatibilities, let me know, so I can add them to the list and save modpack authors a lot of time.&lt;br /&gt;
&lt;br /&gt;
Although these mods should be compatible, it is not allowed to change RotaryCraft, ReactorCraft, ElectriCraft and ChromatiCraft recipes, or add recipes that modify the tech tree. The mod author, Reika, has explicitly stated that such modifications are forbidden.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
The following wiki pages provide useful references:&lt;br /&gt;
&lt;br /&gt;
* [[NBT Tag formats]]&lt;br /&gt;
&lt;br /&gt;
== Extending MineTweaker ==&lt;br /&gt;
&lt;br /&gt;
More than ever before, you can extend MineTweaker with your own functionality.&lt;br /&gt;
&lt;br /&gt;
There are various things you can do:&lt;br /&gt;
&lt;br /&gt;
* You can register global variables with minetweaker.MineTweakerAPI.registerGlobalSymbol(IZenSymbol). Use MineTweakerAPI.getJavaStaticGetterSymbol to get a static getter symbol or MineTweakerAPI.getJavaStaticFieldSymbol to get a static field symbol.&lt;br /&gt;
* You can register bracket handlers with minetweaker.MineTweakerAPI.registerBracketHandler(IBracketHandler). Bracket handlers can make it possible to create your own namespace for items/things in specific mods. See the minetweaker.mc17.brackets for example implementations.&lt;br /&gt;
* You can register custom classes with minetweaker.MineTweakerAPI.registerClass. Classes must have either a @ZenClass or @ZenExpansion annotation. Classes can be imported and called (handy for mod machines) and expansions can extend existing types (see minetweaker.data for examples, as well as minetweaker.item.IItemStack)&lt;br /&gt;
* In large projects, you can use the gradle RegisterZenClassesTask (see GitHub source in buildSrc) to generate a class containing a list of all registerable classes in your project. You can then submit the class name to MineTweakerAPI to make it register all those classes. All MineTweaker subproject use this system, so read those gradle build scripts to see how it's done. (or contact me)&lt;br /&gt;
&lt;br /&gt;
== Changelog &amp;amp; Planned Versions ==&lt;br /&gt;
&lt;br /&gt;
[[Changelog]]&lt;br /&gt;
&lt;br /&gt;
[[Planned_Versions|Planned Versions]]&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
Me (Stan Hebben) as mod creator. Thanks to Jaredlll08 for helping me fix bugs and get that 1.8 version going!&lt;br /&gt;
&lt;br /&gt;
All those who reported bugs on GitHub, for otherwise I'd not be able to fix them.&lt;br /&gt;
&lt;br /&gt;
The beta testers: Ravin6666, Peach774, AnodeCathode, Dyonovan, Joshiejack&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Main_Page&amp;diff=1500</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Main_Page&amp;diff=1500"/>
				<updated>2025-08-26T22:28:51Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Add preface&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Preface =&lt;br /&gt;
This is a functional backup of a '''MineTweaker 3 Wiki''' formerly hosted at https://minetweaker3.powerofbytes.com. It is maintained by '''[https://aizistral.com Aizistral]'''.&lt;br /&gt;
&lt;br /&gt;
As it happens, shortly before the original wiki went down I have made a dump of its contents using the '''[https://github.com/WikiTeam/wikiteam WikiTeam]''' tool. You can download the dump itself from here: https://files.aizistral.com/random/MineTweaker3-Wiki-Dump.zip&lt;br /&gt;
&lt;br /&gt;
The purpose of this backup is purely archival. It will not be updated with new content or altered in any way, save for adding this preface. For that reason public editing access and account creation is disabled.&lt;br /&gt;
&lt;br /&gt;
In the event that you have any questions, or find that some part of this wiki is broken - feel free to reach out to me directly at '''[mailto:admin@aizistral.com admin@aizistral.com]'''.&lt;br /&gt;
&lt;br /&gt;
== MineTweaker3 ==&lt;br /&gt;
&lt;br /&gt;
Welcome to the MineTweaker 3 wiki! The aim of MineTweaker is to provide modpack creators, server administrators and map makers with the capability of customizing Minecraft without having to write a custom mod for it. All functionality is provided through an easy-to-use scripting language. (no prior knowledge or programming experience required!)&lt;br /&gt;
&lt;br /&gt;
Using MineTweaker, you can...&lt;br /&gt;
* Add and remove any crafting recipe&lt;br /&gt;
* Add and remove mod machine recipes for supported mods&lt;br /&gt;
* Modify the ore dictionary&lt;br /&gt;
&lt;br /&gt;
Additionally, all scripts are sent from server to client, and thus only need to be stored server-side. They can be altered and reloaded without having to restart anything.&lt;br /&gt;
&lt;br /&gt;
Forge Mods can also execute scripts in MineTweaker. [[Mod Script Execution]]&lt;br /&gt;
&lt;br /&gt;
== Comparison with MineTweaker 2 ==&lt;br /&gt;
&lt;br /&gt;
* [[guide:Comparison_with_MineTweaker_2|Comparison with MineTweaker 2]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials (1.7.X) ==&lt;br /&gt;
&lt;br /&gt;
* Lesson 1: [[tutorial:Introduction|Introduction]]&lt;br /&gt;
* Lesson 2: [[tutorial:Basic_Recipes|Basic Recipes]]&lt;br /&gt;
* Lesson 3: [[tutorial:Ore_Dictionary|Ore Dictionary]]&lt;br /&gt;
* Lesson 4: [[tutorial:Furnace|Furnace]]&lt;br /&gt;
* Lesson 5: [[tutorial:Advanced_Recipes|Advanced Recipes]]&lt;br /&gt;
* Lesson 6: [[tutorial:Item_Renaming|Item Renaming]]&lt;br /&gt;
* Lesson 7: [[tutorial:Tooltips|Tooltips]]&lt;br /&gt;
* Lesson 8: [[tutorial:Loot|Loot and seeds]]&lt;br /&gt;
* Lesson 9: [[tutorial:Control_Structures|Loops]]&lt;br /&gt;
* Lesson 10: [[tutorial:Localization|Localization]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials (1.6.4) ==&lt;br /&gt;
&lt;br /&gt;
* Lesson 1: [[tutorial:Introduction|Introduction]]&lt;br /&gt;
* Lesson 2: [[tutorial:Basic_Recipes_164|Basic Recipes]]&lt;br /&gt;
* Lesson 3: [[tutorial:Ore_Dictionary_164|Ore Dictionary]]&lt;br /&gt;
* Lesson 4: [[tutorial:Furnace_164|Furnace]]&lt;br /&gt;
* Lesson 5: [[tutorial:Advanced_Recipes_164|Advanced Recipes]]&lt;br /&gt;
* Lesson 6: [[tutorial:item_Renaming_164|Item Renaming]]&lt;br /&gt;
* Lesson 7: [[tutorial:Tooltips_164|Tooltips]]&lt;br /&gt;
* Lesson 8: [[tutorial:Loot_164|Loot and seeds]]&lt;br /&gt;
* Lesson 9: [[tutorial:Control_Structures_164|Loops]]&lt;br /&gt;
* Lesson 10: [[tutorial:Localization_164|Localization]]&lt;br /&gt;
&lt;br /&gt;
== Guides ==&lt;br /&gt;
&lt;br /&gt;
* [[guide:Script_Introduction|Script Introduction]]&lt;br /&gt;
* [[guide:Script_Statements|Script Statements]]&lt;br /&gt;
* [[guide:Script_Expression|Script Expressions]]&lt;br /&gt;
* [[guide:Script_Function|Script Functions]]&lt;br /&gt;
&lt;br /&gt;
== Mod Support ==&lt;br /&gt;
&lt;br /&gt;
* BetterStorage: [[Mods:BetterStorage|BetterStorage Support]]&lt;br /&gt;
* Blood Magic: [[Mods:Blood Magic Support|Blood Magic Support]]&lt;br /&gt;
* BuildCraft: [[mods:BuildCraft_Support|BuildCraft Support]]&lt;br /&gt;
* GregTech: [[mods:GregTech_Support|GregTech Support]]&lt;br /&gt;
* Harvest Festival: [[Mods:Harvest Festival Support|Harvest Festival Support]]&lt;br /&gt;
* IC2: [[mods:IC2_Support|IC2 Support]]&lt;br /&gt;
* Immersive Engineering: [[mods:Immersive_Engineering_Support|Immersive Engineering Support]]&lt;br /&gt;
* Magneticraft: [[mods:Magneticraft_Support|Magneticraft Support]]&lt;br /&gt;
* MineFactory Reloaded: [[mods:MFR Support|MFR Support]]&lt;br /&gt;
* NEI: [[mods:NEI_Support|NEI Support]]&lt;br /&gt;
* Tinkers' Steelworks: [[mods:TSteelworks_Support|Tinkers' Steelworks Support]]&lt;br /&gt;
* Witching Gadgets: [[mods:Witching_Gadgets_Support|Witching Gadgets Support]]&lt;br /&gt;
&lt;br /&gt;
* Additional Support: [[ModTweaker|ModTweaker]]&lt;br /&gt;
&lt;br /&gt;
* Additional Content: [[ContentTweaker|ContentTweaker]]&lt;br /&gt;
&lt;br /&gt;
== Known incompatibilities ==&lt;br /&gt;
&lt;br /&gt;
* CraftingManager isn't compatible - crafting recipes can't load properly upon starting a game. (A manual reload does fix this, though, but it's not very practical)&lt;br /&gt;
* Some of the Sync recipes don't get modified properly. A manual reload fixes this. The issue is most likely due to Sync changing its own recipes depending on the server configuration, after MineTweaker did its work.&lt;br /&gt;
&lt;br /&gt;
If you encounter any other incompatibilities, let me know, so I can add them to the list and save modpack authors a lot of time.&lt;br /&gt;
&lt;br /&gt;
Although these mods should be compatible, it is not allowed to change RotaryCraft, ReactorCraft, ElectriCraft and ChromatiCraft recipes, or add recipes that modify the tech tree. The mod author, Reika, has explicitly stated that such modifications are forbidden.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
The following wiki pages provide useful references:&lt;br /&gt;
&lt;br /&gt;
* [[NBT Tag formats]]&lt;br /&gt;
&lt;br /&gt;
== Extending MineTweaker ==&lt;br /&gt;
&lt;br /&gt;
More than ever before, you can extend MineTweaker with your own functionality.&lt;br /&gt;
&lt;br /&gt;
There are various things you can do:&lt;br /&gt;
&lt;br /&gt;
* You can register global variables with minetweaker.MineTweakerAPI.registerGlobalSymbol(IZenSymbol). Use MineTweakerAPI.getJavaStaticGetterSymbol to get a static getter symbol or MineTweakerAPI.getJavaStaticFieldSymbol to get a static field symbol.&lt;br /&gt;
* You can register bracket handlers with minetweaker.MineTweakerAPI.registerBracketHandler(IBracketHandler). Bracket handlers can make it possible to create your own namespace for items/things in specific mods. See the minetweaker.mc17.brackets for example implementations.&lt;br /&gt;
* You can register custom classes with minetweaker.MineTweakerAPI.registerClass. Classes must have either a @ZenClass or @ZenExpansion annotation. Classes can be imported and called (handy for mod machines) and expansions can extend existing types (see minetweaker.data for examples, as well as minetweaker.item.IItemStack)&lt;br /&gt;
* In large projects, you can use the gradle RegisterZenClassesTask (see GitHub source in buildSrc) to generate a class containing a list of all registerable classes in your project. You can then submit the class name to MineTweakerAPI to make it register all those classes. All MineTweaker subproject use this system, so read those gradle build scripts to see how it's done. (or contact me)&lt;br /&gt;
&lt;br /&gt;
== Changelog &amp;amp; Planned Versions ==&lt;br /&gt;
&lt;br /&gt;
[[Changelog]]&lt;br /&gt;
&lt;br /&gt;
[[Planned_Versions|Planned Versions]]&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
Me (Stan Hebben) as mod creator. Thanks to Jaredlll08 for helping me fix bugs and get that 1.8 version going!&lt;br /&gt;
&lt;br /&gt;
All those who reported bugs on GitHub, for otherwise I'd not be able to fix them.&lt;br /&gt;
&lt;br /&gt;
The beta testers: Ravin6666, Peach774, AnodeCathode, Dyonovan, Joshiejack&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:Recipe_leggings_iron_brackets.png&amp;diff=1498</id>
		<title>File:Recipe leggings iron brackets.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:Recipe_leggings_iron_brackets.png&amp;diff=1498"/>
				<updated>2025-08-21T00:44:30Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Aizistral uploaded File:Recipe leggings iron brackets.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Leggings recipe in bracket notation.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:Recipe_leggings_iron.png&amp;diff=1497</id>
		<title>File:Recipe leggings iron.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:Recipe_leggings_iron.png&amp;diff=1497"/>
				<updated>2025-08-21T00:44:06Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Aizistral uploaded File:Recipe leggings iron.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Iron leggings recipe&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:Grammar_scriptelement.png&amp;diff=1496</id>
		<title>File:Grammar scriptelement.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:Grammar_scriptelement.png&amp;diff=1496"/>
				<updated>2025-08-21T00:41:12Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:Grammar_importedscript.png&amp;diff=1495</id>
		<title>File:Grammar importedscript.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:Grammar_importedscript.png&amp;diff=1495"/>
				<updated>2025-08-21T00:41:02Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:Grammar_script.png&amp;diff=1494</id>
		<title>File:Grammar script.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:Grammar_script.png&amp;diff=1494"/>
				<updated>2025-08-21T00:39:25Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:ContentTweakerLogo.jpg&amp;diff=1493</id>
		<title>File:ContentTweakerLogo.jpg</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:ContentTweakerLogo.jpg&amp;diff=1493"/>
				<updated>2025-08-21T00:38:42Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Aizistral uploaded File:ContentTweakerLogo.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:ModTweaker_logo.png&amp;diff=1492</id>
		<title>File:ModTweaker logo.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:ModTweaker_logo.png&amp;diff=1492"/>
				<updated>2025-08-21T00:37:24Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Aizistral uploaded File:ModTweaker logo.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Main_Page&amp;diff=1491</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Main_Page&amp;diff=1491"/>
				<updated>2025-08-21T00:22:27Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: Revert to older revision&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MineTweaker3 =&lt;br /&gt;
&lt;br /&gt;
Welcome to the MineTweaker 3 wiki! The aim of MineTweaker is to provide modpack creators, server administrators and map makers with the capability of customizing Minecraft without having to write a custom mod for it. All functionality is provided through an easy-to-use scripting language. (no prior knowledge or programming experience required!)&lt;br /&gt;
&lt;br /&gt;
Using MineTweaker, you can...&lt;br /&gt;
* Add and remove any crafting recipe&lt;br /&gt;
* Add and remove mod machine recipes for supported mods&lt;br /&gt;
* Modify the ore dictionary&lt;br /&gt;
&lt;br /&gt;
Additionally, all scripts are sent from server to client, and thus only need to be stored server-side. They can be altered and reloaded without having to restart anything.&lt;br /&gt;
&lt;br /&gt;
Forge Mods can also execute scripts in MineTweaker. [[Mod Script Execution]]&lt;br /&gt;
&lt;br /&gt;
== Comparison with MineTweaker 2 ==&lt;br /&gt;
&lt;br /&gt;
* [[guide:Comparison_with_MineTweaker_2|Comparison with MineTweaker 2]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials (1.7.X) ==&lt;br /&gt;
&lt;br /&gt;
* Lesson 1: [[tutorial:Introduction|Introduction]]&lt;br /&gt;
* Lesson 2: [[tutorial:Basic_Recipes|Basic Recipes]]&lt;br /&gt;
* Lesson 3: [[tutorial:Ore_Dictionary|Ore Dictionary]]&lt;br /&gt;
* Lesson 4: [[tutorial:Furnace|Furnace]]&lt;br /&gt;
* Lesson 5: [[tutorial:Advanced_Recipes|Advanced Recipes]]&lt;br /&gt;
* Lesson 6: [[tutorial:Item_Renaming|Item Renaming]]&lt;br /&gt;
* Lesson 7: [[tutorial:Tooltips|Tooltips]]&lt;br /&gt;
* Lesson 8: [[tutorial:Loot|Loot and seeds]]&lt;br /&gt;
* Lesson 9: [[tutorial:Control_Structures|Loops]]&lt;br /&gt;
* Lesson 10: [[tutorial:Localization|Localization]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials (1.6.4) ==&lt;br /&gt;
&lt;br /&gt;
* Lesson 1: [[tutorial:Introduction|Introduction]]&lt;br /&gt;
* Lesson 2: [[tutorial:Basic_Recipes_164|Basic Recipes]]&lt;br /&gt;
* Lesson 3: [[tutorial:Ore_Dictionary_164|Ore Dictionary]]&lt;br /&gt;
* Lesson 4: [[tutorial:Furnace_164|Furnace]]&lt;br /&gt;
* Lesson 5: [[tutorial:Advanced_Recipes_164|Advanced Recipes]]&lt;br /&gt;
* Lesson 6: [[tutorial:item_Renaming_164|Item Renaming]]&lt;br /&gt;
* Lesson 7: [[tutorial:Tooltips_164|Tooltips]]&lt;br /&gt;
* Lesson 8: [[tutorial:Loot_164|Loot and seeds]]&lt;br /&gt;
* Lesson 9: [[tutorial:Control_Structures_164|Loops]]&lt;br /&gt;
* Lesson 10: [[tutorial:Localization_164|Localization]]&lt;br /&gt;
&lt;br /&gt;
== Guides ==&lt;br /&gt;
&lt;br /&gt;
* [[guide:Script_Introduction|Script Introduction]]&lt;br /&gt;
* [[guide:Script_Statements|Script Statements]]&lt;br /&gt;
* [[guide:Script_Expression|Script Expressions]]&lt;br /&gt;
* [[guide:Script_Function|Script Functions]]&lt;br /&gt;
&lt;br /&gt;
== Mod Support ==&lt;br /&gt;
&lt;br /&gt;
* BetterStorage: [[Mods:BetterStorage|BetterStorage Support]]&lt;br /&gt;
* Blood Magic: [[Mods:Blood Magic Support|Blood Magic Support]]&lt;br /&gt;
* BuildCraft: [[mods:BuildCraft_Support|BuildCraft Support]]&lt;br /&gt;
* GregTech: [[mods:GregTech_Support|GregTech Support]]&lt;br /&gt;
* Harvest Festival: [[Mods:Harvest Festival Support|Harvest Festival Support]]&lt;br /&gt;
* IC2: [[mods:IC2_Support|IC2 Support]]&lt;br /&gt;
* Immersive Engineering: [[mods:Immersive_Engineering_Support|Immersive Engineering Support]]&lt;br /&gt;
* Magneticraft: [[mods:Magneticraft_Support|Magneticraft Support]]&lt;br /&gt;
* MineFactory Reloaded: [[mods:MFR Support|MFR Support]]&lt;br /&gt;
* NEI: [[mods:NEI_Support|NEI Support]]&lt;br /&gt;
* Tinkers' Steelworks: [[mods:TSteelworks_Support|Tinkers' Steelworks Support]]&lt;br /&gt;
* Witching Gadgets: [[mods:Witching_Gadgets_Support|Witching Gadgets Support]]&lt;br /&gt;
&lt;br /&gt;
* Additional Support: [[ModTweaker|ModTweaker]]&lt;br /&gt;
&lt;br /&gt;
* Additional Content: [[ContentTweaker|ContentTweaker]]&lt;br /&gt;
&lt;br /&gt;
== Known incompatibilities ==&lt;br /&gt;
&lt;br /&gt;
* CraftingManager isn't compatible - crafting recipes can't load properly upon starting a game. (A manual reload does fix this, though, but it's not very practical)&lt;br /&gt;
* Some of the Sync recipes don't get modified properly. A manual reload fixes this. The issue is most likely due to Sync changing its own recipes depending on the server configuration, after MineTweaker did its work.&lt;br /&gt;
&lt;br /&gt;
If you encounter any other incompatibilities, let me know, so I can add them to the list and save modpack authors a lot of time.&lt;br /&gt;
&lt;br /&gt;
Although these mods should be compatible, it is not allowed to change RotaryCraft, ReactorCraft, ElectriCraft and ChromatiCraft recipes, or add recipes that modify the tech tree. The mod author, Reika, has explicitly stated that such modifications are forbidden.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
The following wiki pages provide useful references:&lt;br /&gt;
&lt;br /&gt;
* [[NBT Tag formats]]&lt;br /&gt;
&lt;br /&gt;
== Extending MineTweaker ==&lt;br /&gt;
&lt;br /&gt;
More than ever before, you can extend MineTweaker with your own functionality.&lt;br /&gt;
&lt;br /&gt;
There are various things you can do:&lt;br /&gt;
&lt;br /&gt;
* You can register global variables with minetweaker.MineTweakerAPI.registerGlobalSymbol(IZenSymbol). Use MineTweakerAPI.getJavaStaticGetterSymbol to get a static getter symbol or MineTweakerAPI.getJavaStaticFieldSymbol to get a static field symbol.&lt;br /&gt;
* You can register bracket handlers with minetweaker.MineTweakerAPI.registerBracketHandler(IBracketHandler). Bracket handlers can make it possible to create your own namespace for items/things in specific mods. See the minetweaker.mc17.brackets for example implementations.&lt;br /&gt;
* You can register custom classes with minetweaker.MineTweakerAPI.registerClass. Classes must have either a @ZenClass or @ZenExpansion annotation. Classes can be imported and called (handy for mod machines) and expansions can extend existing types (see minetweaker.data for examples, as well as minetweaker.item.IItemStack)&lt;br /&gt;
* In large projects, you can use the gradle RegisterZenClassesTask (see GitHub source in buildSrc) to generate a class containing a list of all registerable classes in your project. You can then submit the class name to MineTweakerAPI to make it register all those classes. All MineTweaker subproject use this system, so read those gradle build scripts to see how it's done. (or contact me)&lt;br /&gt;
&lt;br /&gt;
== Changelog &amp;amp; Planned Versions ==&lt;br /&gt;
&lt;br /&gt;
[[Changelog]]&lt;br /&gt;
&lt;br /&gt;
[[Planned_Versions|Planned Versions]]&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
Me (Stan Hebben) as mod creator. Thanks to Jaredlll08 for helping me fix bugs and get that 1.8 version going!&lt;br /&gt;
&lt;br /&gt;
All those who reported bugs on GitHub, for otherwise I'd not be able to fix them.&lt;br /&gt;
&lt;br /&gt;
The beta testers: Ravin6666, Peach774, AnodeCathode, Dyonovan, Joshiejack&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Template:Mod&amp;diff=1431</id>
		<title>Template:Mod</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Template:Mod&amp;diff=1431"/>
				<updated>2025-08-21T00:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox&lt;br /&gt;
| bodyclass = geography vcard&lt;br /&gt;
| bodystyle = width:23em&lt;br /&gt;
&lt;br /&gt;
| headerstyle = text-align:left&lt;br /&gt;
&lt;br /&gt;
| abovestyle = font-size:1.25em; white-space:nowrap&lt;br /&gt;
| above = &amp;lt;span class=&amp;quot;fn org&amp;quot;&amp;gt;{{#if:{{{name|}}}|{{{name}}}|{{#if:{{{official_name|}}}|{{{official_name}}}|{{PAGENAME}}}}}}&amp;lt;/span&amp;gt;{{#if:{{{native_name|}}}|&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;nickname&amp;quot; {{#if:{{{native_name_lang|}}}|lang=&amp;quot;{{{native_name_lang}}}&amp;quot;}}&amp;gt;{{{native_name}}}&amp;lt;/span&amp;gt;}}{{#if:{{{other_name|}}}|&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;nickname&amp;quot; style=&amp;quot;font-size:78%&amp;quot;&amp;gt;{{{other_name}}}&amp;lt;/span&amp;gt;}}&amp;lt;!--&lt;br /&gt;
** names, type, and transliterations **&lt;br /&gt;
--&amp;gt;{{infobox|child=yes|decat=yes&amp;lt;!-- Remove from [[Category:Articles which use infobox templates with no data rows]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| subheaderstyle = background-color:#cddeff; font-weight:bold;&lt;br /&gt;
| subheader = {{#if:{{both|{{{name|}}}{{{official_name|}}}|{{{settlement_type|{{{type|}}}}}}}}|&amp;lt;span class=&amp;quot;category&amp;quot;&amp;gt;{{{settlement_type|{{{type}}}}}}&amp;lt;/span&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
| rowclass1 = mergedtoprow&lt;br /&gt;
| header1 = {{#if:{{{name|}}}|{{{official_name|}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass2 = mergedtoprow&lt;br /&gt;
| header2 = {{#if:{{{translit_lang1|}}}|{{{translit_lang1}}}&amp;amp;nbsp;transcription(s)&amp;lt;!-- &lt;br /&gt;
***Transliteration language 1*** &lt;br /&gt;
--&amp;gt;{{infobox|child=yes&lt;br /&gt;
  |rowclass1 = {{#if:{{{translit_lang1_type1|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label1 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang1_type}}}&lt;br /&gt;
  |data1 = {{#if:{{{translit_lang1_type|}}}|{{{translit_lang1_info|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass2 = {{#if:{{{translit_lang1_type2|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label2 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang1_type1}}}&lt;br /&gt;
  |data2 = {{#if:{{{translit_lang1_type1|}}}|{{{translit_lang1_info1|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass3 = {{#if:{{{translit_lang1_type3|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label3 =&amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang1_type2}}}&lt;br /&gt;
  |data3 = {{#if:{{{translit_lang1_type2|}}}|{{{translit_lang1_info2|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass4 = {{#if:{{{translit_lang1_type4|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label4 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang1_type3}}}&lt;br /&gt;
  |data4 = {{#if:{{{translit_lang1_type3|}}}|{{{translit_lang1_info3|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass5 = {{#if:{{{translit_lang1_type5|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label5 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang1_type4}}}&lt;br /&gt;
  |data5 = {{#if:{{{translit_lang1_type4|}}}|{{{translit_lang1_info4|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass6 = {{#if:{{{translit_lang1_type6|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label6 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang1_type5}}}&lt;br /&gt;
  |data6 = {{#if:{{{translit_lang1_type5|}}}|{{{translit_lang1_info5|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass7 = mergedbottomrow&lt;br /&gt;
  |label7 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang1_type6}}}&lt;br /&gt;
  |data7 = {{#if:{{{translit_lang1_type6|}}}|{{{translit_lang1_info6|}}} }}&lt;br /&gt;
 }} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass3 = mergedtoprow&lt;br /&gt;
| header3 = {{#if:{{{translit_lang2|}}}|{{{translit_lang2}}}&amp;amp;nbsp;transcription(s)&amp;lt;!-- &lt;br /&gt;
***Transliteration language 2*** &lt;br /&gt;
--&amp;gt;{{infobox|child=yes&lt;br /&gt;
  |rowclass1 = {{#if:{{{translit_lang2_type1|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label1 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang2_type}}}&lt;br /&gt;
  |data1 = {{#if:{{{translit_lang2_type|}}}|{{{translit_lang2_info|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass2 = {{#if:{{{translit_lang2_type2|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label2 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang2_type1}}}&lt;br /&gt;
  |data2 = {{#if:{{{translit_lang2_type1|}}}|{{{translit_lang2_info1|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass3 = {{#if:{{{translit_lang2_type3|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label3 =&amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang2_type2}}}&lt;br /&gt;
  |data3 = {{#if:{{{translit_lang2_type2|}}}|{{{translit_lang2_info2|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass4 = {{#if:{{{translit_lang2_type4|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label4 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang2_type3}}}&lt;br /&gt;
  |data4 = {{#if:{{{translit_lang2_type3|}}}|{{{translit_lang2_info3|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass5 = {{#if:{{{translit_lang2_type5|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label5 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang2_type4}}}&lt;br /&gt;
  |data5 = {{#if:{{{translit_lang2_type4|}}}|{{{translit_lang2_info4|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass6 = {{#if:{{{translit_lang2_type6|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
  |label6 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang2_type5}}}&lt;br /&gt;
  |data6 = {{#if:{{{translit_lang2_type5|}}}|{{{translit_lang2_info5|}}}}}&lt;br /&gt;
&lt;br /&gt;
  |rowclass7 = mergedbottomrow&lt;br /&gt;
  |label7 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{translit_lang2_type6}}}&lt;br /&gt;
  |data7 = {{#if:{{{translit_lang2_type6|}}}|{{{translit_lang2_info6|}}} }}&lt;br /&gt;
 }} }}&lt;br /&gt;
}}&amp;lt;!-- end ** names, type, and transliterations ** --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Skyline Image*** --&amp;gt;&lt;br /&gt;
| imagestyle = padding:0.7em 0.8em&lt;br /&gt;
| image = {{#if:{{{image_skyline|}}}|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_skyline}}}|size={{{imagesize|}}}|sizedefault=250px|alt={{{image_alt|}}}|title={{{image_caption|Skyline of {{#if:{{{name|}}}|{{{name}}}|{{{official_name}}}}}}}}}}{{#if:{{{image_caption|}}}|&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;{{{image_caption}}}&amp;lt;/small&amp;gt;}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Other Image*** --&amp;gt;&lt;br /&gt;
| image2 = {{{image|}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Flag, Seal, Shield and Coat of arms*** --&amp;gt;&lt;br /&gt;
| rowclass1 = mergedtoprow&lt;br /&gt;
| class1 = maptable&lt;br /&gt;
| data1 = {{#if:{{{image_flag|}}}{{{image_seal|}}}{{{image_shield|}}}{{{image_blank_emblem|}}}{{both|{{{pushpin_map_narrow|}}}|{{{pushpin_map|}}}}}&lt;br /&gt;
|{{Infobox settlement/columns&lt;br /&gt;
| 1 = {{#if:{{{image_flag|}}}|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_flag}}}|size={{{flag_size|}}}|sizedefault={{#if:{{both|{{{pushpin_map_narrow|}}}|{{{pushpin_map|}}}}}|85px|100px}}|border={{yesno |{{{flag_border|}}}|yes=yes|blank=yes}}|alt={{{flag_alt|}}}|title=Flag of {{#if:{{{name|}}}|{{{name}}}|{{{official_name}}}}}}}&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;'''{{Infobox settlement/link|type=Flag|link={{{flag_link|}}}|name={{{official_name}}}}}'''&amp;lt;/small&amp;gt;}}&lt;br /&gt;
| 2 = {{#if:{{{image_seal|}}}|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_seal|}}}|size={{{seal_size|}}}|sizedefault={{#if:{{both|{{{pushpin_map_narrow|}}}|{{{pushpin_map|}}}}}|85px|100px}}|alt={{{seal_alt|}}}|title=Official seal of {{#if:{{{name|}}}|{{{name}}}|{{{official_name}}}}}}}&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;'''{{Infobox settlement/link|type={{#if:{{{seal_type|}}}|{{{seal_type}}}|Seal}}|link={{{seal_link|}}}|name={{{official_name}}}}}'''&amp;lt;/small&amp;gt;}}&lt;br /&gt;
| 3 = {{#if:{{{image_shield|}}}|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_shield|}}}||size={{{shield_size|}}}|sizedefault={{#if:{{both|{{{pushpin_map_narrow|}}}|{{{pushpin_map|}}}}}|85px|100px}}|alt={{{shield_alt|}}}|title=Coat of arms of {{#if:{{{name|}}}|{{{name}}}|{{{official_name}}}}}}}&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;'''{{Infobox settlement/link|type=Coat of arms|link={{{shield_link|}}}|name={{{official_name}}}}}'''&amp;lt;/small&amp;gt;}}&lt;br /&gt;
| 4 = {{#if:{{{image_blank_emblem|}}}|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_blank_emblem|}}}|size={{{blank_emblem_size|}}}|sizedefault={{#if:{{both|{{{pushpin_map_narrow|}}}|{{{pushpin_map|}}}}}|85px|100px}}|alt={{{blank_emblem_alt|}}}|title=Official logo of {{#if:{{{name|}}}|{{{name}}}|{{{official_name}}}}}}}&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;'''{{Infobox settlement/link|type={{#if:{{{blank_emblem_type|}}}|{{{blank_emblem_type}}}|Logo}}|link={{{blank_emblem_link|}}}|name={{{official_name}}}}}'''&amp;lt;/small&amp;gt;}}&lt;br /&gt;
| 5 = {{#if:{{{image_map|}}}|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_map}}}|size={{{mapsize|}}}|sizedefault=100px|alt={{{map_alt|}}}|title={{{map_caption|Location of {{#if:{{{name|}}}|{{{name}}}|{{{official_name}}}}}}}}}}{{#if:{{{map_caption|}}}|&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;{{{map_caption}}}&amp;lt;/small&amp;gt;}} }}&lt;br /&gt;
| 0 = {{#if:{{{pushpin_map_narrow|}}}|{{#if:{{both| {{{pushpin_map|}}} | {{both|{{{latd|}}}|{{{longd|}}}}} }}|&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{location map|{{{pushpin_map|}}}&lt;br /&gt;
|border = none&lt;br /&gt;
|alt = {{{pushpin_map_alt|}}}&lt;br /&gt;
|caption =&lt;br /&gt;
|float = none&lt;br /&gt;
|width = {{#if:{{{pushpin_mapsize|}}}|{{{pushpin_mapsize}}}|150}}&lt;br /&gt;
|default_width = 250&lt;br /&gt;
|relief= {{{pushpin_relief|}}}&lt;br /&gt;
|AlternativeMap = {{{pushpin_image|}}}&lt;br /&gt;
 |label = {{#ifeq: {{lc: {{{pushpin_label_position|}}} }} | none | | {{#if:{{{pushpin_label|}}}|{{{pushpin_label}}}|{{#if:{{{name|}}}|{{{name}}}|{{{official_name|}}}}}}} }}&lt;br /&gt;
 |lat = {{#if:{{{latm|}}}{{{latNS|}}}| |{{{latd|}}} }}&lt;br /&gt;
 |long = {{#if:{{{longm|}}}{{{longEW|}}}| |{{{longd|}}} }}&lt;br /&gt;
 |lat_deg={{#if:{{{latm|}}}{{{latNS|}}}|{{{latd|}}} }}&lt;br /&gt;
 |lat_min={{#if:{{{latm|}}}{{{latNS|}}}|{{{latm|}}} }}&lt;br /&gt;
 |lat_sec={{#if:{{{lats|}}}{{{latNS|}}}|{{{lats|}}} }}&lt;br /&gt;
 |lat_dir={{{latNS|}}}&lt;br /&gt;
 |lon_deg={{#if:{{{longm|}}}{{{longEW|}}}|{{{longd|}}} }}&lt;br /&gt;
 |lon_min={{#if:{{{longm|}}}{{{longEW|}}}|{{{longm|}}} }}&lt;br /&gt;
 |lon_sec={{#if:{{{longs|}}}{{{longEW|}}}|{{{longs|}}} }}&lt;br /&gt;
 |lon_dir={{{longEW|}}}&lt;br /&gt;
 |marksize =6&lt;br /&gt;
 |position = {{{pushpin_label_position|}}}&lt;br /&gt;
}}{{#if:{{{pushpin_map_caption|}}}|&amp;lt;small&amp;gt;{{{pushpin_map_caption}}}&amp;lt;/small&amp;gt;|{{#if:{{{map_caption|}}}|&amp;lt;small&amp;gt;{{{map_caption}}}&amp;lt;/small&amp;gt;}}}}&lt;br /&gt;
&amp;lt;/center&amp;gt;}} }}&lt;br /&gt;
}} }}&lt;br /&gt;
&amp;lt;!-- ***Nickname*** --&amp;gt;&lt;br /&gt;
| rowclass2 = mergedrow&lt;br /&gt;
| data2 = {{#if:{{{nickname|}}}|Nickname(s): &amp;lt;span class=&amp;quot;nickname&amp;quot;&amp;gt;{{{nickname}}}&amp;lt;/span&amp;gt;}}&lt;br /&gt;
&amp;lt;!-- ***Motto*** --&amp;gt;&lt;br /&gt;
| rowclass3 = mergedrow&lt;br /&gt;
| data3 = {{#if:{{{motto|}}}|Motto: {{{motto}}} }}&lt;br /&gt;
&amp;lt;!-- ***Anthem*** --&amp;gt;&lt;br /&gt;
| rowclass4 = mergedrow&lt;br /&gt;
| data4 = {{#if:{{{anthem|}}}|Anthem: {{{anthem}}} }}&lt;br /&gt;
&amp;lt;!-- ***Map*** --&amp;gt;&lt;br /&gt;
| rowclass5 = mergedrow&lt;br /&gt;
| data5 = {{#if:{{both|{{{pushpin_map_narrow|}}}|{{{pushpin_map|}}}}}||{{#if:{{{image_map|}}}&lt;br /&gt;
|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_map}}}|size={{{mapsize|}}}|sizedefault=250px|alt={{{map_alt|}}}|title={{{map_caption|Location of {{#if:{{{name|}}}|{{{name}}}|{{{official_name}}}}}}}}}}{{#if:{{{map_caption|}}}|&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;{{{map_caption}}}&amp;lt;/small&amp;gt;}}&lt;br /&gt;
}}}}&lt;br /&gt;
| rowclass6 = mergedrow&lt;br /&gt;
| data6 = {{#if:{{{image_map1|}}}|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_map1}}}|size={{{mapsize1|}}}|sizedefault=250px|alt={{{map_alt1|}}}|title={{{map_caption1|Location of {{#if:{{{name|}}}|{{{name}}}|{{{official_name}}}}}}}}}}{{#if:{{{map_caption1|}}}|&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;{{{map_caption1}}}&amp;lt;/small&amp;gt;}} }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--***Dot Map*** --&amp;gt;&lt;br /&gt;
| rowclass7 = mergedrow&lt;br /&gt;
| data7 = {{#if:{{{image_dot_map|}}}&lt;br /&gt;
|&amp;lt;center&amp;gt;{{superimpose&lt;br /&gt;
|base = {{{image_dot_map|}}}&lt;br /&gt;
|base_width = {{{{{|safesubst:}}}#if:{{{dot_mapsize|}}}&lt;br /&gt;
 |{{{dot_mapsize}}}{{#iferror:{{#expr:{{{dot_mapsize}}}&amp;gt;0}}||px}}&lt;br /&gt;
 |180px}}&lt;br /&gt;
|base_alt = {{{dot_map_base_alt|}}}&lt;br /&gt;
|base_caption = {{#if:{{{official_name|}}}|{{{official_name|}}}|{{{name}}}}}&lt;br /&gt;
|float = Red pog.svg&lt;br /&gt;
|float_width = 6px&lt;br /&gt;
|float_alt = {{{dot_map_alt|}}}&lt;br /&gt;
|float_caption = {{{dot_map_caption|}}}&lt;br /&gt;
|x = {{{dot_x|}}}&lt;br /&gt;
|y = {{{dot_y|}}}&lt;br /&gt;
}}{{#if:{{{dot_map_caption|}}}|&amp;lt;small&amp;gt;{{{dot_map_caption}}}&amp;lt;/small&amp;gt;}}&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Pushpin Map*** --&amp;gt;&lt;br /&gt;
| rowclass8 = mergedtoprow&lt;br /&gt;
| data8 = {{#if:{{{pushpin_map_narrow|}}}||{{#if:{{both| {{{pushpin_map|}}} | {{both|{{{latd|}}}|{{{longd|}}}}} }}|&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{location map|{{{pushpin_map|}}}&lt;br /&gt;
|border = none&lt;br /&gt;
|alt = {{{pushpin_map_alt|}}}&lt;br /&gt;
|caption =&lt;br /&gt;
|float = none&lt;br /&gt;
|width = {{{pushpin_mapsize|}}}&lt;br /&gt;
|default_width = 250&lt;br /&gt;
|relief= {{{pushpin_relief|}}}&lt;br /&gt;
|AlternativeMap = {{{pushpin_image|}}}&lt;br /&gt;
 |label = {{#ifeq: {{lc: {{{pushpin_label_position|}}} }} | none | | {{#if:{{{pushpin_label|}}}|{{{pushpin_label}}}|{{#if:{{{name|}}}|{{{name}}}|{{{official_name|}}}}}}} }}&lt;br /&gt;
 |lat = {{#if:{{{latm|}}}{{{latNS|}}}| |{{{latd|}}} }}&lt;br /&gt;
 |long = {{#if:{{{longm|}}}{{{longEW|}}}| |{{{longd|}}} }}&lt;br /&gt;
 |lat_deg={{#if:{{{latm|}}}{{{latNS|}}}|{{{latd|}}} }}&lt;br /&gt;
 |lat_min={{#if:{{{latm|}}}{{{latNS|}}}|{{{latm|}}} }}&lt;br /&gt;
 |lat_sec={{#if:{{{lats|}}}{{{latNS|}}}|{{{lats|}}} }}&lt;br /&gt;
 |lat_dir={{{latNS|}}}&lt;br /&gt;
 |lon_deg={{#if:{{{longm|}}}{{{longEW|}}}|{{{longd|}}} }}&lt;br /&gt;
 |lon_min={{#if:{{{longm|}}}{{{longEW|}}}|{{{longm|}}} }}&lt;br /&gt;
 |lon_sec={{#if:{{{longs|}}}{{{longEW|}}}|{{{longs|}}} }}&lt;br /&gt;
 |lon_dir={{{longEW|}}}&lt;br /&gt;
 |marksize =6&lt;br /&gt;
 |position = {{{pushpin_label_position|}}}&lt;br /&gt;
}}{{#if:{{{pushpin_map_caption|}}}|&amp;lt;small&amp;gt;{{{pushpin_map_caption}}}&amp;lt;/small&amp;gt;|{{#if:{{{map_caption|}}}|&amp;lt;small&amp;gt;{{{map_caption}}}&amp;lt;/small&amp;gt;}}}}&lt;br /&gt;
&amp;lt;/center&amp;gt;}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass9 = mergedrow&lt;br /&gt;
| data9 = {{#if:{{both|{{{pushpin_map1|}}}|{{both|{{{latd|}}}|{{{longd|}}}}}}}|&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{location map|{{{pushpin_map1|}}}&lt;br /&gt;
|border = none&lt;br /&gt;
|alt = {{{pushpin_map_alt1|}}}&lt;br /&gt;
|caption =&lt;br /&gt;
|float = none&lt;br /&gt;
|width = {{{pushpin_mapsize1|}}}&lt;br /&gt;
|default_width = 250&lt;br /&gt;
|relief= {{{pushpin_relief1|}}}&lt;br /&gt;
|AlternativeMap = {{{pushpin_image1|}}}&lt;br /&gt;
 |label = {{#ifeq: {{lc: {{{pushpin_label_position1|}}} }} | none | | {{#if:{{{pushpin_label1|}}}|{{{pushpin_label1}}}|{{#if:{{{name|}}}|{{{name}}}|{{{official_name|}}}}}}} }}&lt;br /&gt;
 |lat = {{#if:{{{latm|}}}{{{latNS|}}}| |{{{latd|}}} }}&lt;br /&gt;
 |long = {{#if:{{{longm|}}}{{{longEW|}}}| |{{{longd|}}} }}&lt;br /&gt;
 |lat_deg={{#if:{{{latm|}}}{{{latNS|}}}|{{{latd|}}} }}&lt;br /&gt;
 |lat_min={{#if:{{{latm|}}}{{{latNS|}}}|{{{latm|}}} }}&lt;br /&gt;
 |lat_sec={{#if:{{{lats|}}}{{{latNS|}}}|{{{lats|}}} }}&lt;br /&gt;
 |lat_dir={{{latNS|}}}&lt;br /&gt;
 |lon_deg={{#if:{{{longm|}}}{{{longEW|}}}|{{{longd|}}} }}&lt;br /&gt;
 |lon_min={{#if:{{{longm|}}}{{{longEW|}}}|{{{longm|}}} }}&lt;br /&gt;
 |lon_sec={{#if:{{{longs|}}}{{{longEW|}}}|{{{longs|}}} }}&lt;br /&gt;
 |lon_dir={{{longEW|}}}&lt;br /&gt;
 |marksize =6&lt;br /&gt;
 |position = {{{pushpin_label_position1|}}}&lt;br /&gt;
}}{{#if:{{{pushpin_map_caption1|}}}|&amp;lt;small&amp;gt;{{{pushpin_map_caption1|}}}&amp;lt;/small&amp;gt;|{{#if:{{{map_caption|}}}|&amp;lt;small&amp;gt;{{{map_caption}}}&amp;lt;/small&amp;gt;}}}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Coordinates*** --&amp;gt;&lt;br /&gt;
| rowclass10 = mergedbottomrow&lt;br /&gt;
| data10 = {{#if:{{both|{{{latd|}}}|{{{longd|}}}}}&lt;br /&gt;
  |Coordinates{{#if:{{{coor_pinpoint|{{{coor_type|}}}}}}|&amp;amp;#32;({{{coor_pinpoint|{{{coor_type|}}}}}})|}}: {{Geobox coor|{{{latd|}}}|{{{latm|}}}|{{{lats|}}}|{{{latNS|}}}|{{{longd|}}}|{{{longm|}}}|{{{longs|}}}|{{{longEW|}}}|{{#if:{{{coordinates_type|}}}|{{{coordinates_type}}}|type:city{{#if:{{{population_total|}}}|{{#iferror:{{#expr:{{formatnum:{{{population_total}}}|R}}+1}}||({{formatnum:{{{population_total}}}|R}})}}|}}{{#if:{{{coordinates_region|}}}|_region:{{{coordinates_region}}}|{{#if:{{{subdivision_name|}}}|_region:{{CountryAbbr|{{{subdivision_name|}}}|{{{subdivision_name1|}}} }} }} }} }}|{{#ifeq:{{{coordinates_display|}}}|inline|μ|{{#if:{{{coordinates_display|}}}|title|μ}}}}={{{coordinates_display|}}}|{{#if:{{{coordinates_format|}}}|format|μ}}={{{coordinates_format|}}}}}{{{coordinates_footnotes|}}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Subdivisions*** --&amp;gt;&lt;br /&gt;
| rowclass11 = mergedtoprow&lt;br /&gt;
| label11 = {{{subdivision_type}}}&lt;br /&gt;
| data11 = {{#if:{{{subdivision_type|}}}|{{{subdivision_name|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass12 = mergedrow&lt;br /&gt;
| label12 = {{{subdivision_type1}}}&lt;br /&gt;
| data12 = {{#if:{{{subdivision_type1|}}}|{{{subdivision_name1|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass13 = mergedrow&lt;br /&gt;
| label13 = {{{subdivision_type2}}}&lt;br /&gt;
| data13 = {{#if:{{{subdivision_type2|}}}|{{{subdivision_name2|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass14 = mergedrow&lt;br /&gt;
| label14 = {{{subdivision_type3}}}&lt;br /&gt;
| data14 = {{#if:{{{subdivision_type3|}}}|{{{subdivision_name3|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass15 = mergedrow&lt;br /&gt;
| label15 = {{{subdivision_type4}}}&lt;br /&gt;
| data15 = {{#if:{{{subdivision_type4|}}}|{{{subdivision_name4|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass16 = mergedrow&lt;br /&gt;
| label16 = {{{subdivision_type5}}}&lt;br /&gt;
| data16 = {{#if:{{{subdivision_type5|}}}|{{{subdivision_name5|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass17 = mergedrow&lt;br /&gt;
| label17 = {{{subdivision_type6}}}&lt;br /&gt;
| data17 = {{#if:{{{subdivision_type6|}}}|{{{subdivision_name6|}}} }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--***Established*** --&amp;gt;&lt;br /&gt;
| rowclass18 = mergedtoprow&lt;br /&gt;
| label18 = {{{established_title}}}&lt;br /&gt;
| data18 = {{#if:{{{established_title|}}}|{{{established_date|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass19 = mergedrow&lt;br /&gt;
| label19 = {{{established_title1}}}&lt;br /&gt;
| data19 = {{#if:{{{established_title1|}}}|{{{established_date1|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass20 = mergedrow&lt;br /&gt;
| label20 = {{{established_title2}}}&lt;br /&gt;
| data20 = {{#if:{{{established_title2|}}}|{{{established_date2|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass21 = mergedrow&lt;br /&gt;
| label21 = {{{established_title3}}}&lt;br /&gt;
| data21 = {{#if:{{{established_title3|}}}|{{{established_date3|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass22 = mergedrow&lt;br /&gt;
| label22 = {{{established_title4}}}&lt;br /&gt;
| data22 = {{#if:{{{established_title4|}}}|{{{established_date4|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass23 = mergedrow&lt;br /&gt;
| label23 = {{{extinct_title}}}&lt;br /&gt;
| data23 = {{#if:{{{extinct_title|}}}|{{{extinct_date|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass24 = mergedrow&lt;br /&gt;
| label24 = Founded by&lt;br /&gt;
| data24 = {{{founder|}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass25 = mergedrow&lt;br /&gt;
| label25 = [[Namesake|Named for]]&lt;br /&gt;
| data25 = {{{named_for|}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Seat of government and subdivisions within the settlement*** --&amp;gt;&lt;br /&gt;
| rowclass26 = mergedtoprow&lt;br /&gt;
| label26 = {{#if:{{{seat_type|}}}|{{{seat_type}}}|Seat}}&lt;br /&gt;
| data26 = {{{seat|}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass27 = mergedrow&lt;br /&gt;
| label27 = {{#if:{{{seat1_type|}}}|{{{seat1_type}}}|Former seat}}&lt;br /&gt;
| data27 = {{{seat1|}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass28 = {{#if:{{{seat|}}}{{{seat1|}}}|mergedrow|mergedtoprow}}&lt;br /&gt;
| label28 = {{#if:{{{parts_type|}}}|{{{parts_type}}}|Boroughs}}&lt;br /&gt;
| data28 = {{#if:{{{parts|}}}{{{p1|}}}&lt;br /&gt;
|{{#ifeq:{{{parts_style|}}}|para&lt;br /&gt;
  |&amp;lt;b&amp;gt;{{{parts|}}}{{#if:{{both|{{{parts|}}}|{{{p1|}}}}}|&amp;amp;#58;&amp;amp;nbsp;|}}&amp;lt;/b&amp;gt;{{comma separated entries|{{{p1|}}}|{{{p2|}}}|{{{p3|}}}|{{{p4|}}}|{{{p5|}}}|{{{p6|}}}|{{{p7|}}}|{{{p8|}}}|{{{p9|}}}|{{{p10|}}}|{{{p11|}}}|{{{p12|}}}|{{{p13|}}}|{{{p14|}}}|{{{p15|}}}|{{{p16|}}}|{{{p17|}}}|{{{p18|}}}|{{{p19|}}}|{{{p20|}}}|{{{p21|}}}|{{{p22|}}}|{{{p23|}}}|{{{p24|}}}|{{{p25|}}}|{{{p26|}}}|{{{p27|}}}|{{{p28|}}}|{{{p29|}}}|{{{p30|}}}|{{{p31|}}}|{{{p32|}}}|{{{p33|}}}|{{{p34|}}}|{{{p35|}}}|{{{p36|}}}|{{{p37|}}}|{{{p38|}}}|{{{p39|}}}|{{{p40|}}}|{{{p41|}}}|{{{p42|}}}|{{{p43|}}}|{{{p44|}}}|{{{p45|}}}|{{{p46|}}}|{{{p47|}}}|{{{p48|}}}|{{{p49|}}}|{{{p50|}}}}}&lt;br /&gt;
  |{{#if:{{{p1|}}}|{{Collapsible list|title={{{parts|}}}|expand={{#switch:{{{parts_style|}}}|coll=|list=y|{{#if:{{{p6|}}}||y}}}}|1={{{p1|}}}|2={{{p2|}}}|3={{{p3|}}}|4={{{p4|}}}|5={{{p5|}}}|6={{{p6|}}}|7={{{p7|}}}|8={{{p8|}}}|9={{{p9|}}}|10={{{p10|}}}|11={{{p11|}}}|12={{{p12|}}}|13={{{p13|}}}|14={{{p14|}}}|15={{{p15|}}}|16={{{p16|}}}|17={{{p17|}}}|18={{{p18|}}}|19={{{p19|}}}|20={{{p20|}}}|21={{{p21|}}}|22={{{p22|}}}|23={{{p23|}}}|24={{{p24|}}}|25={{{p25|}}}|26={{{p26|}}}|27={{{p27|}}}|28={{{p28|}}}|29={{{p29|}}}|30={{{p30|}}}|31={{{p31|}}}|32={{{p32|}}}|33={{{p33|}}}|34={{{p34|}}}|35={{{p35|}}}|36={{{p36|}}}|37={{{p37|}}}|38={{{p38|}}}|39={{{p39|}}}|40={{{p40|}}}|41={{{p41|}}}|42={{{p42|}}}|43={{{p43|}}}|44={{{p44|}}}|45={{{p45|}}}|46={{{p46|}}}|47={{{p47|}}}|48={{{p48|}}}|49={{{p49|}}}|50={{{p50|}}}}}&lt;br /&gt;
    |{{{parts}}}&lt;br /&gt;
    }}&lt;br /&gt;
  }} }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Government type and Leader*** --&amp;gt;&lt;br /&gt;
| rowclass29 = mergedtoprow&lt;br /&gt;
| header29 = {{#if:{{{government_type|}}}{{{governing_body|}}}{{{leader_name|}}}{{{leader_name1|}}}{{{leader_name2|}}}{{{leader_name3|}}}{{{leader_name4|}}}|Government&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{government_footnotes|}}}&amp;lt;/span&amp;gt;}}&lt;br /&gt;
&amp;lt;!-- ***Government*** --&amp;gt;&lt;br /&gt;
| rowclass30 = mergedrow&lt;br /&gt;
| label30 = &amp;amp;nbsp;•&amp;amp;nbsp;Type&lt;br /&gt;
| data30 = {{{government_type|}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass31 = mergedrow&lt;br /&gt;
| label31 = &amp;amp;nbsp;•&amp;amp;nbsp;Body&lt;br /&gt;
| class31 = agent&lt;br /&gt;
| data31 = {{{governing_body|}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass32 = mergedrow&lt;br /&gt;
| label32 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{leader_title}}}&lt;br /&gt;
| data32 = {{#if:{{{leader_title|}}}|{{{leader_name|}}} {{#if:{{{leader_party|}}}|({{Polparty|{{{subdivision_name}}}|{{{leader_party}}}}})}}}}&lt;br /&gt;
| rowclass33 = mergedrow&lt;br /&gt;
| label33 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{leader_title1}}}&lt;br /&gt;
| data33 = {{#if:{{{leader_title1|}}}|{{{leader_name1|}}}}}&lt;br /&gt;
| rowclass34 = mergedrow&lt;br /&gt;
| label34 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{leader_title2}}}&lt;br /&gt;
| data34 = {{#if:{{{leader_title2|}}}|{{{leader_name2|}}}}}&lt;br /&gt;
| rowclass35 = mergedrow&lt;br /&gt;
| label35 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{leader_title3}}}&lt;br /&gt;
| data35 = {{#if:{{{leader_title3|}}}|{{{leader_name3|}}}}}&lt;br /&gt;
| rowclass36 = mergedrow&lt;br /&gt;
| label36 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{leader_title4}}}&lt;br /&gt;
| data36 = {{#if:{{{leader_title4|}}}|{{{leader_name4|}}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Geographical characteristics*** --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ***Area*** --&amp;gt;&lt;br /&gt;
| rowclass37 = mergedtoprow&lt;br /&gt;
| header37 = {{#if:{{{area_total_km2|}}}{{{area_total_ha|}}}{{{area_total_acre|}}}{{{area_total_sq_mi|}}}{{{area_total_dunam|}}}{{{area_land_km2|}}}{{{area_land_ha|}}}{{{area_land_acre|}}}{{{area_land_sq_mi|}}}{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_acre|}}}{{{area_water_sq_mi|}}}{{{area_urban_km2|}}}{{{area_urban_ha|}}}{{{area_urban_acre|}}}{{{area_urban_sq_mi|}}}{{{area_rural_sq_mi|}}}{{{area_rural_ha|}}}{{{area_rural_acre|}}}{{{area_rural_km2|}}}{{{area_metro_km2|}}}{{{area_metro_ha|}}}{{{area_metro_acre|}}}{{{area_blank1_km2|}}}{{{area_blank1_ha|}}}{{{area_blank1_acre|}}}{{{area_metro_sq_mi|}}}{{{area_blank1_sq_mi|}}}&lt;br /&gt;
 |{{#if:{{both|{{#ifeq:{{{total_type}}}|&amp;amp;nbsp;|1}}|{{{area_total_km2|}}}{{{area_total_ha|}}}{{{area_total_acre|}}}{{{area_total_sq_mi|}}}{{{area_total_dunam|}}}}}&lt;br /&gt;
   |&amp;lt;!-- displayed below --&amp;gt;&lt;br /&gt;
   |Area&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{area_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
  }}&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
| rowclass38 = {{#if:{{both|{{#ifeq:{{{total_type}}}|&amp;amp;nbsp;|1}}|{{{area_total_km2|}}}{{{area_total_ha|}}}{{{area_total_acre|}}}{{{area_total_sq_mi|}}}{{{area_total_dunam|}}}}}|mergedtoprow|mergedrow}}&lt;br /&gt;
| label38 = {{#if:{{both|{{#ifeq:{{{total_type}}}|&amp;amp;nbsp;|1}}|{{{area_total_km2|}}}{{{area_total_ha|}}}{{{area_total_acre|}}}{{{area_total_sq_mi|}}}{{{area_total_dunam|}}}}}&lt;br /&gt;
  |Area&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{area_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
  |&amp;amp;nbsp;•&amp;amp;nbsp;{{#if:{{{total_type|}}}|{{{total_type}}}|{{#if:{{{area_metro_km2|}}}{{{area_metro_sq_mi|}}}{{{area_urban_km2|}}}{{{area_urban_sq_mi|}}}{{{area_rural_km2|}}}{{{area_rural_sq_mi|}}}{{{population_metro|}}}{{{population_urban|}}}{{{population_rural|}}}|{{#if:{{{settlement_type|{{{type|}}}}}}|{{{settlement_type|{{{type}}}}}}|City}}|Total}}}}&lt;br /&gt;
  }}&lt;br /&gt;
| data38 = {{#if:{{{area_total_km2|}}}{{{area_total_ha|}}}{{{area_total_acre|}}}{{{area_total_sq_mi|}}}{{{area_total_dunam|}}}&lt;br /&gt;
 |{{infobox_settlement/areadisp&lt;br /&gt;
   |km2  ={{{area_total_km2|}}}&lt;br /&gt;
   |ha   ={{{area_total_ha|}}}&lt;br /&gt;
   |acre ={{{area_total_acre|}}}&lt;br /&gt;
   |sqmi ={{{area_total_sq_mi|}}}&lt;br /&gt;
   |dunam={{{area_total_dunam|}}}&lt;br /&gt;
   |link ={{#switch:{{{dunam_link|}}}||on|total=on}}&lt;br /&gt;
   |pref ={{{unit_pref}}}&lt;br /&gt;
   |name ={{{subdivision_name}}}&lt;br /&gt;
   |mag  ={{{area_magnitude|}}}&lt;br /&gt;
 }}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass39 = mergedrow&lt;br /&gt;
| label39 = &amp;amp;nbsp;•&amp;amp;nbsp;Land&lt;br /&gt;
| data39 = {{#if:{{{area_land_km2|}}}{{{area_land_ha|}}}{{{area_land_acre|}}}{{{area_land_sq_mi|}}}{{{area_land_dunam|}}}&lt;br /&gt;
 |{{infobox_settlement/areadisp&lt;br /&gt;
   |km2  ={{{area_land_km2|}}}&lt;br /&gt;
   |ha   ={{{area_land_ha|}}}&lt;br /&gt;
   |acre ={{{area_land_acre|}}}&lt;br /&gt;
   |sqmi ={{{area_land_sq_mi|}}}&lt;br /&gt;
   |dunam={{{area_land_dunam|}}}&lt;br /&gt;
   |link ={{#ifeq:{{{dunam_link|}}}|land|on}}&lt;br /&gt;
   |pref ={{{unit_pref}}}&lt;br /&gt;
   |name ={{{subdivision_name}}}&lt;br /&gt;
 }}}}&lt;br /&gt;
| rowclass40 = mergedrow&lt;br /&gt;
| label40 = &amp;amp;nbsp;•&amp;amp;nbsp;Water&lt;br /&gt;
| data40 = {{#if:{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_acre|}}}{{{area_water_sq_mi|}}}{{{area_water_dunam|}}}&lt;br /&gt;
 |{{infobox_settlement/areadisp&lt;br /&gt;
   |km2  ={{{area_water_km2|}}}&lt;br /&gt;
   |ha   ={{{area_water_ha|}}}&lt;br /&gt;
   |acre ={{{area_water_acre|}}}&lt;br /&gt;
   |sqmi ={{{area_water_sq_mi|}}}&lt;br /&gt;
   |dunam={{{area_water_dunam|}}}&lt;br /&gt;
   |link ={{#ifeq:{{{dunam_link|}}}|water|on}}&lt;br /&gt;
   |pref ={{{unit_pref}}}&lt;br /&gt;
   |name ={{{subdivision_name}}}&lt;br /&gt;
 }} {{#if:{{{area_water_percent|}}}| &amp;amp;nbsp;{{{area_water_percent}}}%}}}}&lt;br /&gt;
| rowclass41 = mergedrow&lt;br /&gt;
| label41 = &amp;amp;nbsp;•&amp;amp;nbsp;Urban&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{area_urban_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data41 = {{#if:{{{area_urban_km2|}}}{{{area_urban_ha|}}}{{{area_urban_acre|}}}{{{area_urban_sq_mi|}}}{{{area_urban_dunam|}}}&lt;br /&gt;
 |{{infobox_settlement/areadisp&lt;br /&gt;
   |km2  ={{{area_urban_km2|}}}&lt;br /&gt;
   |ha   ={{{area_urban_ha|}}}&lt;br /&gt;
   |acre ={{{area_urban_acre|}}}&lt;br /&gt;
   |sqmi ={{{area_urban_sq_mi|}}}&lt;br /&gt;
   |dunam={{{area_urban_dunam|}}}&lt;br /&gt;
   |link ={{#ifeq:{{{dunam_link|}}}|urban|on}}&lt;br /&gt;
   |pref ={{{unit_pref}}}&lt;br /&gt;
   |name ={{{subdivision_name}}}&lt;br /&gt;
 }}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass42 = mergedrow&lt;br /&gt;
| label42 = &amp;amp;nbsp;•&amp;amp;nbsp;Rural&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{area_rural_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data42 = {{#if:{{{area_rural_km2|}}}{{{area_rural_ha|}}}{{{area_rural_acre|}}}{{{area_rural_sq_mi|}}}{{{area_rural_dunam|}}}&lt;br /&gt;
 |{{infobox_settlement/areadisp&lt;br /&gt;
   |km2  ={{{area_rural_km2|}}}&lt;br /&gt;
   |ha   ={{{area_rural_ha|}}}&lt;br /&gt;
   |acre ={{{area_rural_acre|}}}&lt;br /&gt;
   |sqmi ={{{area_rural_sq_mi|}}}&lt;br /&gt;
   |dunam={{{area_rural_dunam|}}}&lt;br /&gt;
   |link ={{#ifeq:{{{dunam_link|}}}|rural|on}}&lt;br /&gt;
   |pref ={{{unit_pref}}}&lt;br /&gt;
   |name ={{{subdivision_name}}}&lt;br /&gt;
 }}}}&lt;br /&gt;
| rowclass43 = mergedrow&lt;br /&gt;
| label43 =&amp;amp;nbsp;•&amp;amp;nbsp;Metro&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{area_metro_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data43 = {{#if:{{{area_metro_km2|}}}{{{area_metro_ha|}}}{{{area_metro_acre|}}}{{{area_metro_sq_mi|}}}{{{area_metro_dunam|}}}&lt;br /&gt;
 |{{infobox_settlement/areadisp&lt;br /&gt;
   |km2  ={{{area_metro_km2|}}}&lt;br /&gt;
   |ha   ={{{area_metro_ha|}}}&lt;br /&gt;
   |acre ={{{area_metro_acre|}}}&lt;br /&gt;
   |sqmi ={{{area_metro_sq_mi|}}}&lt;br /&gt;
   |dunam={{{area_metro_dunam|}}}&lt;br /&gt;
   |link ={{#ifeq:{{{dunam_link|}}}|metro|on}}&lt;br /&gt;
   |pref ={{{unit_pref}}}&lt;br /&gt;
   |name ={{{subdivision_name}}}&lt;br /&gt;
 }}}}&lt;br /&gt;
&amp;lt;!-- ***Area rank*** --&amp;gt;&lt;br /&gt;
| rowclass44 = mergedrow&lt;br /&gt;
| label44 = Area rank&lt;br /&gt;
| data44 = {{{area_rank|}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass45 = mergedrow&lt;br /&gt;
| label45 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{area_blank1_title}}}&lt;br /&gt;
| data45 = {{#if:{{{area_blank1_km2|}}}{{{area_blank1_ha|}}}{{{area_blank1_acre|}}}{{{area_blank1_sq_mi|}}}{{{area_blank1_title|}}}{{{area_blank1_dunam|}}}&lt;br /&gt;
  |{{infobox_settlement/areadisp&lt;br /&gt;
   |km2  ={{{area_blank1_km2|}}}&lt;br /&gt;
   |ha   ={{{area_blank1_ha|}}}&lt;br /&gt;
   |acre ={{{area_blank1_acre|}}}&lt;br /&gt;
   |sqmi ={{{area_blank1_sq_mi|}}}&lt;br /&gt;
   |dunam={{{area_blank1_dunam|}}}&lt;br /&gt;
   |link ={{#ifeq:{{{dunam_link|}}}|blank1|on}}&lt;br /&gt;
   |pref ={{{unit_pref}}}&lt;br /&gt;
   |name ={{{subdivision_name}}}&lt;br /&gt;
 }}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass46 = mergedrow&lt;br /&gt;
| label46 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{area_blank2_title}}}&lt;br /&gt;
| data46 = {{#if:{{{area_blank2_km2|}}}{{{area_blank2_ha|}}}{{{area_blank2_acre|}}}{{{area_blank2_sq_mi|}}}{{{area_blank2_title|}}}{{{area_blank2_dunam|}}}&lt;br /&gt;
  |{{infobox_settlement/areadisp&lt;br /&gt;
   |km2  ={{{area_blank2_km2|}}}&lt;br /&gt;
   |ha   ={{{area_blank2_ha|}}}&lt;br /&gt;
   |acre ={{{area_blank2_acre|}}}&lt;br /&gt;
   |sqmi ={{{area_blank2_sq_mi|}}}&lt;br /&gt;
   |dunam={{{area_blank2_dunam|}}}&lt;br /&gt;
   |link ={{#ifeq:{{{dunam_link|}}}|blank2|on}}&lt;br /&gt;
   |pref ={{{unit_pref}}}&lt;br /&gt;
   |name ={{{subdivision_name}}}&lt;br /&gt;
 }}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass47 = mergedrow&lt;br /&gt;
| label47 = &amp;amp;nbsp;&lt;br /&gt;
| data47 =  {{#if:{{{area_note|}}}|&amp;lt;small&amp;gt;{{{area_note}}}&amp;lt;/small&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Dimensions*** --&amp;gt;&lt;br /&gt;
| rowclass48 = mergedtoprow&lt;br /&gt;
| header48 = {{#if:{{{length_km|}}}{{{length_mi|}}}{{{width_km|}}}{{{width_mi|}}}|Dimensions&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{dimensions_footnotes|}}}&amp;lt;/span&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
| rowclass49 = mergedrow&lt;br /&gt;
| label49 = &amp;amp;nbsp;•&amp;amp;nbsp;Length&lt;br /&gt;
| data49 = {{#if:{{{length_km|}}}{{{length_mi|}}}&lt;br /&gt;
 | {{infobox_settlement/lengthdisp&lt;br /&gt;
      |km  ={{{length_km|}}}&lt;br /&gt;
      |mi  ={{{length_mi|}}}&lt;br /&gt;
      |pref={{{unit_pref}}}&lt;br /&gt;
      |name={{{subdivision_name}}}&lt;br /&gt;
    }} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass50 = mergedrow&lt;br /&gt;
| label50 = &amp;amp;nbsp;•&amp;amp;nbsp;Width&lt;br /&gt;
| data50 = {{#if:{{{width_km|}}}{{{width_mi|}}}&lt;br /&gt;
 |{{infobox_settlement/lengthdisp&lt;br /&gt;
      |km  ={{{width_km|}}}&lt;br /&gt;
      |mi  ={{{width_mi|}}}&lt;br /&gt;
      |pref={{{unit_pref}}}&lt;br /&gt;
      |name={{{subdivision_name}}}&lt;br /&gt;
    }} }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Elevation*** --&amp;gt;&lt;br /&gt;
| rowclass51 = mergedtoprow&lt;br /&gt;
| label51 = Elevation&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{elevation_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data51 = {{#if:{{{elevation_m|}}}{{{elevation_ft|}}}&lt;br /&gt;
 |{{infobox_settlement/lengthdisp&lt;br /&gt;
      |m   ={{{elevation_m|}}}&lt;br /&gt;
      |ft  ={{{elevation_ft|}}}&lt;br /&gt;
      |pref={{{unit_pref}}}&lt;br /&gt;
      |name={{{subdivision_name}}}&lt;br /&gt;
    }} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass52 = mergedtoprow&lt;br /&gt;
| label52 = Highest&amp;amp;nbsp;elevation&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{elevation_max_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data52 = {{#if:{{{elevation_max_m|}}}{{{elevation_max_ft|}}}&lt;br /&gt;
 |{{infobox_settlement/lengthdisp&lt;br /&gt;
      |m   ={{{elevation_max_m|}}}&lt;br /&gt;
      |ft  ={{{elevation_max_ft|}}}&lt;br /&gt;
      |pref={{{unit_pref}}}&lt;br /&gt;
      |name={{{subdivision_name}}}&lt;br /&gt;
    }} }}&lt;br /&gt;
&amp;lt;!-- ***Elevation max rank*** --&amp;gt;&lt;br /&gt;
| rowclass53 = mergedrow&lt;br /&gt;
| label53 = &amp;amp;nbsp;•&amp;amp;nbsp;Rank&lt;br /&gt;
| data53 =  {{#if:{{{elevation_max_m|}}}{{{elevation_max_ft|}}}| {{{elevation_max_rank|}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass54 = {{#if:{{{elevation_min_rank|}}}|mergedrow|mergedbottomrow}}&lt;br /&gt;
| label54 = Lowest&amp;amp;nbsp;elevation&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{elevation_min_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data54 = {{#if:{{{elevation_min_m|}}}{{{elevation_min_ft|}}}&lt;br /&gt;
  |{{infobox_settlement/lengthdisp&lt;br /&gt;
      |m   ={{{elevation_min_m|}}}&lt;br /&gt;
      |ft  ={{{elevation_min_ft|}}}&lt;br /&gt;
      |pref={{{unit_pref}}}&lt;br /&gt;
      |name={{{subdivision_name}}}&lt;br /&gt;
    }} }}&lt;br /&gt;
&amp;lt;!-- ***Elevation min rank*** --&amp;gt;&lt;br /&gt;
| rowclass55 = mergedrow&lt;br /&gt;
| label55 = &amp;amp;nbsp;•&amp;amp;nbsp;Rank&lt;br /&gt;
| data55 = {{#if:{{{elevation_min_m|}}}{{{elevation_min_ft|}}}|{{{elevation_min_rank|}}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Population*** --&amp;gt;&lt;br /&gt;
| rowclass56 = mergedtoprow&lt;br /&gt;
| label56 = Population &amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{#if:{{{population_as_of|}}}|({{{population_as_of}}})}}{{{population_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data56 = {{#if:{{{population|}}}&lt;br /&gt;
  | {{formatnum:{{{population}}}}}&lt;br /&gt;
  | {{#ifeq:{{{total_type}}}|&amp;amp;nbsp;&lt;br /&gt;
    | {{#if:{{{population_total|}}}&lt;br /&gt;
      | {{formatnum:{{{population_total}}}}}&lt;br /&gt;
      }}&lt;br /&gt;
    }}&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
| rowclass57 = mergedtoprow&lt;br /&gt;
| header57 = {{#if:{{{population|}}}&lt;br /&gt;
  |&lt;br /&gt;
  |{{#ifeq:{{{total_type}}}|&amp;amp;nbsp;&lt;br /&gt;
     |&lt;br /&gt;
     |{{#if:{{{population_total|}}}{{{population_urban|}}}{{{population_rural|}}}{{{population_metro|}}}{{{population_blank1|}}}{{{population_blank2|}}}{{{population_est|}}}&lt;br /&gt;
       |Population &amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{#if:{{{population_as_of|}}}|({{{population_as_of}}})}}{{{population_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
      }}&lt;br /&gt;
    }}&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
| rowclass58 = mergedrow&lt;br /&gt;
| label58 = &amp;amp;nbsp;•&amp;amp;nbsp;{{#if:{{{total_type|}}}|{{{total_type}}}|{{#if:{{{population_metro|}}}{{{population_urban|}}}{{{population_rural|}}}{{{area_metro_km2|}}}{{{area_metro_sq_mi|}}}{{{area_urban_km2|}}}{{{area_urban_sq_mi|}}}{{{area_rural_km2|}}}{{{area_rural_sq_mi|}}}|{{#if:{{{settlement_type|{{{type|}}}}}}|{{{settlement_type|{{{type}}}}}}|City}}|Total}}}}&lt;br /&gt;
| data58 = {{#if:{{{population|}}}&lt;br /&gt;
  |&lt;br /&gt;
  |{{#ifeq:{{{total_type}}}|&amp;amp;nbsp;&lt;br /&gt;
     |&lt;br /&gt;
     |{{#if:{{{population_total|}}}&lt;br /&gt;
       | {{formatnum:{{{population_total}}}}}&lt;br /&gt;
      }}&lt;br /&gt;
    }}&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
| rowclass59 = mergedrow&lt;br /&gt;
| label59 = &amp;amp;nbsp;•&amp;amp;nbsp;Estimate&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;({{{pop_est_as_of}}}){{{pop_est_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data59 = {{#if:{{{population_est|}}}|{{formatnum:{{{population_est}}}}} }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Population rank*** --&amp;gt;&lt;br /&gt;
| rowclass60 = mergedrow&lt;br /&gt;
| label60 =&amp;amp;nbsp;•&amp;amp;nbsp;Rank&lt;br /&gt;
| data60 = {{{population_rank|}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass61 = mergedrow&lt;br /&gt;
| label61 = &amp;amp;nbsp;•&amp;amp;nbsp;Density&lt;br /&gt;
| data61 = {{#if:{{{population_density_km2|}}}{{{population_density_sq_mi|}}}{{{population_total|}}}&lt;br /&gt;
   |{{infobox_settlement/densdisp&lt;br /&gt;
      |/km2 ={{{population_density_km2|}}}&lt;br /&gt;
      |/sqmi={{{population_density_sq_mi|}}}&lt;br /&gt;
      |pop  ={{{population_total|}}}&lt;br /&gt;
      |dunam={{{area_total_dunam|}}}&lt;br /&gt;
      |ha   ={{{area_total_ha|}}}&lt;br /&gt;
      |km2  ={{{area_total_km2|}}}&lt;br /&gt;
      |acre ={{{area_total_acre|}}}&lt;br /&gt;
      |sqmi ={{{area_total_sq_mi|}}}&lt;br /&gt;
      |pref ={{{unit_pref}}}&lt;br /&gt;
      |name ={{{subdivision_name}}}&lt;br /&gt;
    }}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Population density rank*** --&amp;gt;&lt;br /&gt;
| rowclass62 = mergedrow&lt;br /&gt;
| label62 = &amp;amp;nbsp;•&amp;amp;nbsp;Density&amp;amp;nbsp;rank&lt;br /&gt;
| data62 = {{{population_density_rank|}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass63 = mergedrow&lt;br /&gt;
| label63 = &amp;amp;nbsp;•&amp;amp;nbsp;[[Urban area|Urban]]&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{population_urban_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data63 = {{#if:{{{population_urban|}}}| {{formatnum:{{{population_urban}}}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass64 = mergedrow&lt;br /&gt;
| label64 = &amp;amp;nbsp;•&amp;amp;nbsp;Urban&amp;amp;nbsp;density&lt;br /&gt;
| data64 = {{#if:{{{population_density_urban_km2|}}}{{{population_density_urban_sq_mi|}}}{{{population_urban|}}}&lt;br /&gt;
   |{{infobox_settlement/densdisp&lt;br /&gt;
      |/km2 ={{{population_density_urban_km2|}}}&lt;br /&gt;
      |/sqmi={{{population_density_urban_sq_mi|}}}&lt;br /&gt;
      |pop  ={{{population_urban|}}}&lt;br /&gt;
      |ha   ={{{area_urban_ha|}}}&lt;br /&gt;
      |km2  ={{{area_urban_km2|}}}&lt;br /&gt;
      |acre ={{{area_urban_acre|}}}&lt;br /&gt;
      |sqmi ={{{area_urban_sq_mi|}}}&lt;br /&gt;
      |dunam={{{area_urban_dunam|}}}&lt;br /&gt;
      |pref ={{{unit_pref}}}&lt;br /&gt;
      |name ={{{subdivision_name}}}&lt;br /&gt;
    }}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass65 = mergedrow&lt;br /&gt;
| label65 = &amp;amp;nbsp;•&amp;amp;nbsp;[[Rural area|Rural]]&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{population_rural_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data65 = {{#if:{{{population_rural|}}}|{{formatnum:{{{population_rural}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass66 = mergedrow&lt;br /&gt;
| label66 = &amp;amp;nbsp;•&amp;amp;nbsp;Rural&amp;amp;nbsp;density&lt;br /&gt;
| data66 = {{#if:{{{population_density_rural_km2|}}}{{{population_density_rural_sq_mi|}}}{{{population_rural|}}}&lt;br /&gt;
   |{{infobox_settlement/densdisp&lt;br /&gt;
      |/km2 ={{{population_density_rural_km2|}}}&lt;br /&gt;
      |/sqmi={{{population_density_rural_sq_mi|}}}&lt;br /&gt;
      |pop  ={{{population_rural|}}}&lt;br /&gt;
      |ha   ={{{area_rural_ha|}}}&lt;br /&gt;
      |km2  ={{{area_rural_km2|}}}&lt;br /&gt;
      |acre ={{{area_rural_acre|}}}&lt;br /&gt;
      |sqmi ={{{area_rural_sq_mi|}}}&lt;br /&gt;
      |dunam={{{area_rural_dunam|}}}&lt;br /&gt;
      |pref ={{{unit_pref}}}&lt;br /&gt;
      |name ={{{subdivision_name}}}&lt;br /&gt;
    }}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass67 = mergedrow&lt;br /&gt;
| label67 =&amp;amp;nbsp;•&amp;amp;nbsp;[[Metropolitan area|Metro]]&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{population_metro_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data67 = {{#if:{{{population_metro|}}}| {{formatnum:{{{population_metro}}}}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass68 = mergedrow&lt;br /&gt;
| label68 = &amp;amp;nbsp;•&amp;amp;nbsp;Metro&amp;amp;nbsp;density&lt;br /&gt;
| data68 =  {{#if:{{{population_density_metro_km2|}}}{{{population_density_metro_sq_mi|}}}{{{population_metro|}}}&lt;br /&gt;
   |{{infobox_settlement/densdisp&lt;br /&gt;
      |/km2 ={{{population_density_metro_km2|}}}&lt;br /&gt;
      |/sqmi={{{population_density_metro_sq_mi|}}}&lt;br /&gt;
      |pop  ={{{population_metro|}}}&lt;br /&gt;
      |ha   ={{{area_metro_ha|}}}&lt;br /&gt;
      |km2  ={{{area_metro_km2|}}}&lt;br /&gt;
      |acre ={{{area_metro_acre|}}}&lt;br /&gt;
      |sqmi ={{{area_metro_sq_mi|}}}&lt;br /&gt;
      |dunam={{{area_metro_dunam|}}}&lt;br /&gt;
      |pref ={{{unit_pref}}}&lt;br /&gt;
      |name ={{{subdivision_name}}}&lt;br /&gt;
    }}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass69 = mergedrow&lt;br /&gt;
| label69 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{population_blank1_title|}}}&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{population_blank1_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data69 = {{#if:{{{population_blank1|}}}|{{formatnum:{{{population_blank1}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass70 = mergedrow&lt;br /&gt;
| label70 = &amp;amp;nbsp;•&amp;amp;nbsp;{{#if:{{{population_blank1_title|}}}|{{{population_blank1_title}}} density|Density}}&lt;br /&gt;
| data70 =  {{#if:{{{population_density_blank1_km2|}}}{{{population_density_blank1_sq_mi|}}}{{{population_blank1|}}}&lt;br /&gt;
   |{{infobox_settlement/densdisp&lt;br /&gt;
      |/km2 ={{{population_density_blank1_km2|}}}&lt;br /&gt;
      |/sqmi={{{population_density_blank1_sq_mi|}}}&lt;br /&gt;
      |pop  ={{{population_blank1|}}}&lt;br /&gt;
      |ha   ={{{area_blank1_ha|}}}&lt;br /&gt;
      |km2  ={{{area_blank1_km2|}}}&lt;br /&gt;
      |acre ={{{area_blank1_acre|}}}&lt;br /&gt;
      |sqmi ={{{area_blank1_sq_mi|}}}&lt;br /&gt;
      |dunam={{{area_blank1_dunam|}}}&lt;br /&gt;
      |pref ={{{unit_pref}}}&lt;br /&gt;
      |name ={{{subdivision_name}}}&lt;br /&gt;
    }}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass71 = mergedrow&lt;br /&gt;
| label71 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{population_blank2_title|}}}&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{population_blank2_footnotes|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
| data71 = {{#if:{{{population_blank2|}}}|{{formatnum:{{{population_blank2}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass72 = mergedrow&lt;br /&gt;
| label72 = &amp;amp;nbsp;•&amp;amp;nbsp;{{#if:{{{population_blank2_title|}}}|{{{population_blank2_title}}} density|Density}}&lt;br /&gt;
| data72 = {{#if:{{{population_density_blank2_km2|}}}{{{population_density_blank2_sq_mi|}}}{{{population_blank2|}}}&lt;br /&gt;
   |{{infobox_settlement/densdisp&lt;br /&gt;
      |/km2 ={{{population_density_blank2_km2|}}}&lt;br /&gt;
      |/sqmi={{{population_density_blank2_sq_mi|}}}&lt;br /&gt;
      |pop  ={{{population_blank2|}}}&lt;br /&gt;
      |ha   ={{{area_blank2_ha|}}}&lt;br /&gt;
      |km2  ={{{area_blank2_km2|}}}&lt;br /&gt;
      |acre ={{{area_blank2_acre|}}}&lt;br /&gt;
      |sqmi ={{{area_blank2_sq_mi|}}}&lt;br /&gt;
      |dunam={{{area_blank2_dunam|}}}&lt;br /&gt;
      |pref ={{{unit_pref}}}&lt;br /&gt;
      |name ={{{subdivision_name}}}&lt;br /&gt;
    }}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass73 = mergedrow&lt;br /&gt;
| label73 = &amp;amp;nbsp;&lt;br /&gt;
| data73 = {{#if:{{{population_note|}}}|&amp;lt;small&amp;gt;{{{population_note}}}&amp;lt;/small&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
| rowclass74 = mergedtoprow&lt;br /&gt;
| label74 = [[Demonym]]&lt;br /&gt;
| data74 = {{{population_demonym|}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass75 = mergedtoprow&lt;br /&gt;
| header75 = {{#if:{{{demographics_type1|}}}&lt;br /&gt;
|{{{demographics_type1}}}&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{demographics1_footnotes|}}}&amp;lt;/span&amp;gt;&amp;lt;!-- &lt;br /&gt;
 ***Demographics 1*** &lt;br /&gt;
--&amp;gt;{{infobox|child=yes&lt;br /&gt;
&lt;br /&gt;
| rowclass1 = mergedrow&lt;br /&gt;
| label1 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics1_title1}}}&lt;br /&gt;
| data1 = {{#if:{{{demographics1_title1|}}}|{{{demographics1_info1}}}}}&lt;br /&gt;
| rowclass2 = mergedrow&lt;br /&gt;
| label2 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics1_title2}}}&lt;br /&gt;
| data2 = {{#if:{{{demographics1_title2|}}}|{{{demographics1_info2}}}}}&lt;br /&gt;
| rowclass3 = mergedrow&lt;br /&gt;
| label3 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics1_title3}}}&lt;br /&gt;
| data3 = {{#if:{{{demographics1_title3|}}}|{{{demographics1_info3}}}}}&lt;br /&gt;
| rowclass4 = mergedrow&lt;br /&gt;
| label4 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics1_title4}}}&lt;br /&gt;
| data4 = {{#if:{{{demographics1_title4|}}}|{{{demographics1_info4}}}}}&lt;br /&gt;
| rowclass5 = mergedrow&lt;br /&gt;
| label5 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics1_title5}}}&lt;br /&gt;
| data5 = {{#if:{{{demographics1_title5|}}}|{{{demographics1_info5}}}}}&lt;br /&gt;
}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass76 = mergedtoprow&lt;br /&gt;
| header76 = {{#if:{{{demographics_type2|}}}&lt;br /&gt;
|{{{demographics_type2}}}&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;{{{demographics2_footnotes|}}}&amp;lt;/span&amp;gt;&amp;lt;!-- &lt;br /&gt;
***Demographics 2*** &lt;br /&gt;
--&amp;gt;{{infobox|child=yes&lt;br /&gt;
| rowclass1 = mergedrow&lt;br /&gt;
| label1 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics2_title1}}}&lt;br /&gt;
| data1 = {{#if:{{{demographics2_title1|}}}|{{{demographics2_info1}}}}}&lt;br /&gt;
| rowclass2 = mergedrow&lt;br /&gt;
| label2 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics2_title2}}}&lt;br /&gt;
| data2 = {{#if:{{{demographics2_title2|}}}|{{{demographics2_info2}}}}}&lt;br /&gt;
| rowclass3 = mergedrow&lt;br /&gt;
| label3 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics2_title3}}}&lt;br /&gt;
| data3 = {{#if:{{{demographics2_title3|}}}|{{{demographics2_info3}}}}}&lt;br /&gt;
| rowclass4 = mergedrow&lt;br /&gt;
| label4 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics2_title4}}}&lt;br /&gt;
| data4 = {{#if:{{{demographics2_title4|}}}|{{{demographics2_info4}}}}}&lt;br /&gt;
| rowclass5 = mergedrow&lt;br /&gt;
| label5 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{demographics2_title5}}}&lt;br /&gt;
| data5 = {{#if:{{{demographics2_title5|}}}|{{{demographics2_info5}}}}}&lt;br /&gt;
}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Time Zones*** --&amp;gt;&lt;br /&gt;
| rowclass77 = mergedtoprow&lt;br /&gt;
| label77 = {{#if:{{{timezone2|}}}|[[Time zone]]s|[[Time zone]]}}&lt;br /&gt;
| data77 = {{#if:{{{timezone1|{{{timezone|}}}}}}|{{{timezone1|{{{timezone}}}}}} {{#if:{{{utc_offset1|{{{utc_offset|}}} }}}|([[UTC{{{utc_offset1|{{{utc_offset}}}}}}]])}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass78 = mergedrow&lt;br /&gt;
| label78 = &amp;lt;nowiki /&amp;gt;&lt;br /&gt;
| data78 = {{#if:{{{timezone1|{{{timezone|}}}}}}|{{#if:{{{timezone2|}}}|{{{timezone2}}} {{#if:{{{utc_offset2|{{{utc_offset2|}}} }}}|([[UTC{{{utc_offset2|{{{utc_offset2}}}}}}]])}} }} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass79 = mergedrow&lt;br /&gt;
| label79 = &amp;lt;span style=&amp;quot;white-space:nowrap&amp;quot;&amp;gt;&amp;amp;nbsp;•&amp;amp;nbsp;Summer ([[Daylight saving time|DST]])&amp;lt;/span&amp;gt;&lt;br /&gt;
| data79 = {{#if:{{{timezone1|{{{timezone|}}}}}}|{{#if:{{{timezone1_DST|{{{timezone_DST|}}}}}}|{{{timezone1_DST|{{{timezone_DST|}}}}}} ([[UTC{{{utc_offset1_DST|{{{utc_offset_DST|}}}}}}]])}} }}&lt;br /&gt;
&lt;br /&gt;
| rowclass80 = mergedrow&lt;br /&gt;
| label80 = &amp;lt;nowiki /&amp;gt;&lt;br /&gt;
| data80 = {{#if:{{{timezone1|{{{timezone|}}}}}}|{{#if:{{{timezone1_DST|{{{timezone_DST|}}}}}}|{{#if:{{{timezone2_DST|}}}|{{{timezone2_DST}}} ([[UTC{{{utc_offset2_DST|}}}]])}} }} }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Postal Code(s)*** --&amp;gt;&lt;br /&gt;
| rowclass81 = mergedtoprow&lt;br /&gt;
| label81 = {{{postal_code_type}}}&lt;br /&gt;
| class81 = adr&lt;br /&gt;
| data81 = {{#if:{{{postal_code_type|}}}|{{#if:{{{postal_code|}}}|&amp;lt;span class=&amp;quot;postal-code&amp;quot;&amp;gt;{{{postal_code}}}&amp;lt;/span&amp;gt;}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass82 = mergedbottomrow&lt;br /&gt;
| label82 = {{{postal2_code_type}}}&lt;br /&gt;
| class82 = adr&lt;br /&gt;
| data82 = {{#if:{{{postal_code_type|}}}|{{#if:{{{postal2_code_type|}}}|{{#if:{{{postal2_code|}}}|&amp;lt;span class=&amp;quot;postal-code&amp;quot;&amp;gt;{{{postal2_code}}}&amp;lt;/span&amp;gt;}} }} }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Area Code(s)*** --&amp;gt;&lt;br /&gt;
| rowclass83 = mergedrow&lt;br /&gt;
| label83 = {{#if:{{{area_code_type|}}}|{{{area_code_type}}}|[[Telephone numbering plan|Area code(s)]]}}&lt;br /&gt;
| data83 = {{{area_code|}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Geocode--&amp;gt;&lt;br /&gt;
| rowclass84 = mergedrow&lt;br /&gt;
| label84 = [[Geocode]]&lt;br /&gt;
| class84 = nickname&lt;br /&gt;
| data84 = {{{geocode|}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ISO Code--&amp;gt;&lt;br /&gt;
| rowclass85 = mergedrow&lt;br /&gt;
| label85 = [[ISO 3166|ISO 3166 code]]&lt;br /&gt;
| class85 = nickname&lt;br /&gt;
| data85 = {{{iso_code|}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Vehicle registration plate--&amp;gt;&lt;br /&gt;
| rowclass86 = mergedrow&lt;br /&gt;
| label86 = [[Vehicle registration plate|Vehicle registration]]&lt;br /&gt;
| data86 = {{{registration_plate|}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| rowclass87 = mergedtoprow&lt;br /&gt;
| header87 = {{#if:{{{twin1|}}}&lt;br /&gt;
 |[[List of twin towns and sister cities|Twin cities]]&amp;lt;!-- &lt;br /&gt;
 ***Twin Cities*** &lt;br /&gt;
--&amp;gt;{{infobox|child=yes&lt;br /&gt;
&lt;br /&gt;
| rowclass1 = mergedrow&lt;br /&gt;
| label1 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{twin1}}}&lt;br /&gt;
| data1 = {{#if:{{{twin1|}}}|{{{twin1_country}}}}}&lt;br /&gt;
| rowclass2 = mergedrow&lt;br /&gt;
| label2 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{twin2}}}&lt;br /&gt;
| data2 = {{#if:{{{twin2|}}}|{{{twin2_country}}}}}&lt;br /&gt;
| rowclass3 = mergedrow&lt;br /&gt;
| label3 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{twin3}}}&lt;br /&gt;
| data3 = {{#if:{{{twin3|}}}|{{{twin3_country}}}}}&lt;br /&gt;
| rowclass4 = mergedrow&lt;br /&gt;
| label4 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{twin4}}}&lt;br /&gt;
| data4 = {{#if:{{{twin4|}}}|{{{twin4_country}}}}}&lt;br /&gt;
| rowclass5 = mergedrow&lt;br /&gt;
| label5 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{twin5}}}&lt;br /&gt;
| data5 = {{#if:{{{twin5|}}}|{{{twin5_country}}}}}&lt;br /&gt;
| rowclass6 = mergedrow&lt;br /&gt;
| label6 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{twin6}}}&lt;br /&gt;
| data6 = {{#if:{{{twin6|}}}|{{{twin6_country}}}}}&lt;br /&gt;
| rowclass7 = mergedrow&lt;br /&gt;
| label7 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{twin7}}}&lt;br /&gt;
| data7 = {{#if:{{{twin7|}}}|{{{twin7_country}}}}}&lt;br /&gt;
| rowclass8 = mergedrow&lt;br /&gt;
| label8 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{twin8}}}&lt;br /&gt;
| data8 = {{#if:{{{twin8|}}}|{{{twin8_country}}}}}&lt;br /&gt;
| rowclass9 = mergedrow&lt;br /&gt;
| label9 = &amp;amp;nbsp;•&amp;amp;nbsp;{{{twin9}}}&lt;br /&gt;
| data9 = {{#if:{{{twin9|}}}|{{{twin9_country}}}}}&lt;br /&gt;
}} }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Blank Fields (two sections)*** --&amp;gt;&lt;br /&gt;
| rowclass88 = mergedtoprow&lt;br /&gt;
| label88 = {{{blank_name_sec1|{{{blank_name|}}}}}}&lt;br /&gt;
| data88 = {{#if:{{{blank_name_sec1|{{{blank_name|}}}}}}|{{{blank_info_sec1|{{{blank_info|}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass89 = mergedrow&lt;br /&gt;
| label89 = {{{blank1_name_sec1|{{{blank1_name|}}}}}}&lt;br /&gt;
| data89 = {{#if:{{{blank1_name_sec1|{{{blank1_name|}}}}}}|{{{blank1_info_sec1|{{{blank1_info|}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass90 = mergedrow&lt;br /&gt;
| label90 = {{{blank2_name_sec1|{{{blank2_name|}}}}}}&lt;br /&gt;
| data90 = {{#if:{{{blank2_name_sec1|{{{blank2_name|}}}}}}|{{{blank2_info_sec1|{{{blank2_info|}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass91 = mergedrow&lt;br /&gt;
| label91 = {{{blank3_name_sec1|{{{blank3_name|}}}}}}&lt;br /&gt;
| data91 = {{#if:{{{blank3_name_sec1|{{{blank3_name|}}}}}}|{{{blank3_info_sec1|{{{blank3_info|}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass92 = mergedrow&lt;br /&gt;
| label92 = {{{blank4_name_sec1|{{{blank4_name|}}}}}}&lt;br /&gt;
| data92 = {{#if:{{{blank4_name_sec1|{{{blank4_name|}}}}}}|{{{blank4_info_sec1|{{{blank4_info|}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass93 = mergedrow&lt;br /&gt;
| label93 = {{{blank5_name_sec1|{{{blank5_name|}}}}}}&lt;br /&gt;
| data93 = {{#if:{{{blank5_name_sec1|{{{blank5_name|}}}}}}|{{{blank5_info_sec1|{{{blank5_info|}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass94 = mergedrow&lt;br /&gt;
| label94 = {{{blank6_name_sec1|{{{blank6_name|}}}}}}&lt;br /&gt;
| data94 = {{#if:{{{blank6_name_sec1|{{{blank6_name|}}}}}}|{{{blank6_info_sec1|{{{blank6_info|}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass95 = mergedrow&lt;br /&gt;
| label95 = {{{blank7_name_sec1|{{{blank7_name|}}}}}}&lt;br /&gt;
| data95 = {{#if:{{{blank7_name_sec1|{{{blank7_name|}}}}}}|{{{blank7_info_sec1|{{{blank7_info|}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass96 = mergedtoprow&lt;br /&gt;
| label96 = {{{blank_name_sec2}}}&lt;br /&gt;
| data96 = {{#if:{{{blank_name_sec2|}}}|{{{blank_info_sec2|}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass97 = mergedrow&lt;br /&gt;
| label97 = {{{blank1_name_sec2}}}&lt;br /&gt;
| data97 = {{#if:{{{blank1_name_sec2|}}}|{{{blank1_info_sec2|}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass98 = mergedrow&lt;br /&gt;
| label98 = {{{blank2_name_sec2}}}&lt;br /&gt;
| data98 = {{#if:{{{blank2_name_sec2|}}}|{{{blank2_info_sec2|}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass99 = mergedrow&lt;br /&gt;
| label99 = {{{blank3_name_sec2}}}&lt;br /&gt;
| data99 = {{#if:{{{blank3_name_sec2|}}}|{{{blank3_info_sec2|}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass100 = mergedrow&lt;br /&gt;
| label100 = {{{blank4_name_sec2}}}&lt;br /&gt;
| data100 = {{#if:{{{blank4_name_sec2|}}}|{{{blank4_info_sec2|}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass101 = mergedrow&lt;br /&gt;
| label101 = {{{blank5_name_sec2}}}&lt;br /&gt;
| data101 = {{#if:{{{blank5_name_sec2|}}}|{{{blank5_info_sec2|}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass102 = mergedrow&lt;br /&gt;
| label102 = {{{blank6_name_sec2}}}&lt;br /&gt;
| data102 = {{#if:{{{blank6_name_sec2|}}}|{{{blank6_info_sec2|}}}}}&lt;br /&gt;
&lt;br /&gt;
| rowclass103 = mergedrow&lt;br /&gt;
| label103 = {{{blank7_name_sec2}}}&lt;br /&gt;
| data103 = {{#if:{{{blank7_name_sec2|}}}|{{{blank7_info_sec2|}}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Website*** --&amp;gt;&lt;br /&gt;
| rowclass104 = mergedtoprow&lt;br /&gt;
| label104 = Website&lt;br /&gt;
| data104 = {{#if:{{{website|}}}|{{{website}}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ***Footnotes*** --&amp;gt;&lt;br /&gt;
| belowstyle = text-align:left; font-size:smaller&lt;br /&gt;
| belowrowclass = mergedtoprow&lt;br /&gt;
| below = {{{footnotes|}}}&lt;br /&gt;
}}&amp;lt;!--For deprecated parameter names--&amp;gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{{coor_type|♠}}}{{{city_logo|♠}}}{{{area_total|♠}}}{{{area_land|♠}}}{{{area_water|♠}}}{{{TotalArea_sq_mi|♠}}}{{{LandArea_sq_mi|♠}}}{{{WaterArea_sq_mi|♠}}}{{{area_urban|♠}}}{{{UrbanArea_sq_mi|♠}}}{{{area_metro|♠}}}{{{MetroArea_sq_mi|♠}}}{{{elevation|♠}}}{{{population_density|♠}}}{{{population_density_mi2|♠}}}{{{population_density_metro_mi2|♠}}}{{{population_density_urban_mi2|♠}}}|♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠||[[Category:Settlement articles requiring maintenance]]}}{{#switch:{{{coordinates_region|}}}|CA-X|US-X|IN-X=[[Category:Infobox settlement uses with imprecise region codes]]}}{{#if:{{{image_dot_map|}}}{{{dot_mapsize|}}}{{{dot_map_base_alt|}}}{{{dot_map_alt|}}}{{{dot_map_caption|}}}{{{dot_x|}}}{{{dot_y|}}}&lt;br /&gt;
|[[Category:Settlement articles with dot maps]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Template:ModNavigation&amp;diff=1434</id>
		<title>Template:ModNavigation</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Template:ModNavigation&amp;diff=1434"/>
				<updated>2025-08-21T00:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox&lt;br /&gt;
| name  = ModSupport&lt;br /&gt;
| title = [[ModSupport|ModSupport]]&lt;br /&gt;
| listclass = hlist&lt;br /&gt;
&lt;br /&gt;
| group1 = Minetweaker Supported Mods&lt;br /&gt;
| list1  =&lt;br /&gt;
* [[Test]]&lt;br /&gt;
&lt;br /&gt;
| group2 = Modtweaker Supported Mods&lt;br /&gt;
| list2  =&lt;br /&gt;
* [[Test2]]&lt;br /&gt;
&lt;br /&gt;
| group3 = Native Mod Support&lt;br /&gt;
| list3  =&lt;br /&gt;
* [[Test3]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
@Stan haaalp!&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Template:ModTweakerNavigation&amp;diff=1470</id>
		<title>Template:ModTweakerNavigation</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Template:ModTweakerNavigation&amp;diff=1470"/>
				<updated>2025-08-21T00:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 35 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight: bold;&amp;quot; | [[ModTweaker]] Supported Mods&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[ModTweaker:Applied_Energistics_2_Support|Applied Energistics 2]] | &lt;br /&gt;
[[Aura Cascade]]  | &lt;br /&gt;
[[Botania]] | &lt;br /&gt;
[[ModTweaker:Chisel_2_Support|Chisel 2]] | &lt;br /&gt;
[[Ex Nihilo]] | &lt;br /&gt;
[[ModTweaker:Extra_Utilities_Support|Extra Utilities]] | &lt;br /&gt;
[[Factorization]] | &lt;br /&gt;
[[ModTweaker:Flaxbeard_Steam_Power_Support|Flaxbeard's Steam Power Support]] | &lt;br /&gt;
[[ModTweaker:Forestry Support|Forestry]] | &lt;br /&gt;
[[Mariculture]] | &lt;br /&gt;
[[Mekanism]] | &lt;br /&gt;
[[Metallurgy 4]] | &lt;br /&gt;
[[PneumaticCraft]] | &lt;br /&gt;
[[Railcraft]] | &lt;br /&gt;
[[Thaumcraft 4]] | &lt;br /&gt;
[[ModTweaker:Thermal Expansion Support|Thermal Expansion]] | &lt;br /&gt;
[[Tinker's Construct]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Template:ModTweakerNavigation_1.10.2&amp;diff=1479</id>
		<title>Template:ModTweakerNavigation 1.10.2</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Template:ModTweakerNavigation_1.10.2&amp;diff=1479"/>
				<updated>2025-08-21T00:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 8 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight: bold;&amp;quot; | [[ModTweaker]] Supported Mods&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[ModTweaker:Actually_Additions_Support_1.10.2|Actually Additions Support]]| &lt;br /&gt;
[[ModTweaker:Blood_Magic_Support_1.10.2|Blood Magic Support]]| &lt;br /&gt;
[[ModTweaker:Botania_Support_1.10.2|Botania Support]]| &lt;br /&gt;
[[ModTweaker:Chisel_2_Support_1.10.2|Chisel 2 Support]]| &lt;br /&gt;
[[ModTweaker:Embers_Support_1.10.2|Embers Support]]| &lt;br /&gt;
[[ModTweaker:Extra_Utilities_Support_1.10.2|Extra Utilities Support]]| &lt;br /&gt;
[[ModTweaker:Forestry_Support_1.10.2|Forestry Support]]| &lt;br /&gt;
[[ModTweaker:Random_Things_Support_1.10.2|Random Things Support]]| &lt;br /&gt;
[[ModTweaker:Refined_Storage_Support_1.10.2|Refined Storage Support]]| &lt;br /&gt;
[[ModTweaker:TConstruct_Support_1.10.2|Tinker's Construct Support]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Template:ModTweakerNavigation_1.11.2&amp;diff=1487</id>
		<title>Template:ModTweakerNavigation 1.11.2</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Template:ModTweakerNavigation_1.11.2&amp;diff=1487"/>
				<updated>2025-08-21T00:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 7 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight: bold;&amp;quot; | [[ModTweaker]] Supported Mods&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[ModTweaker:Actually_Additions_Support_1.11.2|Actually Additions Support]] |  &lt;br /&gt;
[[ModTweaker:Chisel_Support_1.11.2|Chisel Support]] | &lt;br /&gt;
[[ModTweaker:Forestry_Support_1.11.2|Forestry Support]] | &lt;br /&gt;
[[ModTweaker:Refined_Storage_Support_1.11.2|Refined Storage Support]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Template:Navbox&amp;diff=1490</id>
		<title>Template:Navbox</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Template:Navbox&amp;diff=1490"/>
				<updated>2025-08-21T00:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Talk:Tutorial:Localization&amp;diff=1377</id>
		<title>Talk:Tutorial:Localization</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Talk:Tutorial:Localization&amp;diff=1377"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Following the given code returns error saying no such member. Correcting &amp;quot;localisation&amp;quot; to &amp;quot;localization&amp;quot; fixes the error.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=User:Voidi&amp;diff=1398</id>
		<title>User:Voidi</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=User:Voidi&amp;diff=1398"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The shared script directory: the scripts directory, directly inside your minecraft directory. Scripts stored in this directory (excluded in the subdirectory  'disabled') will apply to all worlds hosted by that minecraft instance - including Single-player games. They will NOT apply when you join another server, as scripts are always loaded from the server.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=User_talk:Yulife&amp;diff=1409</id>
		<title>User talk:Yulife</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=User_talk:Yulife&amp;diff=1409"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:ContentTweakerLogo.jpg&amp;diff=1411</id>
		<title>File:ContentTweakerLogo.jpg</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:ContentTweakerLogo.jpg&amp;diff=1411"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:Grammar-annotations.png&amp;diff=1413</id>
		<title>File:Grammar-annotations.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:Grammar-annotations.png&amp;diff=1413"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZenCode grammar: annotations&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:Grammar-genericparameters.png&amp;diff=1415</id>
		<title>File:Grammar-genericparameters.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:Grammar-genericparameters.png&amp;diff=1415"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZenCode grammar: generic parameters.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:ModTweaker_logo.png&amp;diff=1417</id>
		<title>File:ModTweaker logo.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:ModTweaker_logo.png&amp;diff=1417"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:Recipe_leggings_iron.png&amp;diff=1419</id>
		<title>File:Recipe leggings iron.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:Recipe_leggings_iron.png&amp;diff=1419"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Iron leggings recipe&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=File:Recipe_leggings_iron_brackets.png&amp;diff=1421</id>
		<title>File:Recipe leggings iron brackets.png</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=File:Recipe_leggings_iron_brackets.png&amp;diff=1421"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Leggings recipe in bracket notation.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Template:ContentTweakerNavigation&amp;diff=1423</id>
		<title>Template:ContentTweakerNavigation</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Template:ContentTweakerNavigation&amp;diff=1423"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight: bold;&amp;quot; | [[ContentTweaker]] Supported Mods &amp;amp; Vanilla&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[ContentTweaker:BlockItem_Support|Blocks and Items Support]] | &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Template:Infobox&amp;diff=1426</id>
		<title>Template:Infobox</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Template:Infobox&amp;diff=1426"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Template:Infobox_settlement&amp;diff=1429</id>
		<title>Template:Infobox settlement</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Template:Infobox_settlement&amp;diff=1429"/>
				<updated>2025-08-21T00:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Localization_164&amp;diff=1183</id>
		<title>Tutorial:Localization 164</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Localization_164&amp;diff=1183"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 3 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since MineTweaker 3.0.8, it is possible to change localization strings.&lt;br /&gt;
&lt;br /&gt;
Two variants of the function exist - one that sets the translation no matter the current language, and one that overrides a translation but only when the given language matches the current language:&lt;br /&gt;
&lt;br /&gt;
 // Set translation but only if language is en_US&lt;br /&gt;
 game.setLocalisation(&amp;quot;en_US&amp;quot;, &amp;quot;nei.inventory.prev&amp;quot;, &amp;quot;Past&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 //KEY, TEXT - You will want to use this one most of the time, it overrides no matter the language&lt;br /&gt;
 game.setLocalisation(&amp;quot;nei.inventory.next&amp;quot;, &amp;quot;Future&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
To find localizations, check the localization files in the assets of Minecraft or the mods you want to alter.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Loot&amp;diff=1186</id>
		<title>Tutorial:Loot</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Loot&amp;diff=1186"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Chest Loot ==&lt;br /&gt;
&lt;br /&gt;
Since 3.0.8, it is possible to change any kind of dungeon loot. Loot can be changed for dungeon chests, mineshaft chests or any other kind of vanilla or mod chest.&lt;br /&gt;
&lt;br /&gt;
This line would make diamonds very likely to appear:&lt;br /&gt;
&lt;br /&gt;
 vanilla.loot.addChestLoot(&amp;quot;dungeonChest&amp;quot;, &amp;lt;minecraft:diamond&amp;gt;.weight(100));&lt;br /&gt;
 &lt;br /&gt;
 // Spawn 1-5 sticks with a probability of 100&lt;br /&gt;
 vanilla.loot.addChestLoot(&amp;quot;dungeonChest&amp;quot;, &amp;lt;minecraft:stick&amp;gt;.weight(100), 1, 5);&lt;br /&gt;
&lt;br /&gt;
It's also possible to remove chest loot:&lt;br /&gt;
&lt;br /&gt;
 vanilla.loot.removeChestLoot(&amp;quot;dungeonChest&amp;quot;, &amp;lt;minecraft:enchanted_book&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Both items and ore dictionary entries work, as does the wildcard pattern to remove everything (&amp;lt;*&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Use /mt loot to dump the list of chests and their contents. &lt;br /&gt;
&lt;br /&gt;
== Seeds ==&lt;br /&gt;
&lt;br /&gt;
You can now also modify the seeds that are dropped when you break tall grass:&lt;br /&gt;
&lt;br /&gt;
 vanilla.seeds.addSeed(&amp;lt;minecraft:planks&amp;gt;.weight(100));&lt;br /&gt;
 vanilla.seeds.removeSeed(&amp;lt;Natura:barley.seed:*&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
This functionality existed in ModTweaker before and has now been integrated into MineTweaker.&lt;br /&gt;
&lt;br /&gt;
Use /mt seeds to see what's already registered.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Loot_164&amp;diff=1189</id>
		<title>Tutorial:Loot 164</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Loot_164&amp;diff=1189"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Chest Loot ==&lt;br /&gt;
&lt;br /&gt;
Since 3.0.8, it is possible to change any kind of dungeon loot. Loot can be changed for dungeon chests, mineshaft chests or any other kind of vanilla or mod chest.&lt;br /&gt;
&lt;br /&gt;
This line would make diamonds very likely to appear:&lt;br /&gt;
&lt;br /&gt;
 vanilla.loot.addChestLoot(&amp;quot;dungeonChest&amp;quot;, &amp;lt;item.diamond&amp;gt;.weight(100));&lt;br /&gt;
 &lt;br /&gt;
 // Spawn 1-5 sticks with a probability of 100&lt;br /&gt;
 vanilla.loot.addChestLoot(&amp;quot;dungeonChest&amp;quot;, &amp;lt;item.stick&amp;gt;.weight(100), 1, 5);&lt;br /&gt;
&lt;br /&gt;
It's also possible to remove chest loot:&lt;br /&gt;
&lt;br /&gt;
 vanilla.loot.removeChestLoot(&amp;quot;dungeonChest&amp;quot;, &amp;lt;minecraft:enchanted_book&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Both items and ore dictionary entries work, as does the wildcard pattern to remove everything (&amp;lt;*&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Use /mt loot to dump the list of chests and their contents.&lt;br /&gt;
&lt;br /&gt;
== Seeds ==&lt;br /&gt;
&lt;br /&gt;
You can now also modify the seeds that are dropped when you break tall grass:&lt;br /&gt;
&lt;br /&gt;
 vanilla.seeds.addSeed(&amp;lt;tile.wood&amp;gt;.weight(100));&lt;br /&gt;
 vanilla.seeds.removeSeed(&amp;lt;Natura:barley.seed:*&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
This functionality existed in ModTweaker before and has now been integrated into MineTweaker.&lt;br /&gt;
&lt;br /&gt;
Use /mt seeds to see what's already registered.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Ore_Dictionary&amp;diff=1196</id>
		<title>Tutorial:Ore Dictionary</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Ore_Dictionary&amp;diff=1196"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 6 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ore Dictionary =&lt;br /&gt;
&lt;br /&gt;
Now that we've gotten our feet wet (you did follow the previous tutorials, right?), let's try this recipe: (IC2 required)&lt;br /&gt;
&lt;br /&gt;
 val copper = &amp;lt;IC2:itemIngotCopper&amp;gt;;&lt;br /&gt;
 val tin = &amp;lt;IC2:itemIngotTin&amp;gt;;&lt;br /&gt;
 val iron = &amp;lt;minecraft:iron_ingot&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
 // actually IC2 uses bronze and not copper. but that doesn't matter since this is just for demonstration&lt;br /&gt;
 recipes.addShaped(&amp;lt;IC2:itemPartAlloy&amp;gt;, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);&lt;br /&gt;
&lt;br /&gt;
If you try the recipe, it's going to work... but not if you use the copper ingots from, say, Thermal Expansion or Tinkers Construct! The items are different!&lt;br /&gt;
&lt;br /&gt;
Luckily, this issue exists for quite a while already and has been solved through the use of the '''ore dictionary'''. In essence, the ore dictionary groups items by their meaning and allows mods to add their own items to the ore dictionary. For instance, the copper ore dictionary is named &amp;lt;code&amp;gt;&amp;lt;ore:ingotCopper&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These ore dictionary entries can be used in recipes easily:&lt;br /&gt;
 &lt;br /&gt;
 val copper = &amp;lt;ore:ingotCopper&amp;gt;;&lt;br /&gt;
 val tin = &amp;lt;ore:ingotTin&amp;gt;;&lt;br /&gt;
 val iron = &amp;lt;ore:ingotIron&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
 // actually IC2 uses bronze and not copper. but that doesn't matter since this is just for demonstration&lt;br /&gt;
 recipes.addShaped(&amp;lt;IC2:itemPartAlloy&amp;gt;, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);&lt;br /&gt;
&lt;br /&gt;
... and that should fix it! Try installing a few mods that add copper ore, and all of their ingots should now be compatible.&lt;br /&gt;
&lt;br /&gt;
The ore dictionary is used for more than just ores and ingots. Many ingredients have their own ore dictionary entry, allowing multiple substitutes for a specific ingredient.&lt;br /&gt;
&lt;br /&gt;
== Modifying the ore dictionary ==&lt;br /&gt;
&lt;br /&gt;
Not satisfied with the contents that mods put into the ore dictionary? Did some mod forget to add an item to the proper entry? Or do you believe a certain ingredient substitute makes recicpes too cheap? MineTweaker makes it possible to alter the contents of the ore dictionary.&lt;br /&gt;
&lt;br /&gt;
Once you retrieve an ore dictionary entry, you can modify it by adding or removing ores. Let's modify our script a bit:&lt;br /&gt;
 &lt;br /&gt;
 val copper = &amp;lt;ore:ingotCopper&amp;gt;;&lt;br /&gt;
 val tin = &amp;lt;ore:ingotTin&amp;gt;;&lt;br /&gt;
 val iron = &amp;lt;ore:ingotIron&amp;gt;;&lt;br /&gt;
 iron.add(&amp;lt;minecraft:coal&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
 // actually IC2 uses bronze and not copper. but that doesn't matter since this is just for demonstration&lt;br /&gt;
 recipes.addShaped(&amp;lt;IC2:itemPartAlloy&amp;gt;, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);&lt;br /&gt;
&lt;br /&gt;
If you reload the scripts and check the recipe, you will notice that iron can now be substituted with coal.&lt;br /&gt;
&lt;br /&gt;
Likewise, you could even remove iron from its entry:&lt;br /&gt;
&lt;br /&gt;
 val copper = &amp;lt;ore:ingotCopper&amp;gt;;&lt;br /&gt;
 val tin = &amp;lt;ore:ingotTin&amp;gt;;&lt;br /&gt;
 val iron = &amp;lt;ore:ingotIron&amp;gt;;&lt;br /&gt;
 iron.add(&amp;lt;minecraft:coal&amp;gt;);&lt;br /&gt;
 iron.remove(&amp;lt;minecraft:iron_ingot&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
 // actually IC2 uses bronze and not copper. but that doesn't matter since this is just for demonstration&lt;br /&gt;
 recipes.addShaped(&amp;lt;IC2:itemPartAlloy&amp;gt;, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);&lt;br /&gt;
&lt;br /&gt;
Now this ore dictionary modification may not be very useful, but it does illustrate how the ore dictionary can be modified easily.&lt;br /&gt;
&lt;br /&gt;
If you ever come across a mod dictionary entry of which you believe they should both actually be the same, it's now possible to mirror ore dictionary entries:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;ore:ingotIron&amp;gt;.mirror(&amp;lt;ore:ingotTin&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Now doing that will link iron to be the same as tin. Iron will then essentially be overridden by tin, and any changes made to tin will automatically reflect in iron.&lt;br /&gt;
&lt;br /&gt;
== Adding new ore dictionary entries ==&lt;br /&gt;
&lt;br /&gt;
When you use an ore dictionary entry, it doesn't matter if it already exists or not. If you use one that doesn't exist, it will simply return an empty one. Thus, all you need is to reference the ore dictionary you want to make as if it already exists, and add items to it:&lt;br /&gt;
&lt;br /&gt;
 val myEntry = &amp;lt;ore:myOwnEntry&amp;gt;;&lt;br /&gt;
 myEntry.add(&amp;lt;minecraft:coal&amp;gt;);&lt;br /&gt;
 myEntry.add(&amp;lt;minecraft:iron_ingot&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
== Merging and unifying two ore dictionary entries ==&lt;br /&gt;
&lt;br /&gt;
When playing with many mods, you'll find them reimplementing similar ores, similar items and yet register them in different ore dictionaries. Now you can unify the ore dictionary entries to a certain extent. Let's say multiple mods add salt ores to the game, and have chosen to register them under different names. Now, you ensure that the two dictionaries contain the exact same items, by executing these two commands. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;ore:dustSalt&amp;gt;.addAll(&amp;lt;ore:foodSalt&amp;gt;);&lt;br /&gt;
 &amp;lt;ore:foodSalt&amp;gt;.mirror(&amp;lt;ore:dustSalt&amp;gt;); &lt;br /&gt;
&lt;br /&gt;
Now each mod can utilise the others' items in its own recipes. This allows easier cross-mod interactions in recipes (no more hoarding of items),  and a fluid gameplay overall. &lt;br /&gt;
&lt;br /&gt;
== Using ore entries in recipe removal ==&lt;br /&gt;
&lt;br /&gt;
Ore dictionary entries can also be used to remove recipes containing ore entries, or as wildcard meaning &amp;quot;you can match any item in the ore entry&amp;quot;. Note that an ore dictionary entry with a single item is considered equivalent to the item. (this in contrast with MineTweaker 2)&lt;br /&gt;
&lt;br /&gt;
== Iterating over the values in an oredict entry ==&lt;br /&gt;
&lt;br /&gt;
Sometimes there is need to perform a certain action for every item in the ore dictionary. This is possible with a simple for loop:&lt;br /&gt;
&lt;br /&gt;
 for item in &amp;lt;ore:ingotCopper&amp;gt;.items {&lt;br /&gt;
     doSomething();&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Ore_Dictionary_164&amp;diff=1200</id>
		<title>Tutorial:Ore Dictionary 164</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Ore_Dictionary_164&amp;diff=1200"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 3 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ore Dictionary =&lt;br /&gt;
&lt;br /&gt;
Now that we've gotten our feet wet (you did follow the previous tutorials, right?), let's try this recipe: (IC2 required)&lt;br /&gt;
&lt;br /&gt;
 val copper = &amp;lt;ic2.itemIngot:0&amp;gt;;&lt;br /&gt;
 val tin = &amp;lt;ic2.itemIngot:1&amp;gt;;&lt;br /&gt;
 val iron = &amp;lt;item.ingotIron&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
 // actually IC2 uses bronze and not copper. but that doesn't matter since this is just for demonstration&lt;br /&gt;
 recipes.addShaped(&amp;lt;ic2.itemPartAlloy&amp;gt;, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);&lt;br /&gt;
&lt;br /&gt;
If you try the recipe, it's going to work... but not if you use the copper ingots from, say, Thermal Expansion or Tinkers Construct! The items are different!&lt;br /&gt;
&lt;br /&gt;
Luckily, this issue exists for quite a while already and has been solved through the use of the '''ore dictionary'''. In essence, the ore dictionary groups items by their meaning and allows mods to add their own items to the ore dictionary. For instance, the copper ore dictionary is named &amp;lt;code&amp;gt;&amp;lt;ore:ingotCopper&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These ore dictionary entries can be used in recipes easily:&lt;br /&gt;
 &lt;br /&gt;
 val copper = &amp;lt;ore:ingotCopper&amp;gt;;&lt;br /&gt;
 val tin = &amp;lt;ore:ingotTin&amp;gt;;&lt;br /&gt;
 val iron = &amp;lt;ore:ingotIron&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
 // actually IC2 uses bronze and not copper. but that doesn't matter since this is just for demonstration&lt;br /&gt;
 recipes.addShaped(&amp;lt;ic2.itemPartAlloy&amp;gt;, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);&lt;br /&gt;
&lt;br /&gt;
... and that should fix it! Try installing a few mods that add copper ore, and all of their ingots should now be compatible.&lt;br /&gt;
&lt;br /&gt;
The ore dictionary is used for more than just ores and ingots. Many ingredients have their own ore dictionary entry, allowing multiple substitutes for a specific ingredient.&lt;br /&gt;
&lt;br /&gt;
== Modifying the ore dictionary ==&lt;br /&gt;
&lt;br /&gt;
Not satisfied with the contents that mods put into the ore dictionary? Did some mod forget to add an item to the proper entry? Or do you believe a certain ingredient substitute makes recicpes too cheap? MineTweaker makes it possible to alter the contents of the ore dictionary.&lt;br /&gt;
&lt;br /&gt;
Once you retrieve an ore dictionary entry, you can modify it by adding or removing ores. Let's modify our script a bit:&lt;br /&gt;
 &lt;br /&gt;
 val copper = &amp;lt;ore:ingotCopper&amp;gt;;&lt;br /&gt;
 val tin = &amp;lt;ore:ingotTin&amp;gt;;&lt;br /&gt;
 val iron = &amp;lt;item.ingotIron&amp;gt;;&lt;br /&gt;
 tin.add(&amp;lt;item.coal&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
 // actually IC2 uses bronze and not copper. but that doesn't matter since this is just for demonstration&lt;br /&gt;
 recipes.addShaped(&amp;lt;ic2.itemPartAlloy&amp;gt;, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);&lt;br /&gt;
&lt;br /&gt;
If you reload the scripts and check the recipe, you will notice that tin can now be substituted with coal.&lt;br /&gt;
&lt;br /&gt;
Likewise, you could even remove iron from its entry:&lt;br /&gt;
&lt;br /&gt;
 val copper = &amp;lt;ore:ingotCopper&amp;gt;;&lt;br /&gt;
 val tin = &amp;lt;ore:ingotTin&amp;gt;;&lt;br /&gt;
 val iron = &amp;lt;item.ingotIron&amp;gt;;&lt;br /&gt;
 tin.add(&amp;lt;item.coal&amp;gt;);&lt;br /&gt;
 tin.remove(&amp;lt;ic2.itemIngot:1&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
 // actually IC2 uses bronze and not copper. but that doesn't matter since this is just for demonstration&lt;br /&gt;
 recipes.addShaped(&amp;lt;ic2.itemPartAlloy&amp;gt;, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);&lt;br /&gt;
&lt;br /&gt;
Now this ore dictionary modification may not be very useful, but it does illustrate how the ore dictionary can be modified easily.&lt;br /&gt;
&lt;br /&gt;
If you ever come across a mod dictionary entry of which you believe they should both actually be the same, it's now possible to mirror ore dictionary entries:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;ore:ingotCopper&amp;gt;.mirror(&amp;lt;ore:ingotTin&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Now doing that will link copper to be the same as tin. Copper will then essentially be overridden by tin, and any changes made to tin will automatically reflect in copper, and vice versa.&lt;br /&gt;
&lt;br /&gt;
== Using ore entries in recipe removal ==&lt;br /&gt;
&lt;br /&gt;
Ore dictionary entries can also be used to remove recipes containing ore entries, or as wildcard meaning &amp;quot;you can match any item in the ore entry&amp;quot;. Note that an ore dictionary entry with a single item is considered equivalent to the item. (this in contrast with MineTweaker 2)&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Tooltips&amp;diff=1205</id>
		<title>Tutorial:Tooltips</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Tooltips&amp;diff=1205"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 4 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since MineTweaker 3.0.8, you can now add tooltips to items.&lt;br /&gt;
&lt;br /&gt;
Adding tooltips can be done directly on any kind of ingredient:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;ore:plankWood&amp;gt;.addTooltip(&amp;quot;These are wood planks&amp;quot;);&lt;br /&gt;
 &amp;lt;minecraft:stick&amp;gt;.addTooltip(&amp;quot;These are sticks&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Two kinds of tooltips are available: regular tooltips and tooltips that only appear when the shift key is being pressed:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;minecraft:stick&amp;gt;.addShiftTooltip(&amp;quot;Only appears with shift&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
== Markup ==&lt;br /&gt;
&lt;br /&gt;
Tooltips can be colored and styled using the format functions:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;minecraft:stick&amp;gt;.addTooltip(format.green(&amp;quot;This is green text&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
The following formatting functions are available:&lt;br /&gt;
 &lt;br /&gt;
 format.black&lt;br /&gt;
 format.darkBlue&lt;br /&gt;
 format.darkGreen&lt;br /&gt;
 format.darkAqua&lt;br /&gt;
 format.darkRed&lt;br /&gt;
 format.darkPurple&lt;br /&gt;
 format.gold&lt;br /&gt;
 format.gray&lt;br /&gt;
 format.darkGray&lt;br /&gt;
 format.blue&lt;br /&gt;
 format.green&lt;br /&gt;
 format.aqua&lt;br /&gt;
 format.red&lt;br /&gt;
 format.lightPurple&lt;br /&gt;
 format.yellow&lt;br /&gt;
 format.white&lt;br /&gt;
 &lt;br /&gt;
 format.obfuscated&lt;br /&gt;
 format.bold&lt;br /&gt;
 format.strikethrough&lt;br /&gt;
 format.underline&lt;br /&gt;
 format.italic&lt;br /&gt;
&lt;br /&gt;
Strings (and formatted strings) can be concatenated and nested easily:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;minecraft:stick&amp;gt;.addTooltip(format.green(format.italic(&amp;quot;This is a stick&amp;quot;) + &amp;quot; with &amp;quot; + format.strikethrough(&amp;quot;text&amp;quot;)) + &amp;quot; in multiple styles&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Be careful to match the brackets properly!&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Tooltips_164&amp;diff=1208</id>
		<title>Tutorial:Tooltips 164</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Tooltips_164&amp;diff=1208"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since MineTweaker 3.0.8, you can now add tooltips to items.&lt;br /&gt;
&lt;br /&gt;
Adding tooltips can be done directly on any kind of ingredient:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;ore:plankWood&amp;gt;.addTooltip(&amp;quot;These are wood planks&amp;quot;);&lt;br /&gt;
 &amp;lt;item.stick&amp;gt;.addTooltip(&amp;quot;These are sticks&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Two kinds of tooltips are available: regular tooltips and tooltips that only appear when the shift key is being pressed:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;item.stick&amp;gt;.addShiftTooltip(&amp;quot;Only appears with shift&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
== Markup ==&lt;br /&gt;
&lt;br /&gt;
Tooltips can be colored and styled using the format functions:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;minecraft:stick&amp;gt;.addTooltip(format.green(&amp;quot;This is green text&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
The following formatting functions are available:&lt;br /&gt;
 &lt;br /&gt;
 format.black&lt;br /&gt;
 format.darkBlue&lt;br /&gt;
 format.darkGreen&lt;br /&gt;
 format.darkAqua&lt;br /&gt;
 format.darkRed&lt;br /&gt;
 format.darkPurple&lt;br /&gt;
 format.gold&lt;br /&gt;
 format.gray&lt;br /&gt;
 format.darkGray&lt;br /&gt;
 format.blue&lt;br /&gt;
 format.green&lt;br /&gt;
 format.aqua&lt;br /&gt;
 format.red&lt;br /&gt;
 format.lightPurple&lt;br /&gt;
 format.yellow&lt;br /&gt;
 format.white&lt;br /&gt;
 &lt;br /&gt;
 format.obfuscated&lt;br /&gt;
 format.bold&lt;br /&gt;
 format.strikethrough&lt;br /&gt;
 format.underline&lt;br /&gt;
 format.italic&lt;br /&gt;
&lt;br /&gt;
Strings (and formatted strings) can be concatenated and nested easily:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;item.stick&amp;gt;.addTooltip(format.green(format.italic(&amp;quot;This is a stick&amp;quot;) + &amp;quot; with &amp;quot; + format.strikethrough(&amp;quot;text&amp;quot;)) + &amp;quot; in multiple styles&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Be careful to match the brackets properly!&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:item_Renaming_164&amp;diff=1211</id>
		<title>Tutorial:item Renaming 164</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:item_Renaming_164&amp;diff=1211"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 2 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Not happy with an item name? Want to correct a &amp;lt;strike&amp;gt;type&amp;lt;/strike&amp;gt; typo made by the mod author? Did some translation go missing?&lt;br /&gt;
&lt;br /&gt;
Although a resource pack can fix that, it may be less cumbersome to use MineTweaker instead:&lt;br /&gt;
&lt;br /&gt;
 print(&amp;lt;tile.chest&amp;gt;.displayName); // prints the original name&lt;br /&gt;
 &amp;lt;tile.chest&amp;gt;.displayName = &amp;quot;Storage Box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
That's all it takes!&lt;br /&gt;
&lt;br /&gt;
Note that there exist some mod items with broken internal names. These cannot have their names modified with this method. Neither can they be modified through translation files, and as such these mod items should be considered bugged. If NEI is installed, you can still use the NEI.overrideName function, which will change the name in most places.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Vanilla&amp;diff=1213</id>
		<title>Vanilla</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Vanilla&amp;diff=1213"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[ModTweaker:Vanilla_Support]]&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=ZenCode_specification&amp;diff=1225</id>
		<title>ZenCode specification</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=ZenCode_specification&amp;diff=1225"/>
				<updated>2025-08-21T00:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 11 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZenCode is a multi-purpose scripting and programming language intended for a far wider use than just MineTweaker. In future, the scripting system will be hosted on a separate website, but for now, its complete specification will be available here.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
The purpose of ZenCode is to make it possible for non-programmers (or programmers with little experience) to use a simple scripting language while allowing more experienced programmers to take advantage of all the speed and features offered by modern object-oriented languages. Currently, ZenCode compiles at runtime to java bytecode, but in future, other target platforms should be supported.&lt;br /&gt;
&lt;br /&gt;
The idea of ZenCode is that it can be used by a wide range of people. While experienced programmers can easily understand every detail that goes on under the hood, less experienced programmers and non-programmers could simply follow the tutorials and magically &amp;quot;have everything work&amp;quot; without having to bother about the details. For instance, ZenCode can be written with or without specifying data types. When used without types, the scripting engine can infer the types in most cases and use runtime-typed values in cases where it couldn't. It wouldn't be optimal in terms of speed, but it would work without having to teach the non-programmer all the details about everything in the language.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, more advanced programmers can specify types for those places where it can't be inferred, know everything that goes on under the hood, and write code that's both fast and clean. They would be able to write their advanced logic and make it available in the form of easily used APIs for less experienced users. This is particularly interesting in the modding world, where there is a mix of users with different skill levels. Making a Minecraft mod requires knowledge of both Java and Forge, which can be hard to learn for a non-programmer. However, many people would like to make simple modifications to the game - modifications that are difficult to provide with a graphical user interface. A scripting language would be needed, but shouldn't need a user to know what classes and interfaces, be aware of the difference between a float and double or about the language's casting rules.&lt;br /&gt;
&lt;br /&gt;
= Scripts =&lt;br /&gt;
&lt;br /&gt;
ZenCode projects are organized as a set of scripts (ending with the .zs extension). Each script may contain:&lt;br /&gt;
&lt;br /&gt;
- Code statements, such as function and method calls, variable assignments and control flow statements&lt;br /&gt;
- Function definitions&lt;br /&gt;
- Class, interface, struct and enum definitions&lt;br /&gt;
- Include statements for other scripts&lt;br /&gt;
&lt;br /&gt;
Additionally, at the beginning of a script, a package declaration can be provided. Adding a package declaration makes any public and exported functions available to other scripts. If there is no package declaration, every declaration will only be visible to the script itself.&lt;br /&gt;
&lt;br /&gt;
Example script 1: (prints the text &amp;quot;Hello world&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 var text = &amp;quot;Hello world&amp;quot;;&lt;br /&gt;
 print(text);&lt;br /&gt;
&lt;br /&gt;
Example script 2: (makes a function add publicly available in the package myserver.util)&lt;br /&gt;
&lt;br /&gt;
 package myserver.util;&lt;br /&gt;
 &lt;br /&gt;
 export function add(x, y)&lt;br /&gt;
 {&lt;br /&gt;
   return x + y;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Example script 3: (includes a second script)&lt;br /&gt;
 &lt;br /&gt;
 package myserver.util;&lt;br /&gt;
 &lt;br /&gt;
 include &amp;quot;otherscript.zsi&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
[[File:grammar_script.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:grammar_importedscript.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:grammar_scriptelement.png]]&lt;br /&gt;
&lt;br /&gt;
= Types =&lt;br /&gt;
&lt;br /&gt;
ZenCode knows the following types:&lt;br /&gt;
&lt;br /&gt;
* All signed types as available in java: byte, short, int, long&lt;br /&gt;
* Unsigned variants of these type: ubyte, ushort, uint, ulong&lt;br /&gt;
* Two floating-point types: float and double&lt;br /&gt;
* The string type: string&lt;br /&gt;
* Arrays; &amp;lt;type&amp;gt;[]&lt;br /&gt;
* Associative arrays (dictionaries, maps): &amp;lt;valuetype&amp;gt;[&amp;lt;keytype&amp;gt;]&lt;br /&gt;
* Classes: can contain fields, methods and operators, can extend a superclass, and implement any number of interfaces&lt;br /&gt;
* Interfaces: can contain interface methods and static methods, implement other interfaces and provide default implementations for some of its methods&lt;br /&gt;
* Structs: value types grouping a number of fields - can contain methods but can't extend classes or implement interfaces&lt;br /&gt;
* The special type void, indicating &amp;quot;no value&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Classes and interfaces can have generic type parameters.&lt;br /&gt;
&lt;br /&gt;
== Primitive types ==&lt;br /&gt;
&lt;br /&gt;
The following primitive types are available:&lt;br /&gt;
&lt;br /&gt;
* byte: signed integer value, can contain values from -128 to 127&lt;br /&gt;
* short: signed integer value, can contain values from -32768 to 32767&lt;br /&gt;
* int: signed integer value, can contain values from –2147483648 to 2147483647&lt;br /&gt;
* long: signed integer value, can contain values from -9223372036854775808 to 9223372036854775807&lt;br /&gt;
* ubyte: unsigned integer value, can contain values from 0 to 255&lt;br /&gt;
* ushort: unsigned integer value, can contain values from 0 to 65535&lt;br /&gt;
* uint: unsigned integer value, can contain values from 0 to 4294967295&lt;br /&gt;
* ulong: unsigned integer value, can contain values from 0 to 18446744073709551615&lt;br /&gt;
* float: contains a single-precision floating-point value&lt;br /&gt;
* double: contains a double-precision floating-point value&lt;br /&gt;
* char: contains a single unicode character&lt;br /&gt;
* string: contains a string value (supports any unicode character)&lt;br /&gt;
* void: means the same as &amp;quot;no value&amp;quot;, cannot contain any value but used to indicate that a method doesn't return a value&lt;br /&gt;
&lt;br /&gt;
== Arrays ==&lt;br /&gt;
&lt;br /&gt;
Arrays (lists) contain a series of values. Arrays can be constructed with the array expression (e.g. [value1, value2]) and can be nested.&lt;br /&gt;
&lt;br /&gt;
A single-dimensional array type can be defined by adding [] to its base type:&lt;br /&gt;
&lt;br /&gt;
- ubyte[] defines an array of unsigned bytes (essentially a bytestream)&lt;br /&gt;
- int[] defines an array of signed ints&lt;br /&gt;
&lt;br /&gt;
Two kinds of multidimensional arrays can be defined:&lt;br /&gt;
&lt;br /&gt;
- int[][] defines a two-dimensional array of integers. Each element in the outer array can be of different length, for example [[1, 2], [3, 4, 5]] is a correct value. Each element of the outer array is a reference to a smaller array.&lt;br /&gt;
- int[,] defines a rectangular array. For example, [[1, 2, 3], [4, 5, 6]] would be a valid rectangular array but [[1, 2], [3, 4, 5]] isn't. Internally, there is only one array.&lt;br /&gt;
&lt;br /&gt;
Arrays can be modified after creation:&lt;br /&gt;
&lt;br /&gt;
 var array = [];&lt;br /&gt;
 array += [&amp;quot;Hello&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
To make an array unmodifyable, use the .fixed accessor:&lt;br /&gt;
&lt;br /&gt;
 var array = [1, 2].fixed;&lt;br /&gt;
&lt;br /&gt;
== Associative Arrays ==&lt;br /&gt;
&lt;br /&gt;
Being a very common structure, the ability to define dictionaries mapping values of one type to values of another type is a first-class language feature in ZenCode. They are called associative arrays and can be created with the {} notation.&lt;br /&gt;
&lt;br /&gt;
== The any type ==&lt;br /&gt;
&lt;br /&gt;
A special type exists called &amp;quot;any&amp;quot;. This is a dynamically typed value. Any value can be cast to the any type. When a value has been cast to any, all fields and methods will be kept - the value will keep the exact same behavior as the original value.&lt;br /&gt;
&lt;br /&gt;
Variables of the any type are not statically checked: accessing methods or fields that do not actually exist will result in a runtime exception.&lt;br /&gt;
&lt;br /&gt;
The any values can also be cast to its original type, as well as any of its superclasses or implemented interfaces, without needing an explicit cast. Trying to pass an invalid value will throw an exception as soon as it is converted.&lt;br /&gt;
&lt;br /&gt;
== Type handling ==&lt;br /&gt;
&lt;br /&gt;
Specifying the type of a variable, field or function parameter is always optional. The type will be inferred from its initialization value whenever possible and will default to the any type when unspecified.&lt;br /&gt;
&lt;br /&gt;
Types and generic type arguments will be inferred from their context whenever possible. In a return statement, the type will be inferred from the method in which it resides and in a function call the method parameters are inferred from tje function being called (if there are no overloaded methods).&lt;br /&gt;
&lt;br /&gt;
For arrays and associative arrays for which no type can be inferred, any[] and any[any] will be used by default. This means that creating an array of a specific type requires the following construct:&lt;br /&gt;
&lt;br /&gt;
 var myArray = [&amp;quot;Hello&amp;quot;, &amp;quot;world&amp;quot;] as string[];&lt;br /&gt;
&lt;br /&gt;
But if the type can be inferred, this is not needed:&lt;br /&gt;
&lt;br /&gt;
 doStrings([&amp;quot;Hello&amp;quot;, &amp;quot;world&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
Arrays can be passed to functions if the array base type is different. When such conversion is made, the converted array will always reflect the values in the original array: if the original is modified, the converted array will return the new values. If both base types can be converted to each other, the resulting array will be read-write. If not, the array will be read-only. Conversion between the array values is performed only when needed. This means that conversion errors will come up only when the values are actually being accessed:&lt;br /&gt;
&lt;br /&gt;
 function printInts(values as int[])&lt;br /&gt;
 {&lt;br /&gt;
   for element in values {&lt;br /&gt;
     println(element);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 var myArray = [1, &amp;quot;Hello&amp;quot;];&lt;br /&gt;
 printInts(myArray);&lt;br /&gt;
&lt;br /&gt;
The code above will print 1 and then crash, complaining that &amp;quot;Hello&amp;quot; is not an int value.&lt;br /&gt;
&lt;br /&gt;
Likewise, consider the following example:&lt;br /&gt;
&lt;br /&gt;
 functions addValues(values as any[])&lt;br /&gt;
 {&lt;br /&gt;
   values += [1];&lt;br /&gt;
   values += [&amp;quot;Hi&amp;quot;];&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 var myArray = [] as int[];&lt;br /&gt;
 addValues(myArray);&lt;br /&gt;
&lt;br /&gt;
This snippet will successfully add 1 to the array but crash when &amp;quot;Hi&amp;quot; is added to it, complaining that &amp;quot;Hi&amp;quot; cannot be converted to an int.&lt;br /&gt;
&lt;br /&gt;
This kind of behavior makes it possible to write a script quickly without ever having to bother about types whereas more complex applications, APIs and performance-critical code can use a static type system.&lt;br /&gt;
&lt;br /&gt;
= Statements =&lt;br /&gt;
&lt;br /&gt;
The traditional statements can be used in scripts and function bodies:&lt;br /&gt;
&lt;br /&gt;
 var a = 1; // declares a variable a and intitalizes it to 1. The variable type is int.&lt;br /&gt;
 val b = 2; // same as above, except b cannot be modified after initialization&lt;br /&gt;
 a = 10;&lt;br /&gt;
 if a &amp;gt; 2 { // conditional execution. No brackets needed.&lt;br /&gt;
   print(&amp;quot;a is greater that 2&amp;quot;);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Advanced_Recipes&amp;diff=1121</id>
		<title>Tutorial:Advanced Recipes</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Advanced_Recipes&amp;diff=1121"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 13 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;So far we have learned about how to add or remove simple recipes. But what if the inputs and outputs also involve damage values or NBT tags?&lt;br /&gt;
&lt;br /&gt;
== NBT Tag in output ==&lt;br /&gt;
&lt;br /&gt;
It is possible to define both damage or an NBT tag as output. Let's take a pickaxe as our toy for this tutorial:&lt;br /&gt;
&lt;br /&gt;
 val stick = &amp;lt;minecraft:stick&amp;gt;;&lt;br /&gt;
 val pick = &amp;lt;minecraft:stone_pickaxe&amp;gt;;&lt;br /&gt;
 val damagedPick = pick.withDamage(10);&lt;br /&gt;
 val stickedPick = pick.withTag({display: {Name: &amp;quot;Sticked pick&amp;quot;, Lore: [&amp;quot;This pick&amp;quot;, &amp;quot;Has been sticked&amp;quot;]}});&lt;br /&gt;
 &lt;br /&gt;
 recipes.addShaped(damagedPick, [[pick, stick]&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;);&lt;br /&gt;
 recipes.addShaped(stickedPick, [[pick, stick], [stick, stick]]);&lt;br /&gt;
&lt;br /&gt;
Crafting the pick with 1 or 3 sticks as in the recipe will give you an item with the appropriate damage and name/lore on it, respectively.&lt;br /&gt;
&lt;br /&gt;
== Input conditions ==&lt;br /&gt;
&lt;br /&gt;
You can also require the input to contain certain NBT tags. Say, you make a recipe that requires our sticked pick. Let's modify our file:&lt;br /&gt;
&lt;br /&gt;
 val stick = &amp;lt;minecraft:stick&amp;gt;;&lt;br /&gt;
 val pick = &amp;lt;minecraft:stone_pickaxe&amp;gt;;&lt;br /&gt;
 val damagedPick = pick.withDamage(10);&lt;br /&gt;
 val stickedPick = pick.withTag({display: {Name: &amp;quot;Sticked pick&amp;quot;, Lore: [&amp;quot;This pick&amp;quot;, &amp;quot;Has been sticked&amp;quot;]}});&lt;br /&gt;
 &lt;br /&gt;
 recipes.addShaped(damagedPick, [[pick, stick]&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;);&lt;br /&gt;
 recipes.addShaped(stickedPick, [[pick, stick], [stick, stick]]);&lt;br /&gt;
 &lt;br /&gt;
 val stonedPick = pick.withTag({display: {Name: &amp;quot;Stoned pick&amp;quot;, Lore: [&amp;quot;This pick&amp;quot;, &amp;quot;Has been experimenting too much&amp;quot;]}});&lt;br /&gt;
 val onlyStickedPick = pick.onlyWithTag({display: {Name: &amp;quot;Sticked pick&amp;quot;}});&lt;br /&gt;
 val cobble = &amp;lt;minecraft:cobblestone&amp;gt;;&lt;br /&gt;
 recipes.addShaped(stonedPick, [[onlyStickedPick, cobble], [cobble, cobble]]);&lt;br /&gt;
&lt;br /&gt;
What about the lore part in our sticked pick? Since your condition only contains the name, the lore part is ignored - when setting a condition on the data tag, MineTweaker only cares about the contents that you specified and ignores everything else.&lt;br /&gt;
&lt;br /&gt;
'''''Note the difference between withTag and onlyWithTag. withTag is for an output and is the exact tag that will be output. onlyWithTag is for input and sets a condition. Applying withTag on an input has no effect on the recipe.'''''&lt;br /&gt;
&lt;br /&gt;
Other conditions exist too:&lt;br /&gt;
&lt;br /&gt;
 myItem.onlyDamaged(); // only accepts damaged items&lt;br /&gt;
 myItem.onlyDamageAtLeast(15); // only accepts items with a damage of at least 15&lt;br /&gt;
 myItem.onlyDamageAtMost(100); // only accepts items with a damage of at most 100&lt;br /&gt;
 myItem.onlyDamageBetween(15, 100); // only accepts items with a damage between 15 and 100&lt;br /&gt;
&lt;br /&gt;
Multiple conditions can be added to a single ingredient, too:&lt;br /&gt;
&lt;br /&gt;
 myItem.onlyDamaged().onlyWithTag({display: {Name: &amp;quot;Sticked pick&amp;quot;}});&lt;br /&gt;
&lt;br /&gt;
== Output reuse and transformations ==&lt;br /&gt;
&lt;br /&gt;
Since MineTweaker 3.0.2, it is now possible to reuse items, return empty buckets to the crafting grid (or whatever item you want) or damage items upon crafting.&lt;br /&gt;
&lt;br /&gt;
We could for instance make a recipe to get more sticks out of wood by using an axe:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;minecraft:stick&amp;gt; * 3, [&amp;lt;minecraft:stone_axe&amp;gt;, &amp;lt;ore:woodPlanks&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
Nice. But the stone axe gets consumed, and that is sort of annoying. We can fix this with the reuse modifier:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;minecraft:stick&amp;gt; * 3, [&amp;lt;minecraft:stone_axe&amp;gt;.reuse(), &amp;lt;ore:plankWood&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
Great! We can reuse the axe. Now what if we also wanted the axe to be damaged when you use it?&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;minecraft:stick&amp;gt; * 3, [&amp;lt;minecraft:stone_axe&amp;gt;.transformDamage(), &amp;lt;ore:plankWood&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
We can also deal more than 1 damage upon crafting:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;minecraft:stick&amp;gt; * 3, [&amp;lt;minecraft:stone_axe&amp;gt;.transformDamage(4), &amp;lt;ore:plankWood&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
Imagine we'd want to make a recipe to turn dirt into grass by combining dirt, a water bucket and wheat. We could make this recipe:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;minecraft:grass&amp;gt;, [&amp;lt;minecraft:dirt&amp;gt;, &amp;lt;minecraft:water_bucket&amp;gt;, &amp;lt;minecraft:wheat&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
However, crafting this will consume the bucket. We can tell MineTweaker to return the empty bucket afterwards:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShaped(&amp;lt;minecraft:grass&amp;gt;, [[&lt;br /&gt;
 	&amp;lt;minecraft:dirt&amp;gt;,&lt;br /&gt;
 	&amp;lt;minecraft:water_bucket&amp;gt;.transformReplace(&amp;lt;minecraft:bucket&amp;gt;),&lt;br /&gt;
 	&amp;lt;minecraft:wheat&amp;gt;&lt;br /&gt;
 ]]);&lt;br /&gt;
&lt;br /&gt;
Now, crafting a grass block will return the empty crafting bucket in the crafting grid.&lt;br /&gt;
&lt;br /&gt;
Sometimes mods define their own behavior when you use their items while crafting. Likewise, Minecraft will return you an empty bucket when you use it in a crafting recipe. If you don't want that, you can tell the item to not return anything at all:&lt;br /&gt;
 &lt;br /&gt;
 recipes.addShaped(&amp;lt;minecraft:grass&amp;gt;, [[&lt;br /&gt;
 	&amp;lt;minecraft:dirt&amp;gt;,&lt;br /&gt;
 	&amp;lt;minecraft:water_bucket&amp;gt;.noReturn(),&lt;br /&gt;
 	&amp;lt;minecraft:wheat&amp;gt;&lt;br /&gt;
 ]]);&lt;br /&gt;
&lt;br /&gt;
If you want to give something back, but not in the crafting inventory, you can also use giveBack. GiveBack can be used without arguments, in which case it will return the original item, or it can be used with an item, in which case that item will be given back into the player inventory:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShaped(&amp;lt;minecraft:grass&amp;gt;, [[&lt;br /&gt;
 	&amp;lt;minecraft:dirt&amp;gt;,&lt;br /&gt;
 	&amp;lt;minecraft:water_bucket&amp;gt;.giveBack(&amp;lt;minecraft:iron_ore&amp;gt; * 3),&lt;br /&gt;
 	&amp;lt;minecraft:wheat&amp;gt;&lt;br /&gt;
 ]]);&lt;br /&gt;
&lt;br /&gt;
GiveBack will usually also have the side-effect of suppressing mod item return behavior. It may thus be a handy alternative to the transformReplace modifier in those cases.&lt;br /&gt;
&lt;br /&gt;
== Function recipes ==&lt;br /&gt;
&lt;br /&gt;
When adding a recipe, you may also supply an additional argument, which is a custom function. This function can programmatically determine the output of your recipe.&lt;br /&gt;
&lt;br /&gt;
To demonstrate how this works, let's make a recipe that repairs a stone pickaxe when you craft it with cobblestone. The output of our recipe depends on the pickaxe that is provided (its damage), thus a regular recipe won't work in this case.&lt;br /&gt;
&lt;br /&gt;
Let's start by adding the function to it:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;minecraft:stone_pickaxe&amp;gt;, [&amp;lt;minecraft:stone_pickaxe&amp;gt;, &amp;lt;minecraft:cobblestone&amp;gt;], function(output, inputs, crafting) {&lt;br /&gt;
   // to be implemented&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now we need to look at the value of the pickaxe. In order to retrieve the actual values of the inputs, we need to mark them with a name, and MineTweaker will store it in the inputs list:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;minecraft:stone_pickaxe&amp;gt;, [&amp;lt;minecraft:stone_pickaxe&amp;gt;.marked(&amp;quot;pick&amp;quot;), &amp;lt;minecraft:cobblestone&amp;gt;], function(output, inputs, crafting) {&lt;br /&gt;
   // to be implemented. inputs.pick now contains the pickaxe used as input&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Then it's just a matter of writing the code to fix the pickaxe:&lt;br /&gt;
 &lt;br /&gt;
 recipes.addShapeless(&amp;lt;minecraft:stone_pickaxe&amp;gt;, [&amp;lt;minecraft:stone_pickaxe&amp;gt;.anyDamage().marked(&amp;quot;pick&amp;quot;), &amp;lt;minecraft:cobblestone&amp;gt;], function(output, inputs, crafting) {&lt;br /&gt;
   // the max is there to make sure that the damage doesn't go negative&lt;br /&gt;
   // fixes 25 damage per cobblestone&lt;br /&gt;
   return inputs.pick.withDamage(max(0, inputs.pick.damage - 25));&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
More will come to function recipes later!&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Advanced_Recipes_164&amp;diff=1126</id>
		<title>Tutorial:Advanced Recipes 164</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Advanced_Recipes_164&amp;diff=1126"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 4 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;So far we have learned about how to add or remove simple recipes. But what if the inputs and outputs also involve damage values or NBT tags?&lt;br /&gt;
&lt;br /&gt;
== NBT Tag in output ==&lt;br /&gt;
&lt;br /&gt;
It is possible to define both damage or an NBT tag as output. Let's take a pickaxe as our toy for this tutorial:&lt;br /&gt;
&lt;br /&gt;
 val stick = &amp;lt;item.stick&amp;gt;;&lt;br /&gt;
 val pick = &amp;lt;item.pickaxeStone&amp;gt;;&lt;br /&gt;
 val damagedPick = pick.withDamage(10);&lt;br /&gt;
 val stickedPick = pick.withTag({display: {Name: &amp;quot;Sticked pick&amp;quot;, Lore: [&amp;quot;This pick&amp;quot;, &amp;quot;Has been sticked&amp;quot;]}});&lt;br /&gt;
 &lt;br /&gt;
 recipes.addShaped(damagedPick, [[pick, stick]]);&lt;br /&gt;
 recipes.addShaped(stickedPick, [[pick, stick], [stick, stick]]);&lt;br /&gt;
&lt;br /&gt;
Crafting the pick with 1 or 3 sticks as in the recipe will give you an item with the appropriate damage and name/lore on it, respectively.&lt;br /&gt;
&lt;br /&gt;
== Input conditions ==&lt;br /&gt;
&lt;br /&gt;
You can also require the input to contain certain NBT tags. Say, you make a recipe that requires our sticked pick. Let's modify our file:&lt;br /&gt;
&lt;br /&gt;
 val stick = &amp;lt;item.stick&amp;gt;;&lt;br /&gt;
 val pick = &amp;lt;item.pickaxeStone&amp;gt;;&lt;br /&gt;
 val damagedPick = pick.withDamage(10);&lt;br /&gt;
 val stickedPick = pick.withTag({display: {Name: &amp;quot;Sticked pick&amp;quot;, Lore: [&amp;quot;This pick&amp;quot;, &amp;quot;Has been sticked&amp;quot;]}});&lt;br /&gt;
 &lt;br /&gt;
 recipes.addShaped(damagedPick, [[pick, stick]]);&lt;br /&gt;
 recipes.addShaped(stickedPick, [[pick, stick], [stick, stick]]);&lt;br /&gt;
 &lt;br /&gt;
 val stonedPick = pick.withTag({display: {Name: &amp;quot;Stoned pick&amp;quot;, Lore: [&amp;quot;This pick&amp;quot;, &amp;quot;Has been experimenting too much&amp;quot;]}});&lt;br /&gt;
 val onlyStickedPick = pick.onlyWithTag({display: {Name: &amp;quot;Sticked pick&amp;quot;}});&lt;br /&gt;
 val cobble = &amp;lt;tile.stonebrick&amp;gt;;&lt;br /&gt;
 recipes.addShaped(stonedPick, [[onlyStickedPick, cobble], [cobble, cobble]]);&lt;br /&gt;
&lt;br /&gt;
What about the lore part in our sticked pick? Since your condition only contains the name, the lore part is ignored - when setting a condition on the data tag, MineTweaker only cares about the contents that you specified and ignores everything else.&lt;br /&gt;
&lt;br /&gt;
'''''Note the difference between withTag and onlyWithTag. withTag is for an output and is the exact tag that will be output. onlyWithTag is for input and sets a condition. Applying withTag on an input has no effect on the recipe.'''''&lt;br /&gt;
&lt;br /&gt;
Other conditions exist too:&lt;br /&gt;
&lt;br /&gt;
 myItem.onlyDamaged(); // only accepts damaged items&lt;br /&gt;
 myItem.onlyDamageAtLeast(15); // only accepts items with a damage of at least 15&lt;br /&gt;
 myItem.onlyDamageAtMost(100); // only accepts items with a damage of at most 100&lt;br /&gt;
 myItem.onlyDamageBetween(15, 100); // only accepts items with a damage between 15 and 100&lt;br /&gt;
&lt;br /&gt;
Multiple conditions can be added to a single ingredient, too:&lt;br /&gt;
&lt;br /&gt;
 myItem.onlyDamaged().onlyWithTag({display: {Name: &amp;quot;Sticked pick&amp;quot;}});&lt;br /&gt;
&lt;br /&gt;
== Output reuse and transformations ==&lt;br /&gt;
&lt;br /&gt;
Since MineTweaker 3.0.2, it is now possible to reuse items, return empty buckets to the crafting grid (or whatever item you want) or damage items upon crafting.&lt;br /&gt;
&lt;br /&gt;
We could for instance make a recipe to get more sticks out of wood by using an axe:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;item.stick&amp;gt; * 3, [&amp;lt;item.hatchetStone&amp;gt;, &amp;lt;ore:woodPlanks&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
Nice. But the stone axe gets consumed, and that is sort of annoying. We can fix this with the reuse modifier:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;item.stick&amp;gt; * 3, [&amp;lt;item.hatchetStone&amp;gt;.reuse(), &amp;lt;ore:plankWood&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
Great! We can reuse the axe. Now what if we also wanted the axe to be damaged when you use it?&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;item.stick&amp;gt; * 3, [&amp;lt;item.hatchetStone&amp;gt;.transformDamage(), &amp;lt;ore:plankWood&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
We can also deal more than 1 damage upon crafting:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;item.stick&amp;gt; * 3, [&amp;lt;item.hatchetStone&amp;gt;.transformDamage(4), &amp;lt;ore:plankWood&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
Imagine we'd want to make a recipe to turn dirt into grass by combining dirt, a water bucket and wheat. We could make this recipe:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapeless(&amp;lt;tile.grass&amp;gt;, [&amp;lt;tile.dirt&amp;gt;, &amp;lt;item.bucketWater&amp;gt;, &amp;lt;item.wheat&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
However, crafting this will consume the bucket. We can tell MineTweaker to return the empty bucket afterwards:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShaped(&amp;lt;tile.grass&amp;gt;, [[&lt;br /&gt;
 	&amp;lt;tile.dirt&amp;gt;,&lt;br /&gt;
 	&amp;lt;item.bucketWater&amp;gt;.transformReplace(&amp;lt;item.bucket&amp;gt;),&lt;br /&gt;
 	&amp;lt;item.wheat&amp;gt;&lt;br /&gt;
 ]]);&lt;br /&gt;
&lt;br /&gt;
Now, crafting a grass block will return the empty crafting bucket in the crafting grid.&lt;br /&gt;
&lt;br /&gt;
Sometimes mods define their own behavior when you use their items while crafting. Likewise, Minecraft will return you an empty bucket when you use it in a crafting recipe. If you don't want that, you can tell the item to not return anything at all:&lt;br /&gt;
 &lt;br /&gt;
 recipes.addShaped(&amp;lt;minecraft:grass&amp;gt;, [[&lt;br /&gt;
 	&amp;lt;tile.dirt&amp;gt;,&lt;br /&gt;
 	&amp;lt;item.bucketWater&amp;gt;.noReturn(),&lt;br /&gt;
 	&amp;lt;item.wheat&amp;gt;&lt;br /&gt;
 ]]);&lt;br /&gt;
&lt;br /&gt;
If you want to give something back, but not in the crafting inventory, you can also use giveBack. GiveBack can be used without arguments, in which case it will return the original item, or it can be used with an item, in which case that item will be given back into the player inventory:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShaped(&amp;lt;minecraft:grass&amp;gt;, [[&lt;br /&gt;
 	&amp;lt;tile.dirt&amp;gt;,&lt;br /&gt;
 	&amp;lt;item.bucketWater&amp;gt;.giveBack(&amp;lt;item.ingotIron&amp;gt; * 3),&lt;br /&gt;
 	&amp;lt;item.wheat&amp;gt;&lt;br /&gt;
 ]]);&lt;br /&gt;
&lt;br /&gt;
GiveBack will usually also have the side-effect of suppressing mod item return behavior. It may thus be a handy alternative to the transformReplace modifier in those cases.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Basic_Recipes&amp;diff=1139</id>
		<title>Tutorial:Basic Recipes</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Basic_Recipes&amp;diff=1139"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 12 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Using MineTweaker RecipeMaker ==&lt;br /&gt;
&lt;br /&gt;
If you want to create or remove recipes without having to code, you can also check out this nice mod by DoubleDoorDevelopment: http://minecraft.curseforge.com/mc-mods/226294-minetweaker-recipemaker&lt;br /&gt;
&lt;br /&gt;
== Using recipe notation ==&lt;br /&gt;
&lt;br /&gt;
The most basic modifications you can perform in MineTweaker are recipe addition and removal. There is no visual editor, only a scripting language, so you have to understand how to write your recipes as text.&lt;br /&gt;
&lt;br /&gt;
In order to define its functionality, you have to call functions. An example function is print, which you have seen before, and which takes a single argument:&lt;br /&gt;
&lt;br /&gt;
 print(&amp;quot;My text&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
This was easy. A more useful function, for instance, is the function to add a shaped recipe:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShaped('''recipe output''', '''recipe contents''');&lt;br /&gt;
&lt;br /&gt;
This line essentially means &amp;quot;call the addShaped function on the recipes object&amp;quot;. The recipes object is a special object that is available from anywhere in your code and contains all the functions related to adding and removing crafting recipes. Note that only crafting recipes are managed by the recipes object - furnace recipes, for instance, are managed by the furnace object (which you will learn about in a later tutorial) and mods machines have yet different methods to manage recipes.&lt;br /&gt;
&lt;br /&gt;
Now, how do we call the addShaped function with proper arguments? We need to tell it what the output should be and what the recipe should be like.&lt;br /&gt;
&lt;br /&gt;
Let's take, for instance, the recipe for iron leggings, which is this one:&lt;br /&gt;
&lt;br /&gt;
[[File:recipe_leggings_iron.png]]&lt;br /&gt;
&lt;br /&gt;
The MineTweaker notation for this recipe is the following one:&lt;br /&gt;
 &lt;br /&gt;
 [[&amp;lt;minecraft:iron_ingot&amp;gt;, &amp;lt;minecraft:iron_ingot&amp;gt;, &amp;lt;minecraft:iron_ingot&amp;gt;],&lt;br /&gt;
  [&amp;lt;minecraft:iron_ingot&amp;gt;, null, &amp;lt;minecraft:iron_ingot&amp;gt;],&lt;br /&gt;
  [&amp;lt;minecraft:iron_ingot&amp;gt;, null, &amp;lt;minecraft:iron_ingot&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
This may look cryptic if you haven't been programming before, but the principle is quite simple. You can visualize the recipe as follows:&lt;br /&gt;
&lt;br /&gt;
[[File:recipe_leggings_iron_brackets.png]]&lt;br /&gt;
&lt;br /&gt;
Each item in minetweaker has its own name - surrounded by the angled brackets to tell it &amp;quot;retrieve me the item with this name&amp;quot;. This angled bracket notation will be used in many places - from retrieving items to ore dictionary entries to liquid names. The item name for the iron ingot is &amp;lt;minecraft:iron_ingot&amp;gt; and iron leggings is &amp;lt;minecraft:iron_leggings&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
What about the empty spots? You cannot just skip the entries - you have to put something to indicate &amp;quot;this is empty&amp;quot;. MineTweaker has a special word for such objects, and it's &amp;quot;null&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We can thus define the leggings recipe with the following code:&lt;br /&gt;
&lt;br /&gt;
 recipes.addShaped(&amp;lt;minecraft:iron_leggings&amp;gt;,&lt;br /&gt;
  [[&amp;lt;minecraft:iron_ingot&amp;gt;, &amp;lt;minecraft:iron_ingot&amp;gt;, &amp;lt;minecraft:iron_ingot&amp;gt;],&lt;br /&gt;
   [&amp;lt;minecraft:iron_ingot&amp;gt;, null, &amp;lt;minecraft:iron_ingot&amp;gt;],&lt;br /&gt;
   [&amp;lt;minecraft:iron_ingot&amp;gt;, null, &amp;lt;minecraft:iron_ingot&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
Or you can split the line differently for readability, since MineTweaker doesn't care how you split your code into lines. You could also retrieve the iron ingot once, assign it to a variable and then reuse it, as will be described at the end of this tutorial.&lt;br /&gt;
&lt;br /&gt;
= Basic Recipes =&lt;br /&gt;
&lt;br /&gt;
There is no visual editor, so you have to understand how to write your recipes as text.&lt;br /&gt;
&lt;br /&gt;
As a little introduction, let's consider the recipe for sticks. In vanilla minecraft, it takes 2 wood planks to make 4 sticks, and they have to put above each other. But what if we want to change that? What if, say, we find it more logical to put the two wood block diagonally instead? (this stick is diagonal, right?)&lt;br /&gt;
&lt;br /&gt;
Modifying the sticks recipe is wonderfully easy. Make a script with the following contents:&lt;br /&gt;
&lt;br /&gt;
 recipes.remove(&amp;lt;minecraft:stick&amp;gt;);&lt;br /&gt;
 recipes.addShaped(&amp;lt;minecraft:stick&amp;gt; * 4, [[&amp;lt;minecraft:planks&amp;gt;, null], [null, &amp;lt;minecraft:planks&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
Open a new game (or reload scripts, if you are already in a game). Now take 2 oak wood planks and test your recipe.&lt;br /&gt;
&lt;br /&gt;
It works? Great! But now you may have noticed a flaw in the recipe: if you put birch or spruce wood, it doesn't work!&lt;br /&gt;
&lt;br /&gt;
Why doesn't it work? The &amp;quot;planks&amp;quot; item has subitems that are distinguished by not only the item name, but also by its meta value. By default, if you retrieve an item with the bracket syntax, MineTweaker assumes you want the item with meta value 0. And that's what it returned - the &amp;quot;oak planks&amp;quot; item. But we want an ingredient which essentially means &amp;quot;any kind of wood&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Luckily, this is easy to fix. When using the bracket syntax, besides the name, we can also define a meta value. For instance, &amp;lt;code&amp;gt;&amp;lt;minecraft:planks:1&amp;gt;&amp;lt;/code&amp;gt; refers to spruce wood. We can also use the wildcard (*) to get an item meaning &amp;quot;any meta value is good&amp;quot;: &amp;lt;code&amp;gt;&amp;lt;minecraft:planks:*&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thus, change your recipe and reload:&lt;br /&gt;
&lt;br /&gt;
 recipes.remove(&amp;lt;minecraft:stick&amp;gt;);&lt;br /&gt;
 recipes.addShaped(&amp;lt;minecraft:stick&amp;gt; * 4, [[&amp;lt;minecraft:planks:*&amp;gt;, null], [null, &amp;lt;minecraft:planks:*&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
Fixed! Of course, you should use the ore dictionary entry for planks, which would be even better as it would be compatible with mod-added planks :)&lt;br /&gt;
&lt;br /&gt;
If need the full name of an item, you can hold it in your hand and use the /minetweaker hand command. It will print the name and copy it to the clipboard, so you can just paste it directly in your script.&lt;br /&gt;
&lt;br /&gt;
== Other kinds of recipes ==&lt;br /&gt;
&lt;br /&gt;
Shaped recipes are recipes where the ingredients must be placed in the right shape in order for it to work. Not all Minecraft recipes are shaped - some don't care about the shape. MineTweaker supports those with the addShapeless function:&lt;br /&gt;
 &lt;br /&gt;
 recipes.addShapeless(&amp;lt;minecraft:stick&amp;gt; * 4, [&amp;lt;ore:plankWood&amp;gt;, &amp;lt;ore:plankWood&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
Now it doesn't matter how you place your planks - you can always craft sticks. Note that in this example, though, you can no longer craft the wooden pressure plate.&lt;br /&gt;
&lt;br /&gt;
Since 3.0.7, it's also possible to register mirrored recipes. Continuing with our sticks (make sure to remove the previous recipes first):&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapedMirrored(&amp;lt;minecraft:stick&amp;gt; * 4, [[&amp;lt;minecraft:planks:*&amp;gt;, null], [null, &amp;lt;minecraft:planks:*&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
Now it doesn't matter if you mirror the recipe - it still works!&lt;br /&gt;
&lt;br /&gt;
== Specific recipe removal ==&lt;br /&gt;
&lt;br /&gt;
So far we decided that we would be removing all recipes for the stick. In vanilla minecraft, there is also only one, so that's not an issue. But what if we want to be more specific? Often there are multiple recipes for the same item, and we may want to remove one yet keep the others.&lt;br /&gt;
&lt;br /&gt;
It is possible to be more specific in that case:&lt;br /&gt;
&lt;br /&gt;
 recipes.removeShaped(&amp;lt;minecraft:stick&amp;gt;, [[&amp;lt;minecraft:planks:*&amp;gt;], [&amp;lt;minecraft:planks:*&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
This will remove only a single recipe - even if there are other recipes.&lt;br /&gt;
&lt;br /&gt;
It is also possible to remove all recipes that are shaped, or all recipes that are shapeless, by simply calling:&lt;br /&gt;
&lt;br /&gt;
 recipes.removeShaped(&amp;lt;minecraft:stick&amp;gt;);&lt;br /&gt;
 recipes.removeShapeless(&amp;lt;minecraft:stick&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Also, wildcard patterns can be used to indicate that any kind of item would match for a certain position, as long as it's not empty:&lt;br /&gt;
&lt;br /&gt;
 recipes.removeShaped(&amp;lt;minecraft:stick&amp;gt;, [[&amp;lt;*&amp;gt;], [&amp;lt;*&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
Likewise, when removing shapeless recipes, it is possible to only specify one or more ingredients of the shapeless recipe and then tell minetweaker that the remainder of the recipe may contain anything:&lt;br /&gt;
&lt;br /&gt;
 recipes.removeShapeless(&amp;lt;minecraft:wool:*&amp;gt;, [&amp;lt;minecraft:wool&amp;gt;]); // removes all wool coloring recipes&lt;br /&gt;
&lt;br /&gt;
== Subitems and damage values ==&lt;br /&gt;
&lt;br /&gt;
Quite often, items have multiple subitems. A very well-known example are coal and charcoal. Both have the same ID (minecraft:coal) but have a different meta value.&lt;br /&gt;
&lt;br /&gt;
When loading an item, you can specify the meta value for the subitem:&lt;br /&gt;
&lt;br /&gt;
 var coal = &amp;lt;minecraft:coal:0&amp;gt;; // same as &amp;lt;minecraft:coal&amp;gt;&lt;br /&gt;
 var charcoal = &amp;lt;minecraft:coal:1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
When the subitem is not specified, :0 is filled in for the subitem.&lt;br /&gt;
&lt;br /&gt;
If you want a recipe to match any subitem, you can use the wildcard syntax:&lt;br /&gt;
&lt;br /&gt;
 var anyCoal = &amp;lt;minecraft:coal:*&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Many kinds of items can also be damaged. When using such item as ingredient for a recipe, by default, no damage is allowed. For instance:&lt;br /&gt;
&lt;br /&gt;
 var pick = &amp;lt;minecraft:stone_pickaxe&amp;gt;;&lt;br /&gt;
 var iron = &amp;lt;minecraft:iron_ingot&amp;gt;;&lt;br /&gt;
 // upgrade pick recipe :)&lt;br /&gt;
 recipes.addRecipe(&amp;lt;minecraft:iron_pickaxe&amp;gt;, [[iron, iron, iron], [null, pick, null]]);&lt;br /&gt;
&lt;br /&gt;
In the recipe above, a damaged pickaxe would not be accepted. This can be changed easily with the .anyDamage() modifier:&lt;br /&gt;
&lt;br /&gt;
 var pick = &amp;lt;minecraft:stone_pickaxe&amp;gt;.anyDamage();&lt;br /&gt;
 var iron = &amp;lt;minecraft:iron_ingot&amp;gt;;&lt;br /&gt;
 // upgrade pick recipe :)&lt;br /&gt;
 recipes.addShaped(&amp;lt;minecraft:iron_pickaxe&amp;gt;, [[iron, iron, iron], [null, pick, null]]);&lt;br /&gt;
&lt;br /&gt;
== Reloading and recipes ==&lt;br /&gt;
&lt;br /&gt;
When you reloaded the scripts, you may have noticed that if you reloaded a script, the recipe is not duplicated. Likewise, if a recipe addition is removed from the script and the script is reloaded, the recipe is effectively removed from the game even though there may be no statement explicitly requesting such removal.&lt;br /&gt;
&lt;br /&gt;
MineTweaker remembers actions such as recipe addition and removal. When a script is reloaded (or loaded by joining a different server), MineTweaker will first undo all the recorded changes that were made before it executes the new script.&lt;br /&gt;
&lt;br /&gt;
Many mod machines, however, do not support such recipe removal. In that case, the recipe will be &amp;quot;stuck&amp;quot; in the game until the entire game is reloaded. For a server, this means that the recipe will be stuck in the list until the server is restarted; for a client, it means that the recipe will be shown and acted upon as if it existed, though when a crafting attempt is made, actual crafting would fail. There is no fix to such behavior; it is up to the respective mod authors to provide a sufficient API to ensure that recipe removal is possible.&lt;br /&gt;
&lt;br /&gt;
== Using variables ==&lt;br /&gt;
&lt;br /&gt;
Do you find yourself looking up the same item over and over again using the bracket syntax? It may be handy to remember the value for later; which can be done with the val and var statements:&lt;br /&gt;
&lt;br /&gt;
 val stick = &amp;lt;minecraft:stick&amp;gt;;&lt;br /&gt;
 val planks = &amp;lt;minecraft:planks:*&amp;gt;;&lt;br /&gt;
 recipes.remove(stick);&lt;br /&gt;
 recipes.addShaped(stick * 4, [[planks, null], [null, planks]]);&lt;br /&gt;
&lt;br /&gt;
In this example, var can be used to:&lt;br /&gt;
&lt;br /&gt;
 var stick = &amp;lt;minecraft:stick&amp;gt;;&lt;br /&gt;
 var planks = &amp;lt;minecraft:planks:*&amp;gt;;&lt;br /&gt;
 recipes.remove(stick);&lt;br /&gt;
 recipes.addShaped(stick * 4, [[planks, null], [null, planks]]);&lt;br /&gt;
&lt;br /&gt;
The difference between var and val is that a val cannot be modified after it is declared:&lt;br /&gt;
&lt;br /&gt;
 val stick = &amp;lt;minecraft:stick&amp;gt;;&lt;br /&gt;
 stick = &amp;lt;minecraft:bread&amp;gt;; // fails&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Basic_Recipes_164&amp;diff=1144</id>
		<title>Tutorial:Basic Recipes 164</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Basic_Recipes_164&amp;diff=1144"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 4 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Basic Recipes =&lt;br /&gt;
&lt;br /&gt;
The most basic modifications you can perform in MineTweaker are recipe addition and removal.&lt;br /&gt;
&lt;br /&gt;
As a little introduction, let's consider the recipe for sticks. In vanilla minecraft, it takes 2 wood planks to make 4 sticks, and they have to put above each other. But what if we want to change that? What if, say, we find it more logical to put the two wood block diagonally instead? (this stick is diagonal, right?)&lt;br /&gt;
&lt;br /&gt;
Modifying the sticks recipe is wonderfully easy. Make a script with the following contents:&lt;br /&gt;
&lt;br /&gt;
 recipes.remove(&amp;lt;item.stick&amp;gt;);&lt;br /&gt;
 recipes.addShaped(&amp;lt;item.stick&amp;gt; * 4, [[&amp;lt;tile.wood&amp;gt;, null], [null, &amp;lt;tile.wood&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
Open a new game (or reload scripts, if you are already in a game). Now take 2 oak wood planks and test your recipe.&lt;br /&gt;
&lt;br /&gt;
It works? Great! But now you may have noticed a flaw in the recipe: if you put birch or spruce wood, it doesn't work!&lt;br /&gt;
&lt;br /&gt;
Why doesn't it work? The &amp;quot;tile.wood&amp;quot; item has subitems that are distinguished by not only the item name, but also by its meta value. By default, if you retrieve an item with the bracket syntax, MineTweaker assumes you want the item with meta value 0. And that's what it returned - the &amp;quot;oak planks&amp;quot; item. But we want an ingredient which essentially means &amp;quot;any kind of wood&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Luckily, this is easy to fix. When using the bracket syntax, besides the name, we can also define a meta value. For instance, &amp;lt;code&amp;gt;&amp;lt;tile.wood:1&amp;gt;&amp;lt;/code&amp;gt; refers to spruce wood. We can also use the wildcard (*) to get an item meaning &amp;quot;any meta value is good&amp;quot;: &amp;lt;code&amp;gt;&amp;lt;tile.wood:*&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thus, change your recipe and reload:&lt;br /&gt;
&lt;br /&gt;
 recipes.remove(&amp;lt;item.stick&amp;gt;);&lt;br /&gt;
 recipes.addShaped(&amp;lt;item.stick&amp;gt; * 4, [[&amp;lt;tile.wood:*&amp;gt;, null], [null, &amp;lt;tile.wood:*&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
Fixed! Of course, you should use the ore dictionary entry for planks, which would be even better as it would be compatible with mod-added planks :)&lt;br /&gt;
&lt;br /&gt;
== Other kinds of recipes ==&lt;br /&gt;
&lt;br /&gt;
Shaped recipes are recipes where the ingredients must be placed in the right shape in order for it to work. Not all Minecraft recipes are shaped - some don't care about the shape. MineTweaker supports those with the addShapeless function:&lt;br /&gt;
 &lt;br /&gt;
 recipes.addShapeless(&amp;lt;item.stick&amp;gt; * 4, [&amp;lt;ore:plankWood&amp;gt;, &amp;lt;ore:plankWood&amp;gt;]);&lt;br /&gt;
&lt;br /&gt;
Now it doesn't matter how you place your planks - you can always craft sticks. Note that in this example, though, you can no longer craft the wooden pressure plate.&lt;br /&gt;
&lt;br /&gt;
Since 3.0.7, it's also possible to register mirrored recipes. Continuing with our sticks (make sure to remove the previous recipes first):&lt;br /&gt;
&lt;br /&gt;
 recipes.addShapedMirrored(&amp;lt;item.stick&amp;gt; * 4, [[&amp;lt;ore:plankWood&amp;gt;, null], [null, &amp;lt;ore:plankWood&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
Now it doesn't matter if you mirror the recipe - it still works!&lt;br /&gt;
&lt;br /&gt;
== Specific recipe removal ==&lt;br /&gt;
&lt;br /&gt;
So far we decided that we would be removing all recipes for the stick. In vanilla minecraft, there is also only one, so that's not an issue. But what if we want to be more specific? Often there are multiple recipes for the same item, and we may want to remove one yet keep the others.&lt;br /&gt;
&lt;br /&gt;
It is possible to be more specific in that case:&lt;br /&gt;
&lt;br /&gt;
 recipes.removeShaped(&amp;lt;item.stick&amp;gt;, [[&amp;lt;tile.wood:*&amp;gt;], [&amp;lt;tile.wood:*&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
This will remove only a single recipe - even if there are other recipes.&lt;br /&gt;
&lt;br /&gt;
It is also possible to remove all recipes that are shaped, or all recipes that are shapeless, by simply calling:&lt;br /&gt;
&lt;br /&gt;
 recipes.removeShaped(&amp;lt;item.stick&amp;gt;);&lt;br /&gt;
 recipes.removeShapeless(&amp;lt;item.stick&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Also, wildcard patterns can be used to indicate that any kind of item would match for a certain position, as long as it's not empty:&lt;br /&gt;
&lt;br /&gt;
 recipes.removeShaped(&amp;lt;item.stick&amp;gt;, [[&amp;lt;*&amp;gt;], [&amp;lt;*&amp;gt;]]);&lt;br /&gt;
&lt;br /&gt;
Likewise, when removing shapeless recipes, it is possible to only specify one or more ingredients of the shapeless recipe and then tell minetweaker that the remainder of the recipe may contain anything:&lt;br /&gt;
&lt;br /&gt;
 recipes.removeShapeless(&amp;lt;tile.cloth:*&amp;gt;, [&amp;lt;tile.cloth&amp;gt;]); // removes all wool coloring recipes&lt;br /&gt;
&lt;br /&gt;
Don't be fooled by the item name - it is the wool block.&lt;br /&gt;
&lt;br /&gt;
== Subitems and damage values ==&lt;br /&gt;
&lt;br /&gt;
Quite often, items have multiple subitems. A very well-known example are coal and charcoal. Both have the same ID (item.coal) but have a different meta value.&lt;br /&gt;
&lt;br /&gt;
When loading an item, you can specify the meta value for the subitem:&lt;br /&gt;
&lt;br /&gt;
 var coal = &amp;lt;item.coal:0&amp;gt;; // same as &amp;lt;item.coal&amp;gt;&lt;br /&gt;
 var charcoal = &amp;lt;item.coal:1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
When the subitem is not specified, :0 is filled in for the subitem.&lt;br /&gt;
&lt;br /&gt;
If you want a recipe to match any subitem, you can use the wildcard syntax:&lt;br /&gt;
&lt;br /&gt;
 var anyCoal = &amp;lt;item.coal:*&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Many kinds of items can also be damaged. When using such item as ingredient for a recipe, by default, no damage is allowed. For instance:&lt;br /&gt;
&lt;br /&gt;
 var pick = &amp;lt;item.pickaxeStone&amp;gt;;&lt;br /&gt;
 var iron = &amp;lt;item.ingotIron&amp;gt;;&lt;br /&gt;
 // upgrade pick recipe :)&lt;br /&gt;
 recipes.addRecipe(&amp;lt;item.pickaxeIron&amp;gt;, [[iron, iron, iron], [null, pick, null]]);&lt;br /&gt;
&lt;br /&gt;
In the recipe above, a damaged pickaxe would not be accepted. This can be changed easily with the .anyDamage() modifier:&lt;br /&gt;
&lt;br /&gt;
 var pick = &amp;lt;item.pickaxeStone&amp;gt;.anyDamage();&lt;br /&gt;
 var iron = &amp;lt;item.ingotIron&amp;gt;;&lt;br /&gt;
 // upgrade pick recipe :)&lt;br /&gt;
 recipes.addShaped(&amp;lt;item.pickaxeIron&amp;gt;, [[iron, iron, iron], [null, pick, null]]);&lt;br /&gt;
&lt;br /&gt;
== Reloading and recipes ==&lt;br /&gt;
&lt;br /&gt;
When you reloaded the scripts, you may have noticed that if you reloaded a script, the recipe is not duplicated. Likewise, if a recipe addition is removed from the script and the script is reloaded, the recipe is effectively removed from the game even though there may be no statement explicitly requesting such removal.&lt;br /&gt;
&lt;br /&gt;
MineTweaker remembers actions such as recipe addition and removal. When a script is reloaded (or loaded by joining a different server), MineTweaker will first undo all the recorded changes that were made before it executes the new script.&lt;br /&gt;
&lt;br /&gt;
Many mod machines, however, do not support such recipe removal. In that case, the recipe will be &amp;quot;stuck&amp;quot; in the game until the entire game is reloaded. For a server, this means that the recipe will be stuck in the list until the server is restarted; for a client, it means that the recipe will be shown and acted upon as if it existed, though when a crafting attempt is made, actual crafting would fail. There is no fix to such behavior; it is up to the respective mod authors to provide a sufficient API to ensure that recipe removal is possible.&lt;br /&gt;
&lt;br /&gt;
== Using variables ==&lt;br /&gt;
&lt;br /&gt;
Do you find yourself looking up the same item over and over again using the bracket syntax? It may be handy to remember the value for later; which can be done with the val and var statements:&lt;br /&gt;
&lt;br /&gt;
 val stick = &amp;lt;item.stick&amp;gt;;&lt;br /&gt;
 val planks = &amp;lt;tile.wood:*&amp;gt;;&lt;br /&gt;
 recipes.remove(stick);&lt;br /&gt;
 recipes.addShaped(stick * 4, [[planks, null], [null, planks]]);&lt;br /&gt;
&lt;br /&gt;
In this example, var can be used too:&lt;br /&gt;
&lt;br /&gt;
 var stick = &amp;lt;item.stick&amp;gt;;&lt;br /&gt;
 var planks = &amp;lt;tile.wood:*&amp;gt;;&lt;br /&gt;
 recipes.remove(stick);&lt;br /&gt;
 recipes.addShaped(stick * 4, [[planks, null], [null, planks]]);&lt;br /&gt;
&lt;br /&gt;
The difference between var and val is that a val cannot be modified after it is declared:&lt;br /&gt;
&lt;br /&gt;
 val stick = &amp;lt;item.stick&amp;gt;;&lt;br /&gt;
 stick = &amp;lt;item.bread&amp;gt;; // fails&lt;br /&gt;
&lt;br /&gt;
== Using item IDs ==&lt;br /&gt;
&lt;br /&gt;
Find yourself having issues with Item IDs? You can still use the old bracket syntax with item IDs, but only in the 1.6.4 version:&lt;br /&gt;
&lt;br /&gt;
 var rottenFlesh = &amp;lt;367&amp;gt;;&lt;br /&gt;
 var charcoal = &amp;lt;263:1&amp;gt;;&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Control_Structures&amp;diff=1151</id>
		<title>Tutorial:Control Structures</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Control_Structures&amp;diff=1151"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 6 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MineTweaker scripting engine (ZenScript) is still under heavy development. Control structures are currently only partially implemented, but it is already possible to use looping structures to aid you in your development.&lt;br /&gt;
&lt;br /&gt;
When we make use of looping structures, we generally have to store some variables first. When storing items or ingredients into variables, you never had to worry about item types. Likewise, when you use arrays or dictionaries in recipes or tag values, you could just provide the right syntax and everything worked.&lt;br /&gt;
&lt;br /&gt;
However, MineTweaker is *strongly typed*. As long as it can infer the type from your expression, you don't have to provide any typing information, but when you declare such a thing as an array it won't work anymore. This would fail:&lt;br /&gt;
&lt;br /&gt;
 var myItems = [&amp;lt;minecraft:stick&amp;gt;, &amp;lt;minecraft:stone&amp;gt;];&lt;br /&gt;
&lt;br /&gt;
The problem is that MineTweaker doesn't know your array type. It did in all the examples given before, since it could infer the array type from the function you were calling, but when you assign it to a variable it can't do that since it doesn't know your type yet. To fix this, you need to cast the array to a specific type, as such:&lt;br /&gt;
&lt;br /&gt;
 import minetweaker.item.IItemStack;&lt;br /&gt;
 &lt;br /&gt;
 var myItems = [&amp;lt;minecraft:stick&amp;gt;, &amp;lt;minecraft:stone&amp;gt;] as IItemStack[];&lt;br /&gt;
&lt;br /&gt;
IItemStack is the type that you get when you resolve an item variable such as &amp;lt;minecraft:stick&amp;gt;. IItemStack denotes a specific object and can be used either as a crafting ingredient or as crafting output, as you very likely already did.&lt;br /&gt;
&lt;br /&gt;
Its friends is IIngredient, which is more general than an item. Ore dictionary entries, for instance, are ingredients. They cannot be used as output, but they can be used as input for crafting. Additionally, if you add transformations or conditions to an IItemStack, it will become an IIngredient:&lt;br /&gt;
 &lt;br /&gt;
 import minetweaker.item.IIngredient;&lt;br /&gt;
 &lt;br /&gt;
 var myIngredients = [&amp;lt;ore:plankWood&amp;gt;, &amp;lt;minecraft:stick&amp;gt;.onlyWithTag({display:{Name: &amp;quot;Something&amp;quot;}})] as IIngredient[];&lt;br /&gt;
 var myIngredients2 = [&amp;lt;minecraft:stick&amp;gt;, &amp;lt;ore:plankWood&amp;gt;] as IIngredient[]; // will work since an IItemStack can be casted to an IIngredient&lt;br /&gt;
&lt;br /&gt;
When you define arrays of items, you can use looping operators on them to make your scripts shorter. For instance, let's say we want default log to wood recipes to have low yield yet improve it when crafting it with axes, and have the type of axe determine the amount of planks we have:&lt;br /&gt;
 &lt;br /&gt;
 import minetweaker.item.IItemStack;&lt;br /&gt;
 &lt;br /&gt;
 var myLogs = [&amp;lt;minecraft:log:0&amp;gt;, &amp;lt;minecraft:log:1&amp;gt;, &amp;lt;minecraft:log:2&amp;gt;, &amp;lt;minecraft:log:3&amp;gt;, &amp;lt;minecraft:log:4&amp;gt;, &amp;lt;minecraft:log:5&amp;gt;] as IItemStack[];&lt;br /&gt;
 var myPlanks = [&amp;lt;minecraft:planks:0&amp;gt;, &amp;lt;minecraft:planks:1&amp;gt;, &amp;lt;minecraft:planks:2&amp;gt;, &amp;lt;minecraft:planks:3&amp;gt;, &amp;lt;minecraft:planks:4&amp;gt;, &amp;lt;minecraft:planks:5&amp;gt;] as IItemStack[];&lt;br /&gt;
 &lt;br /&gt;
 var stoneAxe = &amp;lt;minecraft:stone_axe&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var ironAxe = &amp;lt;minecraft:iron_axe&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var goldenAxe = &amp;lt;minecraft:golden_axe&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var diamondAxe = &amp;lt;minecraft:diamond_axe&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 &lt;br /&gt;
 for i, log in myLogs {&lt;br /&gt;
     var plank = myPlanks[i];&lt;br /&gt;
     &lt;br /&gt;
     recipes.removeShapeless(plank, [log]);&lt;br /&gt;
     recipes.addShapeless(plank * 2, [log]);&lt;br /&gt;
     recipes.addShapeless(plank * 3, [log, stoneAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 4, [log, ironAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 5, [log, goldenAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 6, [log, diamondAxe]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now you can put all of your mod-added planks into the array, as well as their logs, and have the for loop do the heavy lifting for you!&lt;br /&gt;
&lt;br /&gt;
Sometimes you may find the need to assign NBT tags inside a for loop. You can define an NBT value in a variable outside the loop, but only when you cast it to IData. IData is the datatype for an NBT tag. Expanding our former example a little bit:&lt;br /&gt;
 &lt;br /&gt;
 import minetweaker.data.IData;&lt;br /&gt;
 import minetweaker.item.IItemStack;&lt;br /&gt;
 &lt;br /&gt;
 var myData = {display: {Name: &amp;quot;Axed plank&amp;quot;}} as IData;&lt;br /&gt;
 var myLogs = [&amp;lt;minecraft:log:0&amp;gt;, &amp;lt;minecraft:log:1&amp;gt;, &amp;lt;minecraft:log:2&amp;gt;, &amp;lt;minecraft:log:3&amp;gt;, &amp;lt;minecraft:log:4&amp;gt;, &amp;lt;minecraft:log:5&amp;gt;] as IItemStack[];&lt;br /&gt;
 var myPlanks = [&amp;lt;minecraft:planks:0&amp;gt;, &amp;lt;minecraft:planks:1&amp;gt;, &amp;lt;minecraft:planks:2&amp;gt;, &amp;lt;minecraft:planks:3&amp;gt;, &amp;lt;minecraft:planks:4&amp;gt;,&amp;lt;minecraft:planks:5&amp;gt;] as IItemStack[]; &lt;br /&gt;
&lt;br /&gt;
 var stoneAxe = &amp;lt;minecraft:stone_axe&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var ironAxe = &amp;lt;minecraft:iron_axe&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var goldenAxe = &amp;lt;minecraft:golden_axe&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var diamondAxe = &amp;lt;minecraft:diamond_axe&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 &lt;br /&gt;
 for i, log in myLogs {&lt;br /&gt;
     var plank = myPlanks[i].withTag(myData);&lt;br /&gt;
     &lt;br /&gt;
     recipes.removeShapeless(plank, [log]);&lt;br /&gt;
     recipes.addShapeless(plank * 2, [log]);&lt;br /&gt;
     recipes.addShapeless(plank * 3, [log, stoneAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 4, [log, ironAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 5, [log, goldenAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 6, [log, diamondAxe]);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Control_Structures_164&amp;diff=1153</id>
		<title>Tutorial:Control Structures 164</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Control_Structures_164&amp;diff=1153"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MineTweaker scripting engine (ZenScript) is still under heavy development. Control structures are currently only partially implemented, but it is already possible to use looping structures to aid you in your development.&lt;br /&gt;
&lt;br /&gt;
When we make use of looping structures, we generally have to store some variables first. When storing items or ingredients into variables, you never had to worry about item types. Likewise, when you use arrays or dictionaries in recipes or tag values, you could just provide the right syntax and everything worked.&lt;br /&gt;
&lt;br /&gt;
However, MineTweaker is *strongly typed*. As long as it can infer the type from your expression, you don't have to provide any typing information, but when you declare such a thing as an array it won't work anymore. This would fail:&lt;br /&gt;
&lt;br /&gt;
 var myItems = [&amp;lt;280&amp;gt;, &amp;lt;1&amp;gt;];&lt;br /&gt;
&lt;br /&gt;
The problem is that MineTweaker doesn't know your array type. It did in all the examples given before, since it could infer the array type from the function you were calling, but when you assign it to a variable it can't do that since it doesn't know your type yet. To fix this, you need to cast the array to a specific type, as such:&lt;br /&gt;
&lt;br /&gt;
 import minetweaker.item.IItemStack;&lt;br /&gt;
 &lt;br /&gt;
 var myItems = [&amp;lt;280&amp;gt;, &amp;lt;1&amp;gt;] as IItemStack[];&lt;br /&gt;
&lt;br /&gt;
IItemStack is the type that you get when you resolve an item variable such as &amp;lt;minecraft:stick&amp;gt;. IItemStack denotes a specific object and can be used either as a crafting ingredient or as crafting output, as you very likely already did.&lt;br /&gt;
&lt;br /&gt;
Its friends is IIngredient, which is more general than an item. Ore dictionary entries, for instance, are ingredients. They cannot be used as output, but they can be used as input for crafting. Additionally, if you add transformations or conditions to an IItemStack, it will become an IIngredient:&lt;br /&gt;
 &lt;br /&gt;
 import minetweaker.item.IIngredient;&lt;br /&gt;
 &lt;br /&gt;
 var myIngredients = [&amp;lt;ore:plankWood&amp;gt;, &amp;lt;280&amp;gt;.onlyWithTag({display:{Name: &amp;quot;Something&amp;quot;}})] as IIngredient[];&lt;br /&gt;
 var myIngredients2 = [&amp;lt;280&amp;gt;, &amp;lt;ore:plankWood&amp;gt;] as IIngredient[]; // will work since an IItemStack can be casted to an IIngredient&lt;br /&gt;
&lt;br /&gt;
When you define arrays of items, you can use looping operators on them to make your scripts shorter. For instance, let's say we want default log to wood recipes to have low yield yet improve it when crafting it with axes, and have the type of axe determine the amount of planks we have:&lt;br /&gt;
 &lt;br /&gt;
 import minetweaker.item.IItemStack;&lt;br /&gt;
 &lt;br /&gt;
 var myLogs = [&amp;lt;17:0&amp;gt;, &amp;lt;17:1&amp;gt;, &amp;lt;17:2&amp;gt;, &amp;lt;17:3&amp;gt;, &amp;lt;17:0&amp;gt;, &amp;lt;17:1&amp;gt;] as IItemStack[];&lt;br /&gt;
 var myPlanks = [&amp;lt;5:0&amp;gt;, &amp;lt;5:1&amp;gt;, &amp;lt;5:2&amp;gt;, &amp;lt;5:3&amp;gt;, &amp;lt;5:4&amp;gt;, &amp;lt;5:5&amp;gt;] as IItemStack[];&lt;br /&gt;
 &lt;br /&gt;
 var stoneAxe = &amp;lt;275&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var ironAxe = &amp;lt;258&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var goldenAxe = &amp;lt;286&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var diamondAxe = &amp;lt;279&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 &lt;br /&gt;
 for i, log in myLogs {&lt;br /&gt;
     var plank = myPlanks[i];&lt;br /&gt;
     &lt;br /&gt;
     recipes.removeShapeless(plank, [log]);&lt;br /&gt;
     recipes.addShapeless(plank * 2, [log]);&lt;br /&gt;
     recipes.addShapeless(plank * 3, [log, stoneAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 4, [log, ironAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 5, [log, goldenAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 6, [log, diamondAxe]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now you can put all of your mod-added planks into the array, as well as their logs, and have the for loop do the heavy lifting for you!&lt;br /&gt;
&lt;br /&gt;
Sometimes you may find the need to assign NBT tags inside a for loop. You can define an NBT value in a variable outside the loop, but only when you cast it to IData. IData is the datatype for an NBT tag. Expanding our former example a little bit:&lt;br /&gt;
 &lt;br /&gt;
 import minetweaker.data.IData;&lt;br /&gt;
 import minetweaker.item.IItemStack;&lt;br /&gt;
 &lt;br /&gt;
 var myData = {display: {Name: &amp;quot;Axed plank&amp;quot;}} as IData;&lt;br /&gt;
 var myLogs = [&amp;lt;17:0&amp;gt;, &amp;lt;17:1&amp;gt;, &amp;lt;17:2&amp;gt;, &amp;lt;17:3&amp;gt;, &amp;lt;17:0&amp;gt;, &amp;lt;17:1&amp;gt;] as IItemStack[];&lt;br /&gt;
 var myPlanks = [&amp;lt;5:0&amp;gt;, &amp;lt;5:1&amp;gt;, &amp;lt;5:2&amp;gt;, &amp;lt;5:3&amp;gt;, &amp;lt;5:4&amp;gt;, &amp;lt;5:5&amp;gt;] as IItemStack[];&lt;br /&gt;
 &lt;br /&gt;
 var stoneAxe = &amp;lt;275&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var ironAxe = &amp;lt;258&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var goldenAxe = &amp;lt;286&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 var diamondAxe = &amp;lt;279&amp;gt;.anyDamage().transformDamage();&lt;br /&gt;
 &lt;br /&gt;
 for i, log in myLogs {&lt;br /&gt;
     var plank = myPlanks[i].withTag(myData);&lt;br /&gt;
     &lt;br /&gt;
     recipes.removeShapeless(plank, [log]);&lt;br /&gt;
     recipes.addShapeless(plank * 2, [log]);&lt;br /&gt;
     recipes.addShapeless(plank * 3, [log, stoneAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 4, [log, ironAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 5, [log, goldenAxe]);&lt;br /&gt;
     recipes.addShapeless(plank * 6, [log, diamondAxe]);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Control_Structurs&amp;diff=1155</id>
		<title>Tutorial:Control Structurs</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Control_Structurs&amp;diff=1155"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Tutorial:Control Structures]]&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Furnace&amp;diff=1159</id>
		<title>Tutorial:Furnace</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Furnace&amp;diff=1159"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 3 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MineTweaker also allows modifying furnace recipes and furnace fuels using a few simple commands.&lt;br /&gt;
&lt;br /&gt;
Do you believe smelting ores in a furnace is too easy? You can fix it as such:&lt;br /&gt;
&lt;br /&gt;
 furnace.remove(&amp;lt;minecraft:gold_ingot&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
 // alternatively, you can specify the input item&lt;br /&gt;
 furnace.remove(&amp;lt;*&amp;gt;, &amp;lt;minecraft:iron_ore&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Found it sad you can't turn charcoal into real coal? Easy fix:&lt;br /&gt;
&lt;br /&gt;
 furnace.addRecipe(&amp;lt;minecraft:coal:0&amp;gt;, &amp;lt;minecraft:coal:1&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
 // or, if you want to generate 0.5 XP by doing so&lt;br /&gt;
 furnace.addRecipe(&amp;lt;minecraft:coal:0&amp;gt;, &amp;lt;minecraft:coal:1&amp;gt;, 0.5);&lt;br /&gt;
&lt;br /&gt;
Want to make items burnable? Set their fuel value wit the setFuel function:&lt;br /&gt;
&lt;br /&gt;
 furnace.setFuel(&amp;lt;minecraft:rotten_flesh&amp;gt;, 100);&lt;br /&gt;
&lt;br /&gt;
The same method can be used to set existing fuel - EXCEPT for vanilla fuels since those are, sadly, hard-coded. Additionally (with the exception of vanilla fuels) you can remove fuels by setting their fuel value to 0.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Furnace_164&amp;diff=1161</id>
		<title>Tutorial:Furnace 164</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Furnace_164&amp;diff=1161"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MineTweaker also allows modifying furnace recipes and furnace fuels using a few simple commands.&lt;br /&gt;
&lt;br /&gt;
Do you believe smelting ores in a furnace is too easy? You can fix it as such:&lt;br /&gt;
&lt;br /&gt;
 furnace.remove(&amp;lt;item.ingotIron&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
 // alternatively, you can specify the input item&lt;br /&gt;
 furnace.remove(&amp;lt;*&amp;gt;, &amp;lt;tile.oreIron&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Found it sad you can't turn charcoal into real coal? Easy fix:&lt;br /&gt;
&lt;br /&gt;
 furnace.addRecipe(&amp;lt;item.coal:0&amp;gt;, &amp;lt;item.coal:1&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
 // or, if you want to generate 0.5 XP by doing so&lt;br /&gt;
 furnace.addRecipe(&amp;lt;item.coal:0&amp;gt;, &amp;lt;item.coal:1&amp;gt;, 0.5);&lt;br /&gt;
&lt;br /&gt;
Want to make items burnable? Set their fuel value wit the setFuel function:&lt;br /&gt;
&lt;br /&gt;
 furnace.setFuel(&amp;lt;item.rottenFlesh&amp;gt;, 100);&lt;br /&gt;
&lt;br /&gt;
The same method can be used to set existing fuel - EXCEPT for vanilla fuels since those are, sadly, hard-coded. Additionally (with the exception of vanilla fuels) you can remove fuels by setting their fuel value to 0.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Introduction&amp;diff=1170</id>
		<title>Tutorial:Introduction</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Introduction&amp;diff=1170"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 8 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Ever went into building a modpack and then found that just throwing in a bunch of mods didn't give you an integrated experience? As mods are developed relatively independently from each other, one may feel overpowered in comparison to the other. Or you may believe that there would be a better recipe for some of the items. Or perhaps you'd want to remove an item from the game without having to remove the entire mod. Or you may discover that some ore dictionary entries have too many or too few items. Now you can do all of that - each with just a single instruction to MineTweaker.&lt;br /&gt;
&lt;br /&gt;
In addition to the core functionality provided to support Vanilla minecraft, mod integration libraries are provided with the mod to enable you to not only modify vanilla recipes, but also the mod machine recipes and mod behavior.&lt;br /&gt;
&lt;br /&gt;
== Scripts ==&lt;br /&gt;
&lt;br /&gt;
To make the functionality available in a clear and concise manner, a custom scripting language is provided. The language is easy to learn - and for basic operations you can just follow the tutorials.&lt;br /&gt;
&lt;br /&gt;
For multiplayer games, scripts are always stored server-side. That means you will never have to worry about keeping scripts up-to date with your friends! This makes MineTweaker a great modpack and server admin tool - it makes it possible to wrap a modpack with a certain set of mods and have different servers use MineTweaker to alter the details according to the preferences of the server owners.&lt;br /&gt;
&lt;br /&gt;
Likewise, scripts can be bundled with worlds, making it possible to make modifications available to specific worlds only - handy if you want to do some playtesting in a certain world. Also handy for mapmakers wanting to have specific behavior programmed with their map.&lt;br /&gt;
&lt;br /&gt;
MineTweaker has two script directories:&lt;br /&gt;
* The shared script directory: the scripts directory, directly inside your minecraft directory. Scripts stored in this directory will apply to all worlds hosted by that minecraft instance - including Single-player games. They will NOT apply when you join another server, as scripts are always loaded from the server.&lt;br /&gt;
* The world-specific script directory: this directory is also called scripts, but is stored in the savegame directory (world/scripts if you are setting up a dedicated server)&lt;br /&gt;
&lt;br /&gt;
Inside these directories, any file with the '''.zs''' extension is considered a MineTweaker script and will be ran automatically when a game is started. Any number of script files can be stored in these directories - they will all be executed, in no particular order.&lt;br /&gt;
&lt;br /&gt;
== Writing a first script ==&lt;br /&gt;
&lt;br /&gt;
To get used to the scripting system in MineTweaker, we can create a very basic file. Create a file hello.zs in your .minecraft/scripts directory (create it if it doesn't already exist) with the following line:&lt;br /&gt;
&lt;br /&gt;
 print(&amp;quot;Hello world!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Now open Minecraft and start a new game (or open an existing one).&lt;br /&gt;
&lt;br /&gt;
The script should have run now. Now where did MineTweaker print its text?&lt;br /&gt;
&lt;br /&gt;
== The Minetweaker log ==&lt;br /&gt;
&lt;br /&gt;
When you put a print statement in MineTweaker, it will output to the minetweaker.log file in your minecraft directory. Open this log and you should see the output:&lt;br /&gt;
&lt;br /&gt;
 INFO: Hello world!&lt;br /&gt;
&lt;br /&gt;
Cool, huh? Although printing a test string to the log is not so interesting in and by itself, it is good to know that any errors and warnings will print to this file. Additionally, many in-game commands output to this file since the in-game console simply cannot hold much data.&lt;br /&gt;
&lt;br /&gt;
Do you still have the game open? Try the following command in the in-game console:&lt;br /&gt;
&lt;br /&gt;
 /minetweaker names&lt;br /&gt;
&lt;br /&gt;
This command dumps a list of each and every item in the game to the minetweaker log. If you have a lot of mods installed, expect a huge list. But since it outputs to the log, you can open the file with your favorite editor and search for a specific item name. (still stuck with Notepad? Try notepad++!)&lt;br /&gt;
&lt;br /&gt;
== Reloading ==&lt;br /&gt;
&lt;br /&gt;
While developing, there is no need to restart minecraft for every change you are making. You can reload scripts in-game.&lt;br /&gt;
&lt;br /&gt;
Change your printed text to something else, such as:&lt;br /&gt;
&lt;br /&gt;
 print(&amp;quot;Hello guys!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Now, in-game, enter the command &amp;lt;tt&amp;gt;/minetweaker reload&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This will append the following line in the MineTweaker log:&lt;br /&gt;
&lt;br /&gt;
 INFO: Hello guys!&lt;br /&gt;
&lt;br /&gt;
MineTweaker reloaded your scripts from disk and executed it again. Handy! There is more to script reloading, as it will not only reload the script but also any recipes that have been changed. More about that in the next tutorial.&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
To document your scripts, MineTweaker supports 3 styles of comments:&lt;br /&gt;
&lt;br /&gt;
 // this is a single line comment&lt;br /&gt;
 # this is a single line comment&lt;br /&gt;
 /* this is&lt;br /&gt;
 a&lt;br /&gt;
 multiline comment */&lt;br /&gt;
&lt;br /&gt;
Use these to make your scripts more understandable!&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Item_Renaming&amp;diff=1174</id>
		<title>Tutorial:Item Renaming</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Item_Renaming&amp;diff=1174"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 3 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Not happy with an item name? Want to correct a &amp;lt;strike&amp;gt;type&amp;lt;/strike&amp;gt; typo made by the mod author? Did some translation go missing?&lt;br /&gt;
&lt;br /&gt;
Although a resource pack can fix that, it may be less cumbersome to use MineTweaker instead:&lt;br /&gt;
&lt;br /&gt;
 print(&amp;lt;minecraft:chest&amp;gt;.displayName); // prints the original name&lt;br /&gt;
 &amp;lt;minecraft:chest&amp;gt;.displayName = &amp;quot;Storage Box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
That's all it takes!&lt;br /&gt;
&lt;br /&gt;
Note that there exist some mod items with broken internal names. These cannot have their names modified with this method. Neither can they be modified through translations files, and as such these mod items should be considered bugged. If NEI is installed, you can still use the NEI.overrideName function, which will change the name in most places.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unlike most script types, renaming requires a client restart, and not simply a script reload.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	<entry>
		<id>https://minetweaker3.aizistral.com/index.php?title=Tutorial:Localization&amp;diff=1179</id>
		<title>Tutorial:Localization</title>
		<link rel="alternate" type="text/html" href="https://minetweaker3.aizistral.com/index.php?title=Tutorial:Localization&amp;diff=1179"/>
				<updated>2025-08-21T00:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Aizistral: 4 revisions imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since MineTweaker 3.0.8, it is possible to change localization strings.&lt;br /&gt;
&lt;br /&gt;
Two variants of the function exist - one that sets the translation no matter the current language, and one that overrides a translation but only when the given language matches the current language:&lt;br /&gt;
&lt;br /&gt;
 // Set translation but only if language is en_US&lt;br /&gt;
 game.setLocalization(&amp;quot;en_US&amp;quot;, &amp;quot;nei.inventory.prev&amp;quot;, &amp;quot;Past&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 //KEY, TEXT - You will want to use this one most of the time, it overrides no matter the language&lt;br /&gt;
 game.setLocalization(&amp;quot;nei.inventory.next&amp;quot;, &amp;quot;Future&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
To find localizations, check the localization files in the assets of Minecraft or the mods you want to alter.&lt;/div&gt;</summary>
		<author><name>Aizistral</name></author>	</entry>

	</feed>