<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.keii.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>Joyful&#039;s Civilization - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.keii.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php/Special:Contributions/Admin"/>
	<updated>2026-07-18T16:39:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Map_Generation&amp;diff=400</id>
		<title>Map Generation</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Map_Generation&amp;diff=400"/>
		<updated>2025-10-20T17:39:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ores =&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. There are above ground hints that will tell players where these localized deposits of ores are. Look for rock formations that have high counts of &amp;quot;hint&amp;quot; blocks (described in the table below) to figure out where to go looking! Make sure to mine out a decent area around where you found an ore to follow the vein until its exhausted.&lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
[[File:Vein Example.png|thumb|Example of how Veins are generated.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Ore !! Hints &lt;br /&gt;
|-&lt;br /&gt;
| Copper || Diorite&lt;br /&gt;
|-&lt;br /&gt;
| Quartz || Calcite&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Andesite&lt;br /&gt;
|-&lt;br /&gt;
| Diamond/Coal || Granite&lt;br /&gt;
|-&lt;br /&gt;
| Gold || Messa&lt;br /&gt;
|-&lt;br /&gt;
| Coal Sheets|| Fossils&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s very important to maintain control over localized deposits of ores in the same way that it&#039;s important to maintain control over your biome. Keeping other groups of players out of ore deposits gives your community trade leverage to be able to import much needed crops and blocks from other biomes.&lt;br /&gt;
&lt;br /&gt;
= Caves =&lt;br /&gt;
Caves outside of specific ore deposits will have very few if any ores. Finding ores in this event will take extensive searching.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Downed_System&amp;diff=399</id>
		<title>Downed System</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Downed_System&amp;diff=399"/>
		<updated>2025-10-16T22:29:36Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;Because of the increased consequences of death, we&amp;#039;ve also added a Downed But Not Out (DBNO) system. When a player&amp;#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviv...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviving a downed player. You can cancel the revive by crouching. When a player starts reviving a downed player, the death timer pauses. If a player leaves the game while downed, they will instantly die.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=398</id>
		<title>Category:Player Mechanics</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=398"/>
		<updated>2025-10-16T22:29:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Downed System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Revive System]]&lt;br /&gt;
&lt;br /&gt;
[[Downed System]]&lt;br /&gt;
&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time (this is currently bugged and will NOT work). Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart. This new system makes health much more precarious, and makes access to water sources much more important (without having to add an annoying thirst system).&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina. Players in the early game found a lot of success by grouping up and working in shifts. While half of the team rests and regains stamina, the other half is mining/building. Once a group of players establishes a good source of food, they&#039;ll be able to trade food for time. Instead of waiting for their stamina to regen, they can instead keep performing actions until it becomes a food cost, then quickly eat and keep working without having to take a break. The stamina system acts as a food cost for actions while giving unestablished players the ability to perform tasks and survive without starving. We recommend that groups of players focus hard on establishing large sources of food in order to overcome the limitations of stamina.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=397</id>
		<title>Category:Player Mechanics</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=397"/>
		<updated>2025-10-16T22:28:42Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Reviving Players */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Revive System]]&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviving a downed player. You can cancel the revive by crouching. When a player starts reviving a downed player, the death timer pauses. If a player leaves the game while downed, they will instantly die.&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time (this is currently bugged and will NOT work). Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart. This new system makes health much more precarious, and makes access to water sources much more important (without having to add an annoying thirst system).&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina. Players in the early game found a lot of success by grouping up and working in shifts. While half of the team rests and regains stamina, the other half is mining/building. Once a group of players establishes a good source of food, they&#039;ll be able to trade food for time. Instead of waiting for their stamina to regen, they can instead keep performing actions until it becomes a food cost, then quickly eat and keep working without having to take a break. The stamina system acts as a food cost for actions while giving unestablished players the ability to perform tasks and survive without starving. We recommend that groups of players focus hard on establishing large sources of food in order to overcome the limitations of stamina.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Revive_System&amp;diff=396</id>
		<title>Revive System</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Revive_System&amp;diff=396"/>
		<updated>2025-10-16T22:27:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Players can be brought back into the experiment after dying if a player in the game makes a sacrifice of food. This is done via an item called: Cornucopias. This system gives an advantage to established societies by allowing them to bring players back from being dead. This gives established communities an advantage over smaller groups of raiders. Since cornucopias require [[List of Crop Biomes|crops from every biome]] and are very important, this system lays the groundwork for a real international trade. We recommend that communities maintain control over their entire biome, or atleast enter into agreements to conduct trade as an entire biome in the case of multiple groups in the same biome, in order to maintain their leverage on trade and to be able to take part in the trade between different societies.&lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;br /&gt;
&lt;br /&gt;
== Cornucopias ==&lt;br /&gt;
[[File:Cornucopia.png|thumb|100px]]&lt;br /&gt;
In order to bring another player back you need 32 Cornucopias.&lt;br /&gt;
(This is only true for the test server. In the real event this number will increase with each revive). Cornucopias require one of every crop type, which includes: wheat, potatoes, carrots, beetroots, sweet berries, melon slice, sugar, pumpkin, and a bowl. This recipe is shapeless.&lt;br /&gt;
[[File:Cornucopia_Recipe.png|centre|Frame|300px||Recipe for Conucopias]]&lt;br /&gt;
&lt;br /&gt;
== How to bring a player back ==&lt;br /&gt;
Once you have 64 Cornucopias, put them in your main hand and use the /revive command.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/revive [username]&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Replace [username] with the name of the player you want to revive. The command will check that username against all the players on the ban-list (except for people banned for cheating), so if you mistype the player’s name the command will not run. Once you run the command with a valid player’s username, the cornucopias will be removed from your inventory and the player will be unbanned.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Revive_System&amp;diff=395</id>
		<title>Revive System</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Revive_System&amp;diff=395"/>
		<updated>2025-10-16T22:25:52Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Players can be brought back into the experiment after dying if a player in the game makes a sacrifice of food. This is done via an item called: Cornucopias. This system gives an advantage to established societies by allowing them to bring players back from being dead. This gives established communities an advantage over smaller groups of raiders. Since cornucopias require [[List of Crop Biomes|crops from every biome]] and are very important, this system lays the groundwork for a real international trade. We recommend that communities maintain control over their entire biome, or atleast enter into agreements to conduct trade as an entire biome in the case of multiple groups in the same biome, in order to maintain their leverage on trade and to be able to take part in the trade between different societies.&lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cornucopias ==&lt;br /&gt;
[[File:Cornucopia.png|thumb|100px]]&lt;br /&gt;
In order to bring another player back you need 32 Cornucopias.&lt;br /&gt;
(This is only true for the test server. In the real event this number will increase with each revive). Cornucopias require one of every crop type, which includes: wheat, potatoes, carrots, beetroots, sweet berries, melon slice, sugar, pumpkin, and a bowl. This recipe is shapeless.&lt;br /&gt;
[[File:Cornucopia_Recipe.png|centre|Frame|300px||Recipe for Conucopias]]&lt;br /&gt;
&lt;br /&gt;
== How to bring a player back ==&lt;br /&gt;
Once you have 64 Cornucopias, put them in your main hand and use the /revive command.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/revive [username]&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Replace [username] with the name of the player you want to revive. The command will check that username against all the players on the ban-list (except for people banned for cheating), so if you mistype the player’s name the command will not run. Once you run the command with a valid player’s username, the cornucopias will be removed from your inventory and the player will be unbanned.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=394</id>
		<title>Category:Player Mechanics</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=394"/>
		<updated>2025-10-16T22:25:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Revive System]]&lt;br /&gt;
&lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviving a downed player. You can cancel the revive by crouching. When a player starts reviving a downed player, the death timer pauses. If a player leaves the game while downed, they will instantly die.&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time (this is currently bugged and will NOT work). Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart. This new system makes health much more precarious, and makes access to water sources much more important (without having to add an annoying thirst system).&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina. Players in the early game found a lot of success by grouping up and working in shifts. While half of the team rests and regains stamina, the other half is mining/building. Once a group of players establishes a good source of food, they&#039;ll be able to trade food for time. Instead of waiting for their stamina to regen, they can instead keep performing actions until it becomes a food cost, then quickly eat and keep working without having to take a break. The stamina system acts as a food cost for actions while giving unestablished players the ability to perform tasks and survive without starving. We recommend that groups of players focus hard on establishing large sources of food in order to overcome the limitations of stamina.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=393</id>
		<title>Category:Player Mechanics</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=393"/>
		<updated>2025-10-16T22:25:08Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Reviving System]]&lt;br /&gt;
&lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviving a downed player. You can cancel the revive by crouching. When a player starts reviving a downed player, the death timer pauses. If a player leaves the game while downed, they will instantly die.&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time (this is currently bugged and will NOT work). Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart. This new system makes health much more precarious, and makes access to water sources much more important (without having to add an annoying thirst system).&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina. Players in the early game found a lot of success by grouping up and working in shifts. While half of the team rests and regains stamina, the other half is mining/building. Once a group of players establishes a good source of food, they&#039;ll be able to trade food for time. Instead of waiting for their stamina to regen, they can instead keep performing actions until it becomes a food cost, then quickly eat and keep working without having to take a break. The stamina system acts as a food cost for actions while giving unestablished players the ability to perform tasks and survive without starving. We recommend that groups of players focus hard on establishing large sources of food in order to overcome the limitations of stamina.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Reviving_Players&amp;diff=392</id>
		<title>Reviving Players</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Reviving_Players&amp;diff=392"/>
		<updated>2025-10-16T22:24:28Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Reviving Players */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Reviving_Players&amp;diff=391</id>
		<title>Reviving Players</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Reviving_Players&amp;diff=391"/>
		<updated>2025-10-16T22:24:22Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Reviving Players */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Reviving Players =&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Reviving_Players&amp;diff=390</id>
		<title>Reviving Players</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Reviving_Players&amp;diff=390"/>
		<updated>2025-10-16T22:24:17Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;=== Reviving Players === The only way a player can rejoin the experiment is if another player in the game brings them back via a costly sacrifice of food. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in specific biomes. In order to gather all of the required crops,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=389</id>
		<title>Category:Player Mechanics</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=389"/>
		<updated>2025-10-16T22:24:08Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Reviving Players]]&lt;br /&gt;
&lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviving a downed player. You can cancel the revive by crouching. When a player starts reviving a downed player, the death timer pauses. If a player leaves the game while downed, they will instantly die.&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time (this is currently bugged and will NOT work). Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart. This new system makes health much more precarious, and makes access to water sources much more important (without having to add an annoying thirst system).&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina. Players in the early game found a lot of success by grouping up and working in shifts. While half of the team rests and regains stamina, the other half is mining/building. Once a group of players establishes a good source of food, they&#039;ll be able to trade food for time. Instead of waiting for their stamina to regen, they can instead keep performing actions until it becomes a food cost, then quickly eat and keep working without having to take a break. The stamina system acts as a food cost for actions while giving unestablished players the ability to perform tasks and survive without starving. We recommend that groups of players focus hard on establishing large sources of food in order to overcome the limitations of stamina.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Tips_And_Tricks&amp;diff=388</id>
		<title>Tips And Tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Tips_And_Tricks&amp;diff=388"/>
		<updated>2025-10-16T22:23:09Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main|Archive}}&lt;br /&gt;
&lt;br /&gt;
{{hatnote}}&lt;br /&gt;
&lt;br /&gt;
== Tips for Leaders ==&lt;br /&gt;
&lt;br /&gt;
Regardless of your goals going into the event, the time may come when you have to step up as a leader in your community. Leadership is a tough skill to master, and it will take time to understand how to balance the multiple conflicting interests and personal goals of all of the people in your community. This section is not meant to guide players into any particular leadership style, this section is primarily to point out past pitfalls and mistakes of leaders in past experiments so that players can learn from these mistakes and hit the ground running faster than if they had to figure out everything themselves. We&#039;ll briefly lay out some common mistakes and challenges here, starting with the most common pitfall we&#039;ve seen in the past: Larping.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Larping ===&lt;br /&gt;
Larping has been the downfall of many groups, especially in the early game. What we refer to as &amp;quot;larping&amp;quot; is the establishment of political and economic systems for aesthetics sake, or because of a real world affinity for these systems. Because players are people who live in the real world, they will bring real life conceptions about governance and economics with them, and will find it natural to set up systems in the game world that they are familiar with from real life. However, these systems are NOT designed to be implemented in Minecraft, and commonly lead to the collapse of the communities who attempt to implement them 1:1.&lt;br /&gt;
&lt;br /&gt;
In order to avoid a collapse due to a &amp;quot;larp&amp;quot; system, as a leader you should ask yourself: What are the immediate problems of my community? (Are we facing a food shortage? Do we need protection from other groups? Are players getting bored in our community?). The political and economic systems you adopt should directly solve these problems.&lt;br /&gt;
&lt;br /&gt;
=== Balancing Contradictions ===&lt;br /&gt;
There are many contradictions that you&#039;ll have to deal with and balance as a leader. The biggest contradiction will most likely be: the needs of the group vs the enjoyment of the players. There are many many more than just this contradiction, but we&#039;ll look into it and a few more here to give leaders an idea of things they&#039;ll have to pay attention to and balance.&lt;br /&gt;
&lt;br /&gt;
==== Enjoyment vs Necessity ====&lt;br /&gt;
There are many boring jobs that are very important to the survival of the group such as: Farming, Mining, Organizing Storage, etc. Some members of your group will find these actions fun, and some will find them very dull. Its up to you as a leader to balance these needs. After all, the players in your community could very well leave your community to join another group, or just leave the game altogether if they&#039;re not having fun. Entertainment is a big need for societies in Minecraft, just as they are in the real world (however, not for the same reasons). Since Minecraft is a game, if people aren&#039;t enjoying their time in your group, they have the power to simply leave. On the other hand, if your players are taking time to do fun stuff, they&#039;re not doing the boring tasks that keep the society functioning. Its up to you as a leader to balance this contradiction and to not fall too far to one side or else your community will collapse.&lt;br /&gt;
&lt;br /&gt;
==== Progression vs Protection ====&lt;br /&gt;
The same materials which are used to craft the special Anvils which let you unlock new tiers in material progression are the same materials which you need to forge armor and weapons to defend yourself and your community. Because of this, you need to make a choice as a leader: Do you use the ingots you have now for weapons and armor to protect yourself from other groups, or do you use those ingots to make higher tiered anvils to hopefully one day be able to forge even higher tier weapons and armor. If at any point you have the material edge over other communities around the map, it may be better to invest resources into weapons and armor to launch a preemptive strike while you have the technological advantage instead of continuing to invest in new anvils. Remember: you can be attacked at any time. The other groups do not need a good roleplay reason to attack you first. Sometimes offensive is the best defense. If you have peaceful relations with other communities, it may be best to continue progressing to increasing your productive potential. The choice is yours, but make sure you balance progression and protection, because invest too much in protection at the wrong time, and you&#039;ll fall behind other groups. Invest too much in progression at the wrong time, and you could be scattered into the wind and have to start from square one.&lt;br /&gt;
&lt;br /&gt;
==== Beauty vs Utility ====&lt;br /&gt;
People love making beautiful builds for fun in Minecraft. This game gives players a lot of freedom in how they can create. In this event beautiful builds also serve a practical purpose. Having the nicest looking town makes it more attractive to players. There will be many times when communities collapse and groups of players will have to migrate. If you&#039;re community has beautiful builds, it gives these migrating players confidence that your town has their stuff together and could be a nice group to join. It also gives pride to the players in your own community. Humans naturally enjoy aesthetic beauty and will be more willing to stay in a town that looks good. On the other hand, spending a lot of time building will slow down production in other areas such as mining, which could possibly open up your town to the risk of being invaded if you can&#039;t keep up technologically. Communities which build with utility first will have more time to spend digging up ores and expanding farms. Its up to you as a leader to balance the beauty of your buildings with the utility of your buildings in order to avoid falling behind or losing out on new players.&lt;br /&gt;
&lt;br /&gt;
=== Diplomacy and War ===&lt;br /&gt;
In an experiment where nations do not need admin permission to go to war an attack could come at any time, even from groups who you thought were your ally. When analyzing the threats that other groups pose to your community, always analyze the situation through the lens of power. Even if you have nominally good relations with another group, or believe that the leader of another group is a good person, always be prepared for a quick evacuation and make plans concerning what to do in an attack such as: What spot in the town do we rally to if we&#039;re under attack? If we flee, where will we group back up at? Etc. Always bear in mind the balance of power of the nations around you, and make sure that you have adequate treaties and agreements with neighbors in the case of an attack.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== When to Fight and When to Flee? ====&lt;br /&gt;
Combat in this experiment is risky, especially if your community is unable to revive people. Before entering combat, its best to weigh your odds of victory. If you think there&#039;s an above average chance that you may not win a battle, DO NOT FIGHT. Only ever take battles where YOU have the advantage, if it can be helped.&lt;br /&gt;
&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=387</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=387"/>
		<updated>2025-10-16T22:19:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Crafting Recipes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Basics =&lt;br /&gt;
[[File:The boys.png|thumb|Rift Team aura farming with the new gear]]&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event. This experiment is NOT like a normal Minecraft civilizations event. The only rules that are enforced by admins are:&lt;br /&gt;
&lt;br /&gt;
*No cheating&lt;br /&gt;
*No harassment&lt;br /&gt;
*No racism/sexism&lt;br /&gt;
*No combat logging&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a ban.&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
&lt;br /&gt;
This experiment is a challenge. Players who enjoy problem solving and overcoming challenges will enjoy this event.&lt;br /&gt;
Unlike other Minecraft civilization events, actions such as RDM and Griefing are not against the rules. Although admins do not enforce rules against these actions, players are encouraged to enforce these rules themselves in order to protect themselves and their builds. In order to empower players to do this: &#039;&#039;&#039;[[Revive System|Death is (almost) permanent.]]&#039;&#039;&#039; &lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. This cost will increase exponentially for each time the same person is revived. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]].&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time. Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart.&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina.&lt;br /&gt;
&lt;br /&gt;
=== Progression ===&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ores ===&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. &lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
&lt;br /&gt;
=== Enchantments ===&lt;br /&gt;
Enchantments no longer work like they do in vanilla. There is no enchantment table. Instead, enchantments take place in a [[Diamond Anvil]]. Enchanting requires a piece of the material of what you&#039;re enchanting. &lt;br /&gt;
&lt;br /&gt;
=== Fishing ===&lt;br /&gt;
Fishing now takes stamina, but more importantly fishing now requires [[Bait|bait]]. Bait is made from any raw meat in a crafting table. If you fish without bait you only get junk items. The list of junk items you can fish up has been changed to not include enchanted books.&lt;br /&gt;
&lt;br /&gt;
=== Animal Breeding ===&lt;br /&gt;
Animals require more crops to enter love mode! For example, cows and sheep now require 8x Wheat instead of only 1x. In order to make animals enter love mode, you need to have at least the required quantity of crop. For the rest of the animals, they require 16x of their normal crop (pigs require 16x carrots, chickens 16x seeds, etc.)&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=386</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=386"/>
		<updated>2025-10-16T22:19:08Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* How to organize your group in combat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Basics =&lt;br /&gt;
[[File:The boys.png|thumb|Rift Team aura farming with the new gear]]&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event. This experiment is NOT like a normal Minecraft civilizations event. The only rules that are enforced by admins are:&lt;br /&gt;
&lt;br /&gt;
*No cheating&lt;br /&gt;
*No harassment&lt;br /&gt;
*No racism/sexism&lt;br /&gt;
*No combat logging&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a ban.&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
&lt;br /&gt;
This experiment is a challenge. Players who enjoy problem solving and overcoming challenges will enjoy this event.&lt;br /&gt;
Unlike other Minecraft civilization events, actions such as RDM and Griefing are not against the rules. Although admins do not enforce rules against these actions, players are encouraged to enforce these rules themselves in order to protect themselves and their builds. In order to empower players to do this: &#039;&#039;&#039;[[Revive System|Death is (almost) permanent.]]&#039;&#039;&#039; &lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. This cost will increase exponentially for each time the same person is revived. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]].&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time. Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart.&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina.&lt;br /&gt;
&lt;br /&gt;
=== Progression ===&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ores ===&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. &lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
&lt;br /&gt;
=== Enchantments ===&lt;br /&gt;
Enchantments no longer work like they do in vanilla. There is no enchantment table. Instead, enchantments take place in a [[Diamond Anvil]]. Enchanting requires a piece of the material of what you&#039;re enchanting. &lt;br /&gt;
&lt;br /&gt;
=== Fishing ===&lt;br /&gt;
Fishing now takes stamina, but more importantly fishing now requires [[Bait|bait]]. Bait is made from any raw meat in a crafting table. If you fish without bait you only get junk items. The list of junk items you can fish up has been changed to not include enchanted books.&lt;br /&gt;
&lt;br /&gt;
=== Animal Breeding ===&lt;br /&gt;
Animals require more crops to enter love mode! For example, cows and sheep now require 8x Wheat instead of only 1x. In order to make animals enter love mode, you need to have at least the required quantity of crop. For the rest of the animals, they require 16x of their normal crop (pigs require 16x carrots, chickens 16x seeds, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Crafting Recipes ===&lt;br /&gt;
Mobs no longer drop loot, therefore we&#039;ve added quite a few recipes for things which can&#039;t be acquired by their usual methods. A list of all the crafting recipes you&#039;ll need can be found [[List of Crafting Recipes|here]].&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=385</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=385"/>
		<updated>2025-10-16T22:18:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Basics =&lt;br /&gt;
[[File:The boys.png|thumb|Rift Team aura farming with the new gear]]&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event. This experiment is NOT like a normal Minecraft civilizations event. The only rules that are enforced by admins are:&lt;br /&gt;
&lt;br /&gt;
*No cheating&lt;br /&gt;
*No harassment&lt;br /&gt;
*No racism/sexism&lt;br /&gt;
*No combat logging&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a ban.&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
&lt;br /&gt;
This experiment is a challenge. Players who enjoy problem solving and overcoming challenges will enjoy this event.&lt;br /&gt;
Unlike other Minecraft civilization events, actions such as RDM and Griefing are not against the rules. Although admins do not enforce rules against these actions, players are encouraged to enforce these rules themselves in order to protect themselves and their builds. In order to empower players to do this: &#039;&#039;&#039;[[Revive System|Death is (almost) permanent.]]&#039;&#039;&#039; &lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. This cost will increase exponentially for each time the same person is revived. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]].&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time. Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart.&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina.&lt;br /&gt;
&lt;br /&gt;
=== Progression ===&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ores ===&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. &lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
&lt;br /&gt;
=== Enchantments ===&lt;br /&gt;
Enchantments no longer work like they do in vanilla. There is no enchantment table. Instead, enchantments take place in a [[Diamond Anvil]]. Enchanting requires a piece of the material of what you&#039;re enchanting. &lt;br /&gt;
&lt;br /&gt;
=== Fishing ===&lt;br /&gt;
Fishing now takes stamina, but more importantly fishing now requires [[Bait|bait]]. Bait is made from any raw meat in a crafting table. If you fish without bait you only get junk items. The list of junk items you can fish up has been changed to not include enchanted books.&lt;br /&gt;
&lt;br /&gt;
=== Animal Breeding ===&lt;br /&gt;
Animals require more crops to enter love mode! For example, cows and sheep now require 8x Wheat instead of only 1x. In order to make animals enter love mode, you need to have at least the required quantity of crop. For the rest of the animals, they require 16x of their normal crop (pigs require 16x carrots, chickens 16x seeds, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Crafting Recipes ===&lt;br /&gt;
Mobs no longer drop loot, therefore we&#039;ve added quite a few recipes for things which can&#039;t be acquired by their usual methods. A list of all the crafting recipes you&#039;ll need can be found [[List of Crafting Recipes|here]].&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=384</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=384"/>
		<updated>2025-10-16T22:18:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Basics =&lt;br /&gt;
[[File:The boys.png|thumb|Rift Team aura farming with the new gear]]&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event. This experiment is NOT like a normal Minecraft civilizations event. The only rules that are enforced by admins are:&lt;br /&gt;
&lt;br /&gt;
*No cheating&lt;br /&gt;
*No harassment&lt;br /&gt;
*No racism/sexism&lt;br /&gt;
*No combat logging&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a ban.&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
&lt;br /&gt;
This experiment is a challenge. Players who enjoy problem solving and overcoming challenges will enjoy this event.&lt;br /&gt;
Unlike other Minecraft civilization events, actions such as RDM and Griefing are not against the rules. Although admins do not enforce rules against these actions, players are encouraged to enforce these rules themselves in order to protect themselves and their builds. In order to empower players to do this: &#039;&#039;&#039;[[Revive System|Death is (almost) permanent.]]&#039;&#039;&#039; &lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. This cost will increase exponentially for each time the same person is revived. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]].&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time. Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart.&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina.&lt;br /&gt;
&lt;br /&gt;
=== Progression ===&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ores ===&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. &lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
[[File:Vein Example.png|thumb|Example of how Veins are generated.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Ore !! Hints &lt;br /&gt;
|-&lt;br /&gt;
| Copper || Diorite&lt;br /&gt;
|-&lt;br /&gt;
| Quartz || Calcite&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Andesite&lt;br /&gt;
|-&lt;br /&gt;
| Diamond/Coal || Granite&lt;br /&gt;
|-&lt;br /&gt;
| Gold || Messa&lt;br /&gt;
|-&lt;br /&gt;
| Coal Sheets|| Fossils&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Enchantments ===&lt;br /&gt;
Enchantments no longer work like they do in vanilla. There is no enchantment table. Instead, enchantments take place in a [[Diamond Anvil]]. Enchanting requires a piece of the material of what you&#039;re enchanting. &lt;br /&gt;
&lt;br /&gt;
=== Fishing ===&lt;br /&gt;
Fishing now takes stamina, but more importantly fishing now requires [[Bait|bait]]. Bait is made from any raw meat in a crafting table. If you fish without bait you only get junk items. The list of junk items you can fish up has been changed to not include enchanted books.&lt;br /&gt;
&lt;br /&gt;
=== Animal Breeding ===&lt;br /&gt;
Animals require more crops to enter love mode! For example, cows and sheep now require 8x Wheat instead of only 1x. In order to make animals enter love mode, you need to have at least the required quantity of crop. For the rest of the animals, they require 16x of their normal crop (pigs require 16x carrots, chickens 16x seeds, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Crafting Recipes ===&lt;br /&gt;
Mobs no longer drop loot, therefore we&#039;ve added quite a few recipes for things which can&#039;t be acquired by their usual methods. A list of all the crafting recipes you&#039;ll need can be found [[List of Crafting Recipes|here]].&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Tips_And_Tricks&amp;diff=383</id>
		<title>Tips And Tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Tips_And_Tricks&amp;diff=383"/>
		<updated>2025-10-16T22:18:08Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{main|Archive}}&lt;br /&gt;
&lt;br /&gt;
{{hatnote}}&lt;br /&gt;
&lt;br /&gt;
== Tips for Leaders ==&lt;br /&gt;
&lt;br /&gt;
Regardless of your goals going into the event, the time may come when you have to step up as a leader in your community. Leadership is a tough skill to master, and it will take time to understand how to balance the multiple conflicting interests and personal goals of all of the people in your community. This section is not meant to guide players into any particular leadership style, this section is primarily to point out past pitfalls and mistakes of leaders in past experiments so that players can learn from these mistakes and hit the ground running faster than if they had to figure out everything themselves. We&#039;ll briefly lay out some common mistakes and challenges here, starting with the most common pitfall we&#039;ve seen in the past: Larping.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Larping ===&lt;br /&gt;
Larping has been the downfall of many groups, especially in the early game. What we refer to as &amp;quot;larping&amp;quot; is the establishment of political and economic systems for aesthetics sake, or because of a real world affinity for these systems. Because players are people who live in the real world, they will bring real life conceptions about governance and economics with them, and will find it natural to set up systems in the game world that they are familiar with from real life. However, these systems are NOT designed to be implemented in Minecraft, and commonly lead to the collapse of the communities who attempt to implement them 1:1.&lt;br /&gt;
&lt;br /&gt;
In order to avoid a collapse due to a &amp;quot;larp&amp;quot; system, as a leader you should ask yourself: What are the immediate problems of my community? (Are we facing a food shortage? Do we need protection from other groups? Are players getting bored in our community?). The political and economic systems you adopt should directly solve these problems.&lt;br /&gt;
&lt;br /&gt;
=== Balancing Contradictions ===&lt;br /&gt;
There are many contradictions that you&#039;ll have to deal with and balance as a leader. The biggest contradiction will most likely be: the needs of the group vs the enjoyment of the players. There are many many more than just this contradiction, but we&#039;ll look into it and a few more here to give leaders an idea of things they&#039;ll have to pay attention to and balance.&lt;br /&gt;
&lt;br /&gt;
==== Enjoyment vs Necessity ====&lt;br /&gt;
There are many boring jobs that are very important to the survival of the group such as: Farming, Mining, Organizing Storage, etc. Some members of your group will find these actions fun, and some will find them very dull. Its up to you as a leader to balance these needs. After all, the players in your community could very well leave your community to join another group, or just leave the game altogether if they&#039;re not having fun. Entertainment is a big need for societies in Minecraft, just as they are in the real world (however, not for the same reasons). Since Minecraft is a game, if people aren&#039;t enjoying their time in your group, they have the power to simply leave. On the other hand, if your players are taking time to do fun stuff, they&#039;re not doing the boring tasks that keep the society functioning. Its up to you as a leader to balance this contradiction and to not fall too far to one side or else your community will collapse.&lt;br /&gt;
&lt;br /&gt;
==== Progression vs Protection ====&lt;br /&gt;
The same materials which are used to craft the special Anvils which let you unlock new tiers in material progression are the same materials which you need to forge armor and weapons to defend yourself and your community. Because of this, you need to make a choice as a leader: Do you use the ingots you have now for weapons and armor to protect yourself from other groups, or do you use those ingots to make higher tiered anvils to hopefully one day be able to forge even higher tier weapons and armor. If at any point you have the material edge over other communities around the map, it may be better to invest resources into weapons and armor to launch a preemptive strike while you have the technological advantage instead of continuing to invest in new anvils. Remember: you can be attacked at any time. The other groups do not need a good roleplay reason to attack you first. Sometimes offensive is the best defense. If you have peaceful relations with other communities, it may be best to continue progressing to increasing your productive potential. The choice is yours, but make sure you balance progression and protection, because invest too much in protection at the wrong time, and you&#039;ll fall behind other groups. Invest too much in progression at the wrong time, and you could be scattered into the wind and have to start from square one.&lt;br /&gt;
&lt;br /&gt;
==== Beauty vs Utility ====&lt;br /&gt;
People love making beautiful builds for fun in Minecraft. This game gives players a lot of freedom in how they can create. In this event beautiful builds also serve a practical purpose. Having the nicest looking town makes it more attractive to players. There will be many times when communities collapse and groups of players will have to migrate. If you&#039;re community has beautiful builds, it gives these migrating players confidence that your town has their stuff together and could be a nice group to join. It also gives pride to the players in your own community. Humans naturally enjoy aesthetic beauty and will be more willing to stay in a town that looks good. On the other hand, spending a lot of time building will slow down production in other areas such as mining, which could possibly open up your town to the risk of being invaded if you can&#039;t keep up technologically. Communities which build with utility first will have more time to spend digging up ores and expanding farms. Its up to you as a leader to balance the beauty of your buildings with the utility of your buildings in order to avoid falling behind or losing out on new players.&lt;br /&gt;
&lt;br /&gt;
=== Diplomacy and War ===&lt;br /&gt;
In an experiment where nations do not need admin permission to go to war an attack could come at any time, even from groups who you thought were your ally. When analyzing the threats that other groups pose to your community, always analyze the situation through the lens of power. Even if you have nominally good relations with another group, or believe that the leader of another group is a good person, always be prepared for a quick evacuation and make plans concerning what to do in an attack such as: What spot in the town do we rally to if we&#039;re under attack? If we flee, where will we group back up at? Etc. Always bear in mind the balance of power of the nations around you, and make sure that you have adequate treaties and agreements with neighbors in the case of an attack.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== When to Fight and When to Flee? ====&lt;br /&gt;
Combat in this experiment is risky, especially if your community is unable to revive people. Before entering combat, its best to weigh your odds of victory. If you think there&#039;s an above average chance that you may not win a battle, DO NOT FIGHT. Only ever take battles where YOU have the advantage, if it can be helped.&lt;br /&gt;
&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Tips_And_Tricks&amp;diff=382</id>
		<title>Tips And Tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Tips_And_Tricks&amp;diff=382"/>
		<updated>2025-10-16T22:18:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{main|Archive}}&lt;br /&gt;
&lt;br /&gt;
{{hatnote|text}}&lt;br /&gt;
&lt;br /&gt;
== Tips for Leaders ==&lt;br /&gt;
&lt;br /&gt;
Regardless of your goals going into the event, the time may come when you have to step up as a leader in your community. Leadership is a tough skill to master, and it will take time to understand how to balance the multiple conflicting interests and personal goals of all of the people in your community. This section is not meant to guide players into any particular leadership style, this section is primarily to point out past pitfalls and mistakes of leaders in past experiments so that players can learn from these mistakes and hit the ground running faster than if they had to figure out everything themselves. We&#039;ll briefly lay out some common mistakes and challenges here, starting with the most common pitfall we&#039;ve seen in the past: Larping.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Larping ===&lt;br /&gt;
Larping has been the downfall of many groups, especially in the early game. What we refer to as &amp;quot;larping&amp;quot; is the establishment of political and economic systems for aesthetics sake, or because of a real world affinity for these systems. Because players are people who live in the real world, they will bring real life conceptions about governance and economics with them, and will find it natural to set up systems in the game world that they are familiar with from real life. However, these systems are NOT designed to be implemented in Minecraft, and commonly lead to the collapse of the communities who attempt to implement them 1:1.&lt;br /&gt;
&lt;br /&gt;
In order to avoid a collapse due to a &amp;quot;larp&amp;quot; system, as a leader you should ask yourself: What are the immediate problems of my community? (Are we facing a food shortage? Do we need protection from other groups? Are players getting bored in our community?). The political and economic systems you adopt should directly solve these problems.&lt;br /&gt;
&lt;br /&gt;
=== Balancing Contradictions ===&lt;br /&gt;
There are many contradictions that you&#039;ll have to deal with and balance as a leader. The biggest contradiction will most likely be: the needs of the group vs the enjoyment of the players. There are many many more than just this contradiction, but we&#039;ll look into it and a few more here to give leaders an idea of things they&#039;ll have to pay attention to and balance.&lt;br /&gt;
&lt;br /&gt;
==== Enjoyment vs Necessity ====&lt;br /&gt;
There are many boring jobs that are very important to the survival of the group such as: Farming, Mining, Organizing Storage, etc. Some members of your group will find these actions fun, and some will find them very dull. Its up to you as a leader to balance these needs. After all, the players in your community could very well leave your community to join another group, or just leave the game altogether if they&#039;re not having fun. Entertainment is a big need for societies in Minecraft, just as they are in the real world (however, not for the same reasons). Since Minecraft is a game, if people aren&#039;t enjoying their time in your group, they have the power to simply leave. On the other hand, if your players are taking time to do fun stuff, they&#039;re not doing the boring tasks that keep the society functioning. Its up to you as a leader to balance this contradiction and to not fall too far to one side or else your community will collapse.&lt;br /&gt;
&lt;br /&gt;
==== Progression vs Protection ====&lt;br /&gt;
The same materials which are used to craft the special Anvils which let you unlock new tiers in material progression are the same materials which you need to forge armor and weapons to defend yourself and your community. Because of this, you need to make a choice as a leader: Do you use the ingots you have now for weapons and armor to protect yourself from other groups, or do you use those ingots to make higher tiered anvils to hopefully one day be able to forge even higher tier weapons and armor. If at any point you have the material edge over other communities around the map, it may be better to invest resources into weapons and armor to launch a preemptive strike while you have the technological advantage instead of continuing to invest in new anvils. Remember: you can be attacked at any time. The other groups do not need a good roleplay reason to attack you first. Sometimes offensive is the best defense. If you have peaceful relations with other communities, it may be best to continue progressing to increasing your productive potential. The choice is yours, but make sure you balance progression and protection, because invest too much in protection at the wrong time, and you&#039;ll fall behind other groups. Invest too much in progression at the wrong time, and you could be scattered into the wind and have to start from square one.&lt;br /&gt;
&lt;br /&gt;
==== Beauty vs Utility ====&lt;br /&gt;
People love making beautiful builds for fun in Minecraft. This game gives players a lot of freedom in how they can create. In this event beautiful builds also serve a practical purpose. Having the nicest looking town makes it more attractive to players. There will be many times when communities collapse and groups of players will have to migrate. If you&#039;re community has beautiful builds, it gives these migrating players confidence that your town has their stuff together and could be a nice group to join. It also gives pride to the players in your own community. Humans naturally enjoy aesthetic beauty and will be more willing to stay in a town that looks good. On the other hand, spending a lot of time building will slow down production in other areas such as mining, which could possibly open up your town to the risk of being invaded if you can&#039;t keep up technologically. Communities which build with utility first will have more time to spend digging up ores and expanding farms. Its up to you as a leader to balance the beauty of your buildings with the utility of your buildings in order to avoid falling behind or losing out on new players.&lt;br /&gt;
&lt;br /&gt;
=== Diplomacy and War ===&lt;br /&gt;
In an experiment where nations do not need admin permission to go to war an attack could come at any time, even from groups who you thought were your ally. When analyzing the threats that other groups pose to your community, always analyze the situation through the lens of power. Even if you have nominally good relations with another group, or believe that the leader of another group is a good person, always be prepared for a quick evacuation and make plans concerning what to do in an attack such as: What spot in the town do we rally to if we&#039;re under attack? If we flee, where will we group back up at? Etc. Always bear in mind the balance of power of the nations around you, and make sure that you have adequate treaties and agreements with neighbors in the case of an attack.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== When to Fight and When to Flee? ====&lt;br /&gt;
Combat in this experiment is risky, especially if your community is unable to revive people. Before entering combat, its best to weigh your odds of victory. If you think there&#039;s an above average chance that you may not win a battle, DO NOT FIGHT. Only ever take battles where YOU have the advantage, if it can be helped.&lt;br /&gt;
&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Module:Hatnote&amp;diff=380</id>
		<title>Module:Hatnote</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Module:Hatnote&amp;diff=380"/>
		<updated>2025-10-16T22:16:38Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;return require(&amp;#039;Dev:Hatnote&amp;#039;)&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return require(&#039;Dev:Hatnote&#039;)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=379</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=379"/>
		<updated>2025-10-16T22:16:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Mechanics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Basics =&lt;br /&gt;
[[File:The boys.png|thumb|Rift Team aura farming with the new gear]]&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event. This experiment is NOT like a normal Minecraft civilizations event. The only rules that are enforced by admins are:&lt;br /&gt;
&lt;br /&gt;
*No cheating&lt;br /&gt;
*No harassment&lt;br /&gt;
*No racism/sexism&lt;br /&gt;
*No combat logging&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a ban.&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
&lt;br /&gt;
{{main|Archive}}&lt;br /&gt;
&lt;br /&gt;
This experiment is a challenge. Players who enjoy problem solving and overcoming challenges will enjoy this event.&lt;br /&gt;
Unlike other Minecraft civilization events, actions such as RDM and Griefing are not against the rules. Although admins do not enforce rules against these actions, players are encouraged to enforce these rules themselves in order to protect themselves and their builds. In order to empower players to do this: &#039;&#039;&#039;[[Revive System|Death is (almost) permanent.]]&#039;&#039;&#039; &lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. This cost will increase exponentially for each time the same person is revived. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]].&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time. Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart.&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina.&lt;br /&gt;
&lt;br /&gt;
=== Progression ===&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ores ===&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. &lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
[[File:Vein Example.png|thumb|Example of how Veins are generated.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Ore !! Hints &lt;br /&gt;
|-&lt;br /&gt;
| Copper || Diorite&lt;br /&gt;
|-&lt;br /&gt;
| Quartz || Calcite&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Andesite&lt;br /&gt;
|-&lt;br /&gt;
| Diamond/Coal || Granite&lt;br /&gt;
|-&lt;br /&gt;
| Gold || Messa&lt;br /&gt;
|-&lt;br /&gt;
| Coal Sheets|| Fossils&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Enchantments ===&lt;br /&gt;
Enchantments no longer work like they do in vanilla. There is no enchantment table. Instead, enchantments take place in a [[Diamond Anvil]]. Enchanting requires a piece of the material of what you&#039;re enchanting. &lt;br /&gt;
&lt;br /&gt;
=== Fishing ===&lt;br /&gt;
Fishing now takes stamina, but more importantly fishing now requires [[Bait|bait]]. Bait is made from any raw meat in a crafting table. If you fish without bait you only get junk items. The list of junk items you can fish up has been changed to not include enchanted books.&lt;br /&gt;
&lt;br /&gt;
=== Animal Breeding ===&lt;br /&gt;
Animals require more crops to enter love mode! For example, cows and sheep now require 8x Wheat instead of only 1x. In order to make animals enter love mode, you need to have at least the required quantity of crop. For the rest of the animals, they require 16x of their normal crop (pigs require 16x carrots, chickens 16x seeds, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Crafting Recipes ===&lt;br /&gt;
Mobs no longer drop loot, therefore we&#039;ve added quite a few recipes for things which can&#039;t be acquired by their usual methods. A list of all the crafting recipes you&#039;ll need can be found [[List of Crafting Recipes|here]].&lt;br /&gt;
&lt;br /&gt;
== Tips for Leaders ==&lt;br /&gt;
&lt;br /&gt;
Regardless of your goals going into the event, the time may come when you have to step up as a leader in your community. Leadership is a tough skill to master, and it will take time to understand how to balance the multiple conflicting interests and personal goals of all of the people in your community. This section is not meant to guide players into any particular leadership style, this section is primarily to point out past pitfalls and mistakes of leaders in past experiments so that players can learn from these mistakes and hit the ground running faster than if they had to figure out everything themselves. We&#039;ll briefly lay out some common mistakes and challenges here, starting with the most common pitfall we&#039;ve seen in the past: Larping.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Larping ===&lt;br /&gt;
Larping has been the downfall of many groups, especially in the early game. What we refer to as &amp;quot;larping&amp;quot; is the establishment of political and economic systems for aesthetics sake, or because of a real world affinity for these systems. Because players are people who live in the real world, they will bring real life conceptions about governance and economics with them, and will find it natural to set up systems in the game world that they are familiar with from real life. However, these systems are NOT designed to be implemented in Minecraft, and commonly lead to the collapse of the communities who attempt to implement them 1:1.&lt;br /&gt;
&lt;br /&gt;
In order to avoid a collapse due to a &amp;quot;larp&amp;quot; system, as a leader you should ask yourself: What are the immediate problems of my community? (Are we facing a food shortage? Do we need protection from other groups? Are players getting bored in our community?). The political and economic systems you adopt should directly solve these problems.&lt;br /&gt;
&lt;br /&gt;
=== Balancing Contradictions ===&lt;br /&gt;
There are many contradictions that you&#039;ll have to deal with and balance as a leader. The biggest contradiction will most likely be: the needs of the group vs the enjoyment of the players. There are many many more than just this contradiction, but we&#039;ll look into it and a few more here to give leaders an idea of things they&#039;ll have to pay attention to and balance.&lt;br /&gt;
&lt;br /&gt;
==== Enjoyment vs Necessity ====&lt;br /&gt;
There are many boring jobs that are very important to the survival of the group such as: Farming, Mining, Organizing Storage, etc. Some members of your group will find these actions fun, and some will find them very dull. Its up to you as a leader to balance these needs. After all, the players in your community could very well leave your community to join another group, or just leave the game altogether if they&#039;re not having fun. Entertainment is a big need for societies in Minecraft, just as they are in the real world (however, not for the same reasons). Since Minecraft is a game, if people aren&#039;t enjoying their time in your group, they have the power to simply leave. On the other hand, if your players are taking time to do fun stuff, they&#039;re not doing the boring tasks that keep the society functioning. Its up to you as a leader to balance this contradiction and to not fall too far to one side or else your community will collapse.&lt;br /&gt;
&lt;br /&gt;
==== Progression vs Protection ====&lt;br /&gt;
The same materials which are used to craft the special Anvils which let you unlock new tiers in material progression are the same materials which you need to forge armor and weapons to defend yourself and your community. Because of this, you need to make a choice as a leader: Do you use the ingots you have now for weapons and armor to protect yourself from other groups, or do you use those ingots to make higher tiered anvils to hopefully one day be able to forge even higher tier weapons and armor. If at any point you have the material edge over other communities around the map, it may be better to invest resources into weapons and armor to launch a preemptive strike while you have the technological advantage instead of continuing to invest in new anvils. Remember: you can be attacked at any time. The other groups do not need a good roleplay reason to attack you first. Sometimes offensive is the best defense. If you have peaceful relations with other communities, it may be best to continue progressing to increasing your productive potential. The choice is yours, but make sure you balance progression and protection, because invest too much in protection at the wrong time, and you&#039;ll fall behind other groups. Invest too much in progression at the wrong time, and you could be scattered into the wind and have to start from square one.&lt;br /&gt;
&lt;br /&gt;
==== Beauty vs Utility ====&lt;br /&gt;
People love making beautiful builds for fun in Minecraft. This game gives players a lot of freedom in how they can create. In this event beautiful builds also serve a practical purpose. Having the nicest looking town makes it more attractive to players. There will be many times when communities collapse and groups of players will have to migrate. If you&#039;re community has beautiful builds, it gives these migrating players confidence that your town has their stuff together and could be a nice group to join. It also gives pride to the players in your own community. Humans naturally enjoy aesthetic beauty and will be more willing to stay in a town that looks good. On the other hand, spending a lot of time building will slow down production in other areas such as mining, which could possibly open up your town to the risk of being invaded if you can&#039;t keep up technologically. Communities which build with utility first will have more time to spend digging up ores and expanding farms. Its up to you as a leader to balance the beauty of your buildings with the utility of your buildings in order to avoid falling behind or losing out on new players.&lt;br /&gt;
&lt;br /&gt;
=== Diplomacy and War ===&lt;br /&gt;
In an experiment where nations do not need admin permission to go to war an attack could come at any time, even from groups who you thought were your ally. When analyzing the threats that other groups pose to your community, always analyze the situation through the lens of power. Even if you have nominally good relations with another group, or believe that the leader of another group is a good person, always be prepared for a quick evacuation and make plans concerning what to do in an attack such as: What spot in the town do we rally to if we&#039;re under attack? If we flee, where will we group back up at? Etc. Always bear in mind the balance of power of the nations around you, and make sure that you have adequate treaties and agreements with neighbors in the case of an attack.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== When to Fight and When to Flee? ====&lt;br /&gt;
Combat in this experiment is risky, especially if your community is unable to revive people. Before entering combat, its best to weigh your odds of victory. If you think there&#039;s an above average chance that you may not win a battle, DO NOT FIGHT. Only ever take battles where YOU have the advantage, if it can be helped.&lt;br /&gt;
&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Template:Hatnote/styles.css&amp;diff=378</id>
		<title>Template:Hatnote/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Template:Hatnote/styles.css&amp;diff=378"/>
		<updated>2025-10-16T22:14:38Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.hatnote {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	padding-bottom: 0.4em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
	border-bottom: 1px solid var( --border-color-subtle, #c8ccd1 );&lt;br /&gt;
}&lt;br /&gt;
.hatnote.no-border {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=375</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=375"/>
		<updated>2025-10-16T22:13:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Basics =&lt;br /&gt;
[[File:The boys.png|thumb|Rift Team aura farming with the new gear]]&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event. This experiment is NOT like a normal Minecraft civilizations event. The only rules that are enforced by admins are:&lt;br /&gt;
&lt;br /&gt;
*No cheating&lt;br /&gt;
*No harassment&lt;br /&gt;
*No racism/sexism&lt;br /&gt;
*No combat logging&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a ban.&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
&lt;br /&gt;
{{main|Archive}}&lt;br /&gt;
&lt;br /&gt;
This experiment is a challenge. Players who enjoy problem solving and overcoming challenges will enjoy this event.&lt;br /&gt;
Unlike other Minecraft civilization events, actions such as RDM and Griefing are not against the rules. Although admins do not enforce rules against these actions, players are encouraged to enforce these rules themselves in order to protect themselves and their builds. In order to empower players to do this: &#039;&#039;&#039;[[Revive System|Death is (almost) permanent.]]&#039;&#039;&#039; &lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviving a downed player. You can cancel the revive by crouching. When a player starts reviving a downed player, the death timer pauses. If a player leaves the game while downed, they will instantly die.&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time (this is currently bugged and will NOT work). Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart. This new system makes health much more precarious, and makes access to water sources much more important (without having to add an annoying thirst system).&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina. Players in the early game found a lot of success by grouping up and working in shifts. While half of the team rests and regains stamina, the other half is mining/building. Once a group of players establishes a good source of food, they&#039;ll be able to trade food for time. Instead of waiting for their stamina to regen, they can instead keep performing actions until it becomes a food cost, then quickly eat and keep working without having to take a break. The stamina system acts as a food cost for actions while giving unestablished players the ability to perform tasks and survive without starving. We recommend that groups of players focus hard on establishing large sources of food in order to overcome the limitations of stamina.&lt;br /&gt;
&lt;br /&gt;
=== Progression ===&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Material !! Utility Block !! Required&lt;br /&gt;
|-&lt;br /&gt;
| Wood || Crafting Table || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Stone || Crafting Table || Wood&lt;br /&gt;
|-&lt;br /&gt;
| Bronze|| Copper Anvil || Stone&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Crafting Table || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Steel || Iron Anvil || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Diamond || Smithing Table || Steel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ores ===&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. There are above ground hints that will tell players where these localized deposits of ores are. Look for rock formations that have high counts of &amp;quot;hint&amp;quot; blocks (described in the table below) to figure out where to go looking! Make sure to mine out a decent area around where you found an ore to follow the vein until its exhausted.&lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
[[File:Vein Example.png|thumb|Example of how Veins are generated.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Ore !! Hints &lt;br /&gt;
|-&lt;br /&gt;
| Copper || Diorite&lt;br /&gt;
|-&lt;br /&gt;
| Quartz || Calcite&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Andesite&lt;br /&gt;
|-&lt;br /&gt;
| Diamond/Coal || Granite&lt;br /&gt;
|-&lt;br /&gt;
| Gold || Messa&lt;br /&gt;
|-&lt;br /&gt;
| Coal Sheets|| Fossils&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s very important to maintain control over localized deposits of ores in the same way that it&#039;s important to maintain control over your biome. Keeping other groups of players out of ore deposits gives your community trade leverage to be able to import much needed crops and blocks from other biomes.&lt;br /&gt;
&lt;br /&gt;
=== Enchantments ===&lt;br /&gt;
Enchantments no longer work like they do in vanilla. There is no enchantment table. Instead, enchantments take place in a [[Diamond Anvil]]. Enchanting requires a piece of the material of what you&#039;re enchanting. For example, if you combine a Steel Sword with a Steel Ingot in a Diamond Anvil, you will enchant the sword with Sharpness 1. Enchantments depend on the [[List of Enchantments|item you are enchanting]]. Swords get Sharpness 1, Armor gets Protection 1, etc. You can improve the level of enchantment by combining two of the same enchanted gear in a crafting table (2 Sharpness 1 swords makes 1 Sharpness 2 sword).&lt;br /&gt;
&lt;br /&gt;
=== Fishing ===&lt;br /&gt;
Fishing now takes stamina, but more importantly fishing now requires [[Bait|bait]]. Bait is made from any raw meat in a crafting table. If you fish without bait you only get junk items. The list of junk items you can fish up has been changed to not include enchanted books.&lt;br /&gt;
&lt;br /&gt;
=== Animal Breeding ===&lt;br /&gt;
Animals require more crops to enter love mode! For example, cows and sheep now require 8x Wheat instead of only 1x. In order to make animals enter love mode, you need to have at least the required quantity of crop. For the rest of the animals, they require 16x of their normal crop (pigs require 16x carrots, chickens 16x seeds, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Crafting Recipes ===&lt;br /&gt;
Mobs no longer drop loot, therefore we&#039;ve added quite a few recipes for things which can&#039;t be acquired by their usual methods. A list of all the crafting recipes you&#039;ll need can be found [[List of Crafting Recipes|here]].&lt;br /&gt;
&lt;br /&gt;
== Tips for Leaders ==&lt;br /&gt;
&lt;br /&gt;
Regardless of your goals going into the event, the time may come when you have to step up as a leader in your community. Leadership is a tough skill to master, and it will take time to understand how to balance the multiple conflicting interests and personal goals of all of the people in your community. This section is not meant to guide players into any particular leadership style, this section is primarily to point out past pitfalls and mistakes of leaders in past experiments so that players can learn from these mistakes and hit the ground running faster than if they had to figure out everything themselves. We&#039;ll briefly lay out some common mistakes and challenges here, starting with the most common pitfall we&#039;ve seen in the past: Larping.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Larping ===&lt;br /&gt;
Larping has been the downfall of many groups, especially in the early game. What we refer to as &amp;quot;larping&amp;quot; is the establishment of political and economic systems for aesthetics sake, or because of a real world affinity for these systems. Because players are people who live in the real world, they will bring real life conceptions about governance and economics with them, and will find it natural to set up systems in the game world that they are familiar with from real life. However, these systems are NOT designed to be implemented in Minecraft, and commonly lead to the collapse of the communities who attempt to implement them 1:1.&lt;br /&gt;
&lt;br /&gt;
In order to avoid a collapse due to a &amp;quot;larp&amp;quot; system, as a leader you should ask yourself: What are the immediate problems of my community? (Are we facing a food shortage? Do we need protection from other groups? Are players getting bored in our community?). The political and economic systems you adopt should directly solve these problems.&lt;br /&gt;
&lt;br /&gt;
=== Balancing Contradictions ===&lt;br /&gt;
There are many contradictions that you&#039;ll have to deal with and balance as a leader. The biggest contradiction will most likely be: the needs of the group vs the enjoyment of the players. There are many many more than just this contradiction, but we&#039;ll look into it and a few more here to give leaders an idea of things they&#039;ll have to pay attention to and balance.&lt;br /&gt;
&lt;br /&gt;
==== Enjoyment vs Necessity ====&lt;br /&gt;
There are many boring jobs that are very important to the survival of the group such as: Farming, Mining, Organizing Storage, etc. Some members of your group will find these actions fun, and some will find them very dull. Its up to you as a leader to balance these needs. After all, the players in your community could very well leave your community to join another group, or just leave the game altogether if they&#039;re not having fun. Entertainment is a big need for societies in Minecraft, just as they are in the real world (however, not for the same reasons). Since Minecraft is a game, if people aren&#039;t enjoying their time in your group, they have the power to simply leave. On the other hand, if your players are taking time to do fun stuff, they&#039;re not doing the boring tasks that keep the society functioning. Its up to you as a leader to balance this contradiction and to not fall too far to one side or else your community will collapse.&lt;br /&gt;
&lt;br /&gt;
==== Progression vs Protection ====&lt;br /&gt;
The same materials which are used to craft the special Anvils which let you unlock new tiers in material progression are the same materials which you need to forge armor and weapons to defend yourself and your community. Because of this, you need to make a choice as a leader: Do you use the ingots you have now for weapons and armor to protect yourself from other groups, or do you use those ingots to make higher tiered anvils to hopefully one day be able to forge even higher tier weapons and armor. If at any point you have the material edge over other communities around the map, it may be better to invest resources into weapons and armor to launch a preemptive strike while you have the technological advantage instead of continuing to invest in new anvils. Remember: you can be attacked at any time. The other groups do not need a good roleplay reason to attack you first. Sometimes offensive is the best defense. If you have peaceful relations with other communities, it may be best to continue progressing to increasing your productive potential. The choice is yours, but make sure you balance progression and protection, because invest too much in protection at the wrong time, and you&#039;ll fall behind other groups. Invest too much in progression at the wrong time, and you could be scattered into the wind and have to start from square one.&lt;br /&gt;
&lt;br /&gt;
==== Beauty vs Utility ====&lt;br /&gt;
People love making beautiful builds for fun in Minecraft. This game gives players a lot of freedom in how they can create. In this event beautiful builds also serve a practical purpose. Having the nicest looking town makes it more attractive to players. There will be many times when communities collapse and groups of players will have to migrate. If you&#039;re community has beautiful builds, it gives these migrating players confidence that your town has their stuff together and could be a nice group to join. It also gives pride to the players in your own community. Humans naturally enjoy aesthetic beauty and will be more willing to stay in a town that looks good. On the other hand, spending a lot of time building will slow down production in other areas such as mining, which could possibly open up your town to the risk of being invaded if you can&#039;t keep up technologically. Communities which build with utility first will have more time to spend digging up ores and expanding farms. Its up to you as a leader to balance the beauty of your buildings with the utility of your buildings in order to avoid falling behind or losing out on new players.&lt;br /&gt;
&lt;br /&gt;
=== Diplomacy and War ===&lt;br /&gt;
In an experiment where nations do not need admin permission to go to war an attack could come at any time, even from groups who you thought were your ally. When analyzing the threats that other groups pose to your community, always analyze the situation through the lens of power. Even if you have nominally good relations with another group, or believe that the leader of another group is a good person, always be prepared for a quick evacuation and make plans concerning what to do in an attack such as: What spot in the town do we rally to if we&#039;re under attack? If we flee, where will we group back up at? Etc. Always bear in mind the balance of power of the nations around you, and make sure that you have adequate treaties and agreements with neighbors in the case of an attack.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== When to Fight and When to Flee? ====&lt;br /&gt;
Combat in this experiment is risky, especially if your community is unable to revive people. Before entering combat, its best to weigh your odds of victory. If you think there&#039;s an above average chance that you may not win a battle, DO NOT FIGHT. Only ever take battles where YOU have the advantage, if it can be helped.&lt;br /&gt;
&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Template:Hatnote/styles.css&amp;diff=374</id>
		<title>Template:Hatnote/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Template:Hatnote/styles.css&amp;diff=374"/>
		<updated>2025-10-16T22:12:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;/* {{pp|small=y}} */ .hatnote { 	font-style: italic; }  /* Limit structure CSS to divs because of Module:Hatnote inline */ div.hatnote { 	/* @noflip */ 	padding-left: 1.6em; 	margin-bottom: 0.5em; }  .hatnote i { 	font-style: normal; }  /* The templatestyles element inserts a link element before hatnotes.  * TODO: Remove link if/when WMF resolves T200206 */ .hatnote + link + .hatnote { 	margin-top: -0.5em; }  @media print { 	body.ns-0 .hatnote { 		display: none !impo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.hatnote {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Limit structure CSS to divs because of [[Module:Hatnote inline]] */&lt;br /&gt;
div.hatnote {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	margin-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hatnote i {&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The templatestyles element inserts a link element before hatnotes.&lt;br /&gt;
 * TODO: Remove link if/when WMF resolves T200206 */&lt;br /&gt;
.hatnote + link + .hatnote {&lt;br /&gt;
	margin-top: -0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	body.ns-0 .hatnote {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Module:Hatnote/styles.css&amp;diff=373</id>
		<title>Module:Hatnote/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Module:Hatnote/styles.css&amp;diff=373"/>
		<updated>2025-10-16T22:12:47Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;/* {{pp|small=y}} */ .hatnote { 	font-style: italic; }  /* Limit structure CSS to divs because of Module:Hatnote inline */ div.hatnote { 	/* @noflip */ 	padding-left: 1.6em; 	margin-bottom: 0.5em; }  .hatnote i { 	font-style: normal; }  /* The templatestyles element inserts a link element before hatnotes.  * TODO: Remove link if/when WMF resolves T200206 */ .hatnote + link + .hatnote { 	margin-top: -0.5em; }  @media print { 	body.ns-0 .hatnote { 		display: none !impo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.hatnote {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Limit structure CSS to divs because of [[Module:Hatnote inline]] */&lt;br /&gt;
div.hatnote {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	margin-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hatnote i {&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The templatestyles element inserts a link element before hatnotes.&lt;br /&gt;
 * TODO: Remove link if/when WMF resolves T200206 */&lt;br /&gt;
.hatnote + link + .hatnote {&lt;br /&gt;
	margin-top: -0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	body.ns-0 .hatnote {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Template:Hatnote&amp;diff=372</id>
		<title>Template:Hatnote</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Template:Hatnote&amp;diff=372"/>
		<updated>2025-10-16T22:12:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;templatestyles src=&amp;quot;Hatnote/styles.css&amp;quot;/&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;hatnote {{{extraclasses|{{{class|}}}}}}{{#if:{{{noborder|}}}|hatnote.noborder}}&amp;quot;&amp;gt;{{{1|{{{text}}}}}}&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt; {{documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Hatnote/styles.css&amp;quot;/&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;hatnote {{{extraclasses|{{{class|}}}}}}{{#if:{{{noborder|}}}|hatnote.noborder}}&amp;quot;&amp;gt;{{{1|{{{text}}}}}}&amp;lt;/div&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>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=370</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=370"/>
		<updated>2025-10-16T22:10:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Basics ==&lt;br /&gt;
[[File:The boys.png|thumb|Rift Team aura farming with the new gear]]&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event. This experiment is NOT like a normal Minecraft civilizations event. The only rules that are enforced by admins are:&lt;br /&gt;
&lt;br /&gt;
*No cheating&lt;br /&gt;
*No harassment&lt;br /&gt;
*No racism/sexism&lt;br /&gt;
*No combat logging&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a ban.&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
This experiment is a challenge. Players who enjoy problem solving and overcoming challenges will enjoy this event.&lt;br /&gt;
Unlike other Minecraft civilization events, actions such as RDM and Griefing are not against the rules. Although admins do not enforce rules against these actions, players are encouraged to enforce these rules themselves in order to protect themselves and their builds. In order to empower players to do this: &#039;&#039;&#039;[[Revive System|Death is (almost) permanent.]]&#039;&#039;&#039; &lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviving a downed player. You can cancel the revive by crouching. When a player starts reviving a downed player, the death timer pauses. If a player leaves the game while downed, they will instantly die.&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time (this is currently bugged and will NOT work). Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart. This new system makes health much more precarious, and makes access to water sources much more important (without having to add an annoying thirst system).&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina. Players in the early game found a lot of success by grouping up and working in shifts. While half of the team rests and regains stamina, the other half is mining/building. Once a group of players establishes a good source of food, they&#039;ll be able to trade food for time. Instead of waiting for their stamina to regen, they can instead keep performing actions until it becomes a food cost, then quickly eat and keep working without having to take a break. The stamina system acts as a food cost for actions while giving unestablished players the ability to perform tasks and survive without starving. We recommend that groups of players focus hard on establishing large sources of food in order to overcome the limitations of stamina.&lt;br /&gt;
&lt;br /&gt;
=== Progression ===&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Material !! Utility Block !! Required&lt;br /&gt;
|-&lt;br /&gt;
| Wood || Crafting Table || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Stone || Crafting Table || Wood&lt;br /&gt;
|-&lt;br /&gt;
| Bronze|| Copper Anvil || Stone&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Crafting Table || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Steel || Iron Anvil || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Diamond || Smithing Table || Steel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ores ===&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. There are above ground hints that will tell players where these localized deposits of ores are. Look for rock formations that have high counts of &amp;quot;hint&amp;quot; blocks (described in the table below) to figure out where to go looking! Make sure to mine out a decent area around where you found an ore to follow the vein until its exhausted.&lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
[[File:Vein Example.png|thumb|Example of how Veins are generated.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Ore !! Hints &lt;br /&gt;
|-&lt;br /&gt;
| Copper || Diorite&lt;br /&gt;
|-&lt;br /&gt;
| Quartz || Calcite&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Andesite&lt;br /&gt;
|-&lt;br /&gt;
| Diamond/Coal || Granite&lt;br /&gt;
|-&lt;br /&gt;
| Gold || Messa&lt;br /&gt;
|-&lt;br /&gt;
| Coal Sheets|| Fossils&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s very important to maintain control over localized deposits of ores in the same way that it&#039;s important to maintain control over your biome. Keeping other groups of players out of ore deposits gives your community trade leverage to be able to import much needed crops and blocks from other biomes.&lt;br /&gt;
&lt;br /&gt;
=== Enchantments ===&lt;br /&gt;
Enchantments no longer work like they do in vanilla. There is no enchantment table. Instead, enchantments take place in a [[Diamond Anvil]]. Enchanting requires a piece of the material of what you&#039;re enchanting. For example, if you combine a Steel Sword with a Steel Ingot in a Diamond Anvil, you will enchant the sword with Sharpness 1. Enchantments depend on the [[List of Enchantments|item you are enchanting]]. Swords get Sharpness 1, Armor gets Protection 1, etc. You can improve the level of enchantment by combining two of the same enchanted gear in a crafting table (2 Sharpness 1 swords makes 1 Sharpness 2 sword).&lt;br /&gt;
&lt;br /&gt;
=== Fishing ===&lt;br /&gt;
Fishing now takes stamina, but more importantly fishing now requires [[Bait|bait]]. Bait is made from any raw meat in a crafting table. If you fish without bait you only get junk items. The list of junk items you can fish up has been changed to not include enchanted books.&lt;br /&gt;
&lt;br /&gt;
=== Animal Breeding ===&lt;br /&gt;
Animals require more crops to enter love mode! For example, cows and sheep now require 8x Wheat instead of only 1x. In order to make animals enter love mode, you need to have at least the required quantity of crop. For the rest of the animals, they require 16x of their normal crop (pigs require 16x carrots, chickens 16x seeds, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Crafting Recipes ===&lt;br /&gt;
Mobs no longer drop loot, therefore we&#039;ve added quite a few recipes for things which can&#039;t be acquired by their usual methods. A list of all the crafting recipes you&#039;ll need can be found [[List of Crafting Recipes|here]].&lt;br /&gt;
&lt;br /&gt;
== Tips for Leaders ==&lt;br /&gt;
&lt;br /&gt;
Regardless of your goals going into the event, the time may come when you have to step up as a leader in your community. Leadership is a tough skill to master, and it will take time to understand how to balance the multiple conflicting interests and personal goals of all of the people in your community. This section is not meant to guide players into any particular leadership style, this section is primarily to point out past pitfalls and mistakes of leaders in past experiments so that players can learn from these mistakes and hit the ground running faster than if they had to figure out everything themselves. We&#039;ll briefly lay out some common mistakes and challenges here, starting with the most common pitfall we&#039;ve seen in the past: Larping.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Larping ===&lt;br /&gt;
Larping has been the downfall of many groups, especially in the early game. What we refer to as &amp;quot;larping&amp;quot; is the establishment of political and economic systems for aesthetics sake, or because of a real world affinity for these systems. Because players are people who live in the real world, they will bring real life conceptions about governance and economics with them, and will find it natural to set up systems in the game world that they are familiar with from real life. However, these systems are NOT designed to be implemented in Minecraft, and commonly lead to the collapse of the communities who attempt to implement them 1:1.&lt;br /&gt;
&lt;br /&gt;
In order to avoid a collapse due to a &amp;quot;larp&amp;quot; system, as a leader you should ask yourself: What are the immediate problems of my community? (Are we facing a food shortage? Do we need protection from other groups? Are players getting bored in our community?). The political and economic systems you adopt should directly solve these problems.&lt;br /&gt;
&lt;br /&gt;
=== Balancing Contradictions ===&lt;br /&gt;
There are many contradictions that you&#039;ll have to deal with and balance as a leader. The biggest contradiction will most likely be: the needs of the group vs the enjoyment of the players. There are many many more than just this contradiction, but we&#039;ll look into it and a few more here to give leaders an idea of things they&#039;ll have to pay attention to and balance.&lt;br /&gt;
&lt;br /&gt;
==== Enjoyment vs Necessity ====&lt;br /&gt;
There are many boring jobs that are very important to the survival of the group such as: Farming, Mining, Organizing Storage, etc. Some members of your group will find these actions fun, and some will find them very dull. Its up to you as a leader to balance these needs. After all, the players in your community could very well leave your community to join another group, or just leave the game altogether if they&#039;re not having fun. Entertainment is a big need for societies in Minecraft, just as they are in the real world (however, not for the same reasons). Since Minecraft is a game, if people aren&#039;t enjoying their time in your group, they have the power to simply leave. On the other hand, if your players are taking time to do fun stuff, they&#039;re not doing the boring tasks that keep the society functioning. Its up to you as a leader to balance this contradiction and to not fall too far to one side or else your community will collapse.&lt;br /&gt;
&lt;br /&gt;
==== Progression vs Protection ====&lt;br /&gt;
The same materials which are used to craft the special Anvils which let you unlock new tiers in material progression are the same materials which you need to forge armor and weapons to defend yourself and your community. Because of this, you need to make a choice as a leader: Do you use the ingots you have now for weapons and armor to protect yourself from other groups, or do you use those ingots to make higher tiered anvils to hopefully one day be able to forge even higher tier weapons and armor. If at any point you have the material edge over other communities around the map, it may be better to invest resources into weapons and armor to launch a preemptive strike while you have the technological advantage instead of continuing to invest in new anvils. Remember: you can be attacked at any time. The other groups do not need a good roleplay reason to attack you first. Sometimes offensive is the best defense. If you have peaceful relations with other communities, it may be best to continue progressing to increasing your productive potential. The choice is yours, but make sure you balance progression and protection, because invest too much in protection at the wrong time, and you&#039;ll fall behind other groups. Invest too much in progression at the wrong time, and you could be scattered into the wind and have to start from square one.&lt;br /&gt;
&lt;br /&gt;
==== Beauty vs Utility ====&lt;br /&gt;
People love making beautiful builds for fun in Minecraft. This game gives players a lot of freedom in how they can create. In this event beautiful builds also serve a practical purpose. Having the nicest looking town makes it more attractive to players. There will be many times when communities collapse and groups of players will have to migrate. If you&#039;re community has beautiful builds, it gives these migrating players confidence that your town has their stuff together and could be a nice group to join. It also gives pride to the players in your own community. Humans naturally enjoy aesthetic beauty and will be more willing to stay in a town that looks good. On the other hand, spending a lot of time building will slow down production in other areas such as mining, which could possibly open up your town to the risk of being invaded if you can&#039;t keep up technologically. Communities which build with utility first will have more time to spend digging up ores and expanding farms. Its up to you as a leader to balance the beauty of your buildings with the utility of your buildings in order to avoid falling behind or losing out on new players.&lt;br /&gt;
&lt;br /&gt;
=== Diplomacy and War ===&lt;br /&gt;
In an experiment where nations do not need admin permission to go to war an attack could come at any time, even from groups who you thought were your ally. When analyzing the threats that other groups pose to your community, always analyze the situation through the lens of power. Even if you have nominally good relations with another group, or believe that the leader of another group is a good person, always be prepared for a quick evacuation and make plans concerning what to do in an attack such as: What spot in the town do we rally to if we&#039;re under attack? If we flee, where will we group back up at? Etc. Always bear in mind the balance of power of the nations around you, and make sure that you have adequate treaties and agreements with neighbors in the case of an attack.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== When to Fight and When to Flee? ====&lt;br /&gt;
Combat in this experiment is risky, especially if your community is unable to revive people. Before entering combat, its best to weigh your odds of victory. If you think there&#039;s an above average chance that you may not win a battle, DO NOT FIGHT. Only ever take battles where YOU have the advantage, if it can be helped.&lt;br /&gt;
&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Template:Main&amp;diff=369</id>
		<title>Template:Main</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Template:Main&amp;diff=369"/>
		<updated>2025-10-16T22:10:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;noinclude&amp;gt; &amp;lt;languages/&amp;gt; &amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{hatnote|extraclasses=relarticle mainarticle|1={{#ifeq:{{SUBJECTSPACE}}|Category |{{#if:{{{2|}}}   |&amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt; The main pages for this category are&amp;lt;/translate&amp;gt;   |&amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt; The main page for this category is&amp;lt;/translate&amp;gt;   }} |{{#if:{{{2|}}}   |&amp;lt;translate&amp;gt;&amp;lt;!--T:13--...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{hatnote|extraclasses=relarticle mainarticle|1={{#ifeq:{{SUBJECTSPACE}}|Category&lt;br /&gt;
|{{#if:{{{2|}}}&lt;br /&gt;
  |&amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt; The main pages for this [[&amp;lt;tvar name=cats-help&amp;gt;Special:MyLanguage/Help:Categories&amp;lt;/tvar&amp;gt;|category]] are&amp;lt;/translate&amp;gt;&lt;br /&gt;
  |&amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt; The main page for this [[&amp;lt;tvar name=cats-help&amp;gt;Special:MyLanguage/Help:Categories&amp;lt;/tvar&amp;gt;|category]] is&amp;lt;/translate&amp;gt;&lt;br /&gt;
  }}&lt;br /&gt;
|{{#if:{{{2|}}}&lt;br /&gt;
  |&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt; Main pages:&amp;lt;/translate&amp;gt;&lt;br /&gt;
  |&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt; Main page:&amp;lt;/translate&amp;gt;&lt;br /&gt;
  }}&lt;br /&gt;
}} {{ll|{{{1|{{PAGENAME:{{translatable}}}}}}}|{{{l1|{{{1|{{PAGENAME:{{translatable}}}}}}}}}}}}{{#if:{{{2| }}}&lt;br /&gt;
 |{{#if:{{{3|}}}|&amp;lt;nowiki/&amp;gt;{{int|comma-separator}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;|&amp;lt;nowiki/&amp;gt;{{int|and}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;}}{{ll|{{{2}}}|{{{l2|{{{2}}}}}}}}}}{{#if:{{{3|}}}&lt;br /&gt;
 |{{#if:{{{4|}}}|&amp;lt;nowiki/&amp;gt;{{int|comma-separator}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;|&amp;lt;nowiki/&amp;gt;{{int|and}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;}}{{ll|{{{3}}}|{{{l3|{{{3}}}}}}}}}}{{#if:{{{4|}}}&lt;br /&gt;
 |{{#if:{{{5|}}}|&amp;lt;nowiki/&amp;gt;{{int|comma-separator}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;|&amp;lt;nowiki/&amp;gt;{{int|and}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;}}{{ll|{{{4}}}|{{{l4|{{{4}}}}}}}}}}{{#if:{{{5|}}}&lt;br /&gt;
 |{{#if:{{{6|}}}|&amp;lt;nowiki/&amp;gt;{{int|comma-separator}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;|&amp;lt;nowiki/&amp;gt;{{int|and}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;}}{{ll|{{{5}}}|{{{l5|{{{5}}}}}}}}}}{{#if:{{{6|}}}&lt;br /&gt;
 |{{#if:{{{7|}}}|&amp;lt;nowiki/&amp;gt;{{int|comma-separator}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;|&amp;lt;nowiki/&amp;gt;{{int|and}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;}}{{ll|{{{6}}}|{{{l6|{{{6}}}}}}}}}}{{#if:{{{7|}}}&lt;br /&gt;
 |{{#if:{{{8|}}}|&amp;lt;nowiki/&amp;gt;{{int|comma-separator}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;|&amp;lt;nowiki/&amp;gt;{{int|and}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;}}{{ll|{{{7}}}|{{{l7|{{{7}}}}}}}}}}{{#if:{{{8|}}}&lt;br /&gt;
 |{{#if:{{{9|}}}|&amp;lt;nowiki/&amp;gt;{{int|comma-separator}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;|&amp;lt;nowiki/&amp;gt;{{int|and}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;}}{{ll|{{{8}}}|{{{l8|{{{8}}}}}}}}}}{{#if:{{{9|}}}&lt;br /&gt;
 |{{#if:{{{10|}}}|&amp;lt;nowiki/&amp;gt;{{int|comma-separator}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;|&amp;lt;nowiki/&amp;gt;{{int|and}}{{int|word-separator}}&amp;lt;nowiki/&amp;gt;}}{{ll|{{{9}}}|{{{l9|{{{9}}}}}}}}}}{{#if:{{{10|}}}&lt;br /&gt;
 |&amp;lt;nowiki/&amp;gt;{{int|and}}{{int|word-separator}}{{ll|{{{10}}}|{{{l10|{{{10}}}}}}}}}}{{#if:{{{11| }}}|&amp;amp;#32; &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt; (too many parameters in &amp;lt;tvar name=1&amp;gt;{{((}}{{ll|Template:main}}{{))}}&amp;lt;/tvar&amp;gt;)&amp;lt;/translate&amp;gt;}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation|content=&lt;br /&gt;
{{Hatnote templates}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Examples == &amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Main}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Main}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Main|Article 1}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Main|Article 1}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Main|Article 1|Article 2|Article Something#3}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Main|Article 1|Article 2|Article Something#3}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== TemplateData == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Template:Main/doc}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Hatnote templates{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=368</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=368"/>
		<updated>2025-10-16T22:10:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event.&lt;br /&gt;
&lt;br /&gt;
== The Basics ==&lt;br /&gt;
[[File:The boys.png|thumb|Rift Team aura farming with the new gear]]&lt;br /&gt;
Welcome to Joyful’s Civilization Experiment. If you are reading this, you are probably about to play in the second TEST server. While everything isn&#039;t set up exactly how it will be in the event, many things will be similar. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event. The only rules that are enforced by admins are:&lt;br /&gt;
&lt;br /&gt;
*No cheating&lt;br /&gt;
*No harassment&lt;br /&gt;
*No racism/sexism&lt;br /&gt;
*No combat logging (this is temporary until we finish a custom plugin)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a ban.&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
This experiment is a challenge. Players who enjoy problem solving and overcoming challenges will enjoy this event.&lt;br /&gt;
Unlike other Minecraft civilization events, actions such as RDM and Griefing are not against the rules. Although admins do not enforce rules against these actions, players are encouraged to enforce these rules themselves in order to protect themselves and their builds. In order to empower players to do this: &#039;&#039;&#039;[[Revive System|Death is (almost) permanent.]]&#039;&#039;&#039; &lt;br /&gt;
=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviving a downed player. You can cancel the revive by crouching. When a player starts reviving a downed player, the death timer pauses. If a player leaves the game while downed, they will instantly die.&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time (this is currently bugged and will NOT work). Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart. This new system makes health much more precarious, and makes access to water sources much more important (without having to add an annoying thirst system).&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina. Players in the early game found a lot of success by grouping up and working in shifts. While half of the team rests and regains stamina, the other half is mining/building. Once a group of players establishes a good source of food, they&#039;ll be able to trade food for time. Instead of waiting for their stamina to regen, they can instead keep performing actions until it becomes a food cost, then quickly eat and keep working without having to take a break. The stamina system acts as a food cost for actions while giving unestablished players the ability to perform tasks and survive without starving. We recommend that groups of players focus hard on establishing large sources of food in order to overcome the limitations of stamina.&lt;br /&gt;
&lt;br /&gt;
=== Progression ===&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Material !! Utility Block !! Required&lt;br /&gt;
|-&lt;br /&gt;
| Wood || Crafting Table || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Stone || Crafting Table || Wood&lt;br /&gt;
|-&lt;br /&gt;
| Bronze|| Copper Anvil || Stone&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Crafting Table || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Steel || Iron Anvil || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Diamond || Smithing Table || Steel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ores ===&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. There are above ground hints that will tell players where these localized deposits of ores are. Look for rock formations that have high counts of &amp;quot;hint&amp;quot; blocks (described in the table below) to figure out where to go looking! Make sure to mine out a decent area around where you found an ore to follow the vein until its exhausted.&lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
[[File:Vein Example.png|thumb|Example of how Veins are generated.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Ore !! Hints &lt;br /&gt;
|-&lt;br /&gt;
| Copper || Diorite&lt;br /&gt;
|-&lt;br /&gt;
| Quartz || Calcite&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Andesite&lt;br /&gt;
|-&lt;br /&gt;
| Diamond/Coal || Granite&lt;br /&gt;
|-&lt;br /&gt;
| Gold || Messa&lt;br /&gt;
|-&lt;br /&gt;
| Coal Sheets|| Fossils&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s very important to maintain control over localized deposits of ores in the same way that it&#039;s important to maintain control over your biome. Keeping other groups of players out of ore deposits gives your community trade leverage to be able to import much needed crops and blocks from other biomes.&lt;br /&gt;
&lt;br /&gt;
=== Enchantments ===&lt;br /&gt;
Enchantments no longer work like they do in vanilla. There is no enchantment table. Instead, enchantments take place in a [[Diamond Anvil]]. Enchanting requires a piece of the material of what you&#039;re enchanting. For example, if you combine a Steel Sword with a Steel Ingot in a Diamond Anvil, you will enchant the sword with Sharpness 1. Enchantments depend on the [[List of Enchantments|item you are enchanting]]. Swords get Sharpness 1, Armor gets Protection 1, etc. You can improve the level of enchantment by combining two of the same enchanted gear in a crafting table (2 Sharpness 1 swords makes 1 Sharpness 2 sword).&lt;br /&gt;
&lt;br /&gt;
=== Fishing ===&lt;br /&gt;
Fishing now takes stamina, but more importantly fishing now requires [[Bait|bait]]. Bait is made from any raw meat in a crafting table. If you fish without bait you only get junk items. The list of junk items you can fish up has been changed to not include enchanted books.&lt;br /&gt;
&lt;br /&gt;
=== Animal Breeding ===&lt;br /&gt;
Animals require more crops to enter love mode! For example, cows and sheep now require 8x Wheat instead of only 1x. In order to make animals enter love mode, you need to have at least the required quantity of crop. For the rest of the animals, they require 16x of their normal crop (pigs require 16x carrots, chickens 16x seeds, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Crafting Recipes ===&lt;br /&gt;
Mobs no longer drop loot, therefore we&#039;ve added quite a few recipes for things which can&#039;t be acquired by their usual methods. A list of all the crafting recipes you&#039;ll need can be found [[List of Crafting Recipes|here]].&lt;br /&gt;
&lt;br /&gt;
== Tips for Leaders ==&lt;br /&gt;
&lt;br /&gt;
Regardless of your goals going into the event, the time may come when you have to step up as a leader in your community. Leadership is a tough skill to master, and it will take time to understand how to balance the multiple conflicting interests and personal goals of all of the people in your community. This section is not meant to guide players into any particular leadership style, this section is primarily to point out past pitfalls and mistakes of leaders in past experiments so that players can learn from these mistakes and hit the ground running faster than if they had to figure out everything themselves. We&#039;ll briefly lay out some common mistakes and challenges here, starting with the most common pitfall we&#039;ve seen in the past: Larping.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Larping ===&lt;br /&gt;
Larping has been the downfall of many groups, especially in the early game. What we refer to as &amp;quot;larping&amp;quot; is the establishment of political and economic systems for aesthetics sake, or because of a real world affinity for these systems. Because players are people who live in the real world, they will bring real life conceptions about governance and economics with them, and will find it natural to set up systems in the game world that they are familiar with from real life. However, these systems are NOT designed to be implemented in Minecraft, and commonly lead to the collapse of the communities who attempt to implement them 1:1.&lt;br /&gt;
&lt;br /&gt;
In order to avoid a collapse due to a &amp;quot;larp&amp;quot; system, as a leader you should ask yourself: What are the immediate problems of my community? (Are we facing a food shortage? Do we need protection from other groups? Are players getting bored in our community?). The political and economic systems you adopt should directly solve these problems.&lt;br /&gt;
&lt;br /&gt;
=== Balancing Contradictions ===&lt;br /&gt;
There are many contradictions that you&#039;ll have to deal with and balance as a leader. The biggest contradiction will most likely be: the needs of the group vs the enjoyment of the players. There are many many more than just this contradiction, but we&#039;ll look into it and a few more here to give leaders an idea of things they&#039;ll have to pay attention to and balance.&lt;br /&gt;
&lt;br /&gt;
==== Enjoyment vs Necessity ====&lt;br /&gt;
There are many boring jobs that are very important to the survival of the group such as: Farming, Mining, Organizing Storage, etc. Some members of your group will find these actions fun, and some will find them very dull. Its up to you as a leader to balance these needs. After all, the players in your community could very well leave your community to join another group, or just leave the game altogether if they&#039;re not having fun. Entertainment is a big need for societies in Minecraft, just as they are in the real world (however, not for the same reasons). Since Minecraft is a game, if people aren&#039;t enjoying their time in your group, they have the power to simply leave. On the other hand, if your players are taking time to do fun stuff, they&#039;re not doing the boring tasks that keep the society functioning. Its up to you as a leader to balance this contradiction and to not fall too far to one side or else your community will collapse.&lt;br /&gt;
&lt;br /&gt;
==== Progression vs Protection ====&lt;br /&gt;
The same materials which are used to craft the special Anvils which let you unlock new tiers in material progression are the same materials which you need to forge armor and weapons to defend yourself and your community. Because of this, you need to make a choice as a leader: Do you use the ingots you have now for weapons and armor to protect yourself from other groups, or do you use those ingots to make higher tiered anvils to hopefully one day be able to forge even higher tier weapons and armor. If at any point you have the material edge over other communities around the map, it may be better to invest resources into weapons and armor to launch a preemptive strike while you have the technological advantage instead of continuing to invest in new anvils. Remember: you can be attacked at any time. The other groups do not need a good roleplay reason to attack you first. Sometimes offensive is the best defense. If you have peaceful relations with other communities, it may be best to continue progressing to increasing your productive potential. The choice is yours, but make sure you balance progression and protection, because invest too much in protection at the wrong time, and you&#039;ll fall behind other groups. Invest too much in progression at the wrong time, and you could be scattered into the wind and have to start from square one.&lt;br /&gt;
&lt;br /&gt;
==== Beauty vs Utility ====&lt;br /&gt;
People love making beautiful builds for fun in Minecraft. This game gives players a lot of freedom in how they can create. In this event beautiful builds also serve a practical purpose. Having the nicest looking town makes it more attractive to players. There will be many times when communities collapse and groups of players will have to migrate. If you&#039;re community has beautiful builds, it gives these migrating players confidence that your town has their stuff together and could be a nice group to join. It also gives pride to the players in your own community. Humans naturally enjoy aesthetic beauty and will be more willing to stay in a town that looks good. On the other hand, spending a lot of time building will slow down production in other areas such as mining, which could possibly open up your town to the risk of being invaded if you can&#039;t keep up technologically. Communities which build with utility first will have more time to spend digging up ores and expanding farms. Its up to you as a leader to balance the beauty of your buildings with the utility of your buildings in order to avoid falling behind or losing out on new players.&lt;br /&gt;
&lt;br /&gt;
=== Diplomacy and War ===&lt;br /&gt;
In an experiment where nations do not need admin permission to go to war an attack could come at any time, even from groups who you thought were your ally. When analyzing the threats that other groups pose to your community, always analyze the situation through the lens of power. Even if you have nominally good relations with another group, or believe that the leader of another group is a good person, always be prepared for a quick evacuation and make plans concerning what to do in an attack such as: What spot in the town do we rally to if we&#039;re under attack? If we flee, where will we group back up at? Etc. Always bear in mind the balance of power of the nations around you, and make sure that you have adequate treaties and agreements with neighbors in the case of an attack.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== When to Fight and When to Flee? ====&lt;br /&gt;
Combat in this experiment is risky, especially if your community is unable to revive people. Before entering combat, its best to weigh your odds of victory. If you think there&#039;s an above average chance that you may not win a battle, DO NOT FIGHT. Only ever take battles where YOU have the advantage, if it can be helped.&lt;br /&gt;
&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=366</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=366"/>
		<updated>2025-10-16T22:08:26Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Quick Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event.&lt;br /&gt;
&lt;br /&gt;
= Rules =&lt;br /&gt;
* No cheating&lt;br /&gt;
* No harassment&lt;br /&gt;
* No racism/sexism&lt;br /&gt;
* No combat logging&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a community-wide ban.&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
The event will begin on Saturday November 1st at 12:00 Eastern Standard Time. The event will then follow every following weekend pending announced changes at 12:00 Eastern Daylight Time.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=365</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=365"/>
		<updated>2025-10-16T22:08:04Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Quick Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event.&lt;br /&gt;
&lt;br /&gt;
{{main|SNC-Lavalin Kerala hydroelectric scandal}}&lt;br /&gt;
&lt;br /&gt;
= Rules =&lt;br /&gt;
* No cheating&lt;br /&gt;
* No harassment&lt;br /&gt;
* No racism/sexism&lt;br /&gt;
* No combat logging&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a community-wide ban.&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
The event will begin on Saturday November 1st at 12:00 Eastern Standard Time. The event will then follow every following weekend pending announced changes at 12:00 Eastern Daylight Time.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=364</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=364"/>
		<updated>2025-10-16T22:05:55Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Main Page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Quick Links =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event.&lt;br /&gt;
&lt;br /&gt;
= Rules =&lt;br /&gt;
* No cheating&lt;br /&gt;
* No harassment&lt;br /&gt;
* No racism/sexism&lt;br /&gt;
* No combat logging&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a community-wide ban.&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
The event will begin on Saturday November 1st at 12:00 Eastern Standard Time. The event will then follow every following weekend pending announced changes at 12:00 Eastern Daylight Time.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Map_Generation&amp;diff=363</id>
		<title>Map Generation</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Map_Generation&amp;diff=363"/>
		<updated>2025-10-16T22:01:31Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ores =&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. There are above ground hints that will tell players where these localized deposits of ores are. Look for rock formations that have high counts of &amp;quot;hint&amp;quot; blocks (described in the table below) to figure out where to go looking! Make sure to mine out a decent area around where you found an ore to follow the vein until its exhausted.&lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
[[File:Vein Example.png|thumb|Example of how Veins are generated.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Ore !! Hints &lt;br /&gt;
|-&lt;br /&gt;
| Copper || Diorite&lt;br /&gt;
|-&lt;br /&gt;
| Quartz || Calcite&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Andesite&lt;br /&gt;
|-&lt;br /&gt;
| Diamond/Coal || Granite&lt;br /&gt;
|-&lt;br /&gt;
| Gold || Messa&lt;br /&gt;
|-&lt;br /&gt;
| Coal Sheets|| Fossils&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s very important to maintain control over localized deposits of ores in the same way that it&#039;s important to maintain control over your biome. Keeping other groups of players out of ore deposits gives your community trade leverage to be able to import much needed crops and blocks from other biomes.&lt;br /&gt;
&lt;br /&gt;
= Caves =&lt;br /&gt;
Caves outside of specific ore deposits will have very few if any ores. Finding ores in this event will take extensive searching.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Map_Generation&amp;diff=362</id>
		<title>Map Generation</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Map_Generation&amp;diff=362"/>
		<updated>2025-10-16T21:59:12Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;=== Ores === Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. There are above ground hints that will tell players where these localized deposits of ores are....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Ores ===&lt;br /&gt;
Ores do not spawn like they do in vanilla, they are much much rarer. Caves will RARELY have ores exposed. Ores are scattered by default and will require extensive strip mining to find. However, localized deposits exist in specific areas where ore spawn in veins (which are interspersed with &amp;quot;vein&amp;quot; blocks such as blackstone and smooth basalt) and are easier to find. There are above ground hints that will tell players where these localized deposits of ores are. Look for rock formations that have high counts of &amp;quot;hint&amp;quot; blocks (described in the table below) to figure out where to go looking! Make sure to mine out a decent area around where you found an ore to follow the vein until its exhausted.&lt;br /&gt;
&lt;br /&gt;
Coal Sheets generate in a similar way but instead of winding veins they spawn in large flat sheets at the same Y-Level. They can be followed much easier then typical veins.&lt;br /&gt;
[[File:Vein Example.png|thumb|Example of how Veins are generated.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Ore !! Hints &lt;br /&gt;
|-&lt;br /&gt;
| Copper || Diorite&lt;br /&gt;
|-&lt;br /&gt;
| Quartz || Calcite&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Andesite&lt;br /&gt;
|-&lt;br /&gt;
| Diamond/Coal || Granite&lt;br /&gt;
|-&lt;br /&gt;
| Gold || Messa&lt;br /&gt;
|-&lt;br /&gt;
| Coal Sheets|| Fossils&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It&#039;s very important to maintain control over localized deposits of ores in the same way that it&#039;s important to maintain control over your biome. Keeping other groups of players out of ore deposits gives your community trade leverage to be able to import much needed crops and blocks from other biomes.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Tips_And_Tricks&amp;diff=361</id>
		<title>Tips And Tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Tips_And_Tricks&amp;diff=361"/>
		<updated>2025-10-16T21:54:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;== Tips for Leaders ==  Regardless of your goals going into the event, the time may come when you have to step up as a leader in your community. Leadership is a tough skill to master, and it will take time to understand how to balance the multiple conflicting interests and personal goals of all of the people in your community. This section is not meant to guide players into any particular leadership style, this section is primarily to point out past pitfalls and mistakes...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tips for Leaders ==&lt;br /&gt;
&lt;br /&gt;
Regardless of your goals going into the event, the time may come when you have to step up as a leader in your community. Leadership is a tough skill to master, and it will take time to understand how to balance the multiple conflicting interests and personal goals of all of the people in your community. This section is not meant to guide players into any particular leadership style, this section is primarily to point out past pitfalls and mistakes of leaders in past experiments so that players can learn from these mistakes and hit the ground running faster than if they had to figure out everything themselves. We&#039;ll briefly lay out some common mistakes and challenges here, starting with the most common pitfall we&#039;ve seen in the past: Larping.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Larping ===&lt;br /&gt;
Larping has been the downfall of many groups, especially in the early game. What we refer to as &amp;quot;larping&amp;quot; is the establishment of political and economic systems for aesthetics sake, or because of a real world affinity for these systems. Because players are people who live in the real world, they will bring real life conceptions about governance and economics with them, and will find it natural to set up systems in the game world that they are familiar with from real life. However, these systems are NOT designed to be implemented in Minecraft, and commonly lead to the collapse of the communities who attempt to implement them 1:1.&lt;br /&gt;
&lt;br /&gt;
In order to avoid a collapse due to a &amp;quot;larp&amp;quot; system, as a leader you should ask yourself: What are the immediate problems of my community? (Are we facing a food shortage? Do we need protection from other groups? Are players getting bored in our community?). The political and economic systems you adopt should directly solve these problems.&lt;br /&gt;
&lt;br /&gt;
=== Balancing Contradictions ===&lt;br /&gt;
There are many contradictions that you&#039;ll have to deal with and balance as a leader. The biggest contradiction will most likely be: the needs of the group vs the enjoyment of the players. There are many many more than just this contradiction, but we&#039;ll look into it and a few more here to give leaders an idea of things they&#039;ll have to pay attention to and balance.&lt;br /&gt;
&lt;br /&gt;
==== Enjoyment vs Necessity ====&lt;br /&gt;
There are many boring jobs that are very important to the survival of the group such as: Farming, Mining, Organizing Storage, etc. Some members of your group will find these actions fun, and some will find them very dull. Its up to you as a leader to balance these needs. After all, the players in your community could very well leave your community to join another group, or just leave the game altogether if they&#039;re not having fun. Entertainment is a big need for societies in Minecraft, just as they are in the real world (however, not for the same reasons). Since Minecraft is a game, if people aren&#039;t enjoying their time in your group, they have the power to simply leave. On the other hand, if your players are taking time to do fun stuff, they&#039;re not doing the boring tasks that keep the society functioning. Its up to you as a leader to balance this contradiction and to not fall too far to one side or else your community will collapse.&lt;br /&gt;
&lt;br /&gt;
==== Progression vs Protection ====&lt;br /&gt;
The same materials which are used to craft the special Anvils which let you unlock new tiers in material progression are the same materials which you need to forge armor and weapons to defend yourself and your community. Because of this, you need to make a choice as a leader: Do you use the ingots you have now for weapons and armor to protect yourself from other groups, or do you use those ingots to make higher tiered anvils to hopefully one day be able to forge even higher tier weapons and armor. If at any point you have the material edge over other communities around the map, it may be better to invest resources into weapons and armor to launch a preemptive strike while you have the technological advantage instead of continuing to invest in new anvils. Remember: you can be attacked at any time. The other groups do not need a good roleplay reason to attack you first. Sometimes offensive is the best defense. If you have peaceful relations with other communities, it may be best to continue progressing to increasing your productive potential. The choice is yours, but make sure you balance progression and protection, because invest too much in protection at the wrong time, and you&#039;ll fall behind other groups. Invest too much in progression at the wrong time, and you could be scattered into the wind and have to start from square one.&lt;br /&gt;
&lt;br /&gt;
==== Beauty vs Utility ====&lt;br /&gt;
People love making beautiful builds for fun in Minecraft. This game gives players a lot of freedom in how they can create. In this event beautiful builds also serve a practical purpose. Having the nicest looking town makes it more attractive to players. There will be many times when communities collapse and groups of players will have to migrate. If you&#039;re community has beautiful builds, it gives these migrating players confidence that your town has their stuff together and could be a nice group to join. It also gives pride to the players in your own community. Humans naturally enjoy aesthetic beauty and will be more willing to stay in a town that looks good. On the other hand, spending a lot of time building will slow down production in other areas such as mining, which could possibly open up your town to the risk of being invaded if you can&#039;t keep up technologically. Communities which build with utility first will have more time to spend digging up ores and expanding farms. Its up to you as a leader to balance the beauty of your buildings with the utility of your buildings in order to avoid falling behind or losing out on new players.&lt;br /&gt;
&lt;br /&gt;
=== Diplomacy and War ===&lt;br /&gt;
In an experiment where nations do not need admin permission to go to war an attack could come at any time, even from groups who you thought were your ally. When analyzing the threats that other groups pose to your community, always analyze the situation through the lens of power. Even if you have nominally good relations with another group, or believe that the leader of another group is a good person, always be prepared for a quick evacuation and make plans concerning what to do in an attack such as: What spot in the town do we rally to if we&#039;re under attack? If we flee, where will we group back up at? Etc. Always bear in mind the balance of power of the nations around you, and make sure that you have adequate treaties and agreements with neighbors in the case of an attack.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== When to Fight and When to Flee? ====&lt;br /&gt;
Combat in this experiment is risky, especially if your community is unable to revive people. Before entering combat, its best to weigh your odds of victory. If you think there&#039;s an above average chance that you may not win a battle, DO NOT FIGHT. Only ever take battles where YOU have the advantage, if it can be helped.&lt;br /&gt;
&lt;br /&gt;
==== How to organize your group in combat ====&lt;br /&gt;
Minecraft PVP can become very unorganized. The group which can stay together will typically win. Even if the battle is 50 players vs 50 players, this will typically divulge into multiple smaller duels ranging from 1v1s to 5v5s. By staying together in groups of 5 and targeting the same player as your teammates, you can turn those smaller 5v5s into 5v1s, which will ensure your victory. A system which has worked well is the Officer system. An army is split into multiple trusted officers. The other players in the army will then follow these trusted officers and stay as close as possible to them, while trying to hit the same players whom the officers are attacking. This leads to less confusion over who are allies and who are enemies, and leads to more advantageous smaller engagements within the over all battle.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=360</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=360"/>
		<updated>2025-10-16T21:53:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Main Page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Main Page =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Welcome to Joyful’s Rise of Civilizations Experiment. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event.&lt;br /&gt;
&lt;br /&gt;
= Rules =&lt;br /&gt;
* No cheating&lt;br /&gt;
* No harassment&lt;br /&gt;
* No racism/sexism&lt;br /&gt;
* No combat logging&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a community-wide ban.&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
The event will begin on Saturday November 1st at 12:00 Eastern Standard Time. The event will then follow every following weekend pending announced changes at 12:00 Eastern Daylight Time.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=359</id>
		<title>Category:Player Mechanics</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Category:Player_Mechanics&amp;diff=359"/>
		<updated>2025-10-16T21:53:10Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;=== Reviving Players === The only way a player can rejoin the experiment is if another player in the game brings them back via a costly sacrifice of food. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in specific biomes. In order to gather all of the required crops,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Reviving Players ===&lt;br /&gt;
The only way a player can rejoin the experiment is if another player in the game brings them back via a [[Revive System|costly sacrifice of food]]. In the real event this cost will increase exponentially for each time the same person is revived, but in the test server this cost will stay the same. The crops that are required to bring a player back only grow in [[List of Crop Biomes|specific biomes]]. In order to gather all of the required crops, players will either need to operate farms in nearly every biome on the map, or trade with players from each biome who are already farming their local crop. It is recommended for groups of players to maintain control over the entire biome that they settle. If another group of players from a different biome is able to establish farms then you will lose your trade leverage. &lt;br /&gt;
&lt;br /&gt;
Because bringing players back is very expensive, we warn all players to pay attention to their surroundings and play cautiously. DO NOT trust everybody you come across, pay attention to the death broadcasts in chat and take note of the names of frequent killers. The more organized and aware your group is, the better the chance is that you will survive.&lt;br /&gt;
&lt;br /&gt;
=== Downed System ===&lt;br /&gt;
Because of the increased consequences of death, we&#039;ve also added a Downed But Not Out (DBNO) system. When a player&#039;s health hits 0, instead of immediately dying, they get &amp;quot;downed&amp;quot; with a chance to be revived. When a player is downed, they have 60s before they die for good. Another player can revive them by right clicking on the downed player to open a GUI, then clicking the &amp;quot;revive&amp;quot; button. It takes 5 seconds to revive a player. You cannot move or look around while reviving a downed player. You can cancel the revive by crouching. When a player starts reviving a downed player, the death timer pauses. If a player leaves the game while downed, they will instantly die.&lt;br /&gt;
=== Health Rework ===&lt;br /&gt;
Health no longer regenerates like normal. Instead of regening when your hunger is full, it will very slowly regen over time (this is currently bugged and will NOT work). Potions are disabled so the only way you can regen faster is through Bottles of Water which heal 1 heart. This new system makes health much more precarious, and makes access to water sources much more important (without having to add an annoying thirst system).&lt;br /&gt;
&lt;br /&gt;
=== Stamina ===&lt;br /&gt;
This experiment uses a [[Stamina System|stamina system]]. Stamina does NOT get used by actions such as: sprinting, jumping, crafting, or smithing. Stamina DOES get used by actions such as: breaking blocks, placing blocks, fishing, hitting players, and farming. Stamina takes a decent time to regenerate, and this is by design. If you run out of stamina, the &amp;quot;stamina cost&amp;quot; for those actions hits your hunger bar instead. When your hunger bar is empty, you can no longer perform actions that require stamina. Players in the early game found a lot of success by grouping up and working in shifts. While half of the team rests and regains stamina, the other half is mining/building. Once a group of players establishes a good source of food, they&#039;ll be able to trade food for time. Instead of waiting for their stamina to regen, they can instead keep performing actions until it becomes a food cost, then quickly eat and keep working without having to take a break. The stamina system acts as a food cost for actions while giving unestablished players the ability to perform tasks and survive without starving. We recommend that groups of players focus hard on establishing large sources of food in order to overcome the limitations of stamina.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=358</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Main_Page&amp;diff=358"/>
		<updated>2025-10-16T21:52:13Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Page Under Refactoring =&lt;br /&gt;
&lt;br /&gt;
This page is being reworked. In the meantime, [[Archive]] contains a backup of the old main page.&lt;br /&gt;
&lt;br /&gt;
= Main Page =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-collapse: collapse; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center&amp;quot;&amp;gt;&lt;br /&gt;
{{ImageButton|Crafting_Recipes.png|Crafting Recipes|link=[[:Category:Crafting_Recipes]]}}&lt;br /&gt;
{{ImageButton|Map_Generation.png|Map Generation|link=[[Map_Generation]]}}&lt;br /&gt;
{{ImageButton|Progression_Changes.png|Progression Changes|link=[[Progression_Changes]]}}&lt;br /&gt;
{{ImageButton|Player_Mechanics.png|Player Mechanics|link=[[:Category:Player_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Civilisation_Mechanics.png|Civilisation Mechanics|link=[[:Category:Civilization_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Meta_Mechanics.png|Meta Mechanics|link=[[:Category:Meta_Mechanics]]}}&lt;br /&gt;
{{ImageButton|Tips_and_Tricks.png|Tips and Tricks|link=[[Tips_And_Tricks]]}}&lt;br /&gt;
{{ImageButton|List_Of_Commands.png|List of Commands|link=[[:Category:Commands]]}}&lt;br /&gt;
{{ImageButton|List_Of_All_Mechanics.png|List of Mechanics|link=[[:Category:Mechanics]]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Welcome to Joyful’s Civilization Experiment. If you are reading this, you are probably about to play in the second TEST server. While everything isn&#039;t set up exactly how it will be in the event, many things will be similar. This experiment will use a custom plugin called CivCore which changes the game in quite a few ways to incentivize cooperation and empower players. This experiment is NOT like a normal Minecraft civilizations event.&lt;br /&gt;
&lt;br /&gt;
= Rules =&lt;br /&gt;
* No cheating&lt;br /&gt;
* No harassment&lt;br /&gt;
* No racism/sexism&lt;br /&gt;
* No combat logging&lt;br /&gt;
&lt;br /&gt;
Breaking any of these rules will result in a community-wide ban.&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
The event will begin on Saturday November 1st at 12:00 Eastern Standard Time. The event will then follow every following weekend pending announced changes at 12:00 Eastern Daylight Time.&lt;br /&gt;
&lt;br /&gt;
= Reasoning for the Event =&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;It started with YouTuber Magic Gum, who had been theorizing on his channel about how human history would have been different if humanity existed in Minecraft. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magic Gums&#039; rules had to be very strict and very guided to get players to cooperate. The most blatant of these rules being literally telling them &amp;quot;form a civilization to advance to the next level&amp;quot;. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;d like to propose that the reason players had to be forced to cooperate by weeding out antisocial players and imposing rules and expectations was because of the individualistic nature of Minecraft&#039;s production loop. [If] this individualistic production loop was replaced by a social production loop, players wouldn&#039;t need to be coerced into cooperation by outside rules and would lead to much more interesting and divergent [civilizations].  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[...] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is why social anxiety is rooted in our DNA. [Our] ancestors who were scared of being shunned or exiled by their tribe would be biologically incentivized to cooperate and to form these relations to avoid being left to fend for themselves. Of course, we don&#039;t need to simulate anxiety in Minecraft. We just need to provide the conditions which gave rise to it.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
— Joyful, &#039;&#039;The problem with simulating society in Minecraft&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=357</id>
		<title>Progression Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=357"/>
		<updated>2025-10-16T21:51:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Why change the progression? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
[[File:Bronze Ingot.png|thumb|Copper Ingot + Quartz = Bronze Ingot]]&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Iron|Iron armor]] is made by upgrading bronze gear in a Copper Anvil, but Iron tools can be crafted normally. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Material !! Utility Block !! Required&lt;br /&gt;
|-&lt;br /&gt;
| Wood || Crafting Table || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Stone || Crafting Table || Wood&lt;br /&gt;
|-&lt;br /&gt;
| Bronze|| Copper Anvil || Stone&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Copper Anvil /  Crafting Table || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Steel || Iron Anvil || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Diamond || Smithing Table || Steel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Why change the progression? ==&lt;br /&gt;
We made the choice to change minecraft&#039;s progression because of two goals we are striving for: Increase material costs and Make the increase enjoyable to play with. We could have simply increased the amount of iron ingots you need from 2 to 64 to make an Iron Sword, but we felt that we could achieve the same increase without simply making the game a grind fest. This is why we introduced the system of anvil progressions.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=356</id>
		<title>Progression Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=356"/>
		<updated>2025-10-16T21:49:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
[[File:Bronze Ingot.png|thumb|Copper Ingot + Quartz = Bronze Ingot]]&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Iron|Iron armor]] is made by upgrading bronze gear in a Copper Anvil, but Iron tools can be crafted normally. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Material !! Utility Block !! Required&lt;br /&gt;
|-&lt;br /&gt;
| Wood || Crafting Table || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Stone || Crafting Table || Wood&lt;br /&gt;
|-&lt;br /&gt;
| Bronze|| Copper Anvil || Stone&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Copper Anvil /  Crafting Table || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Steel || Iron Anvil || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Diamond || Smithing Table || Steel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Why change the progression? ==&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=355</id>
		<title>Progression Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=355"/>
		<updated>2025-10-16T21:49:02Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Bronze Ingot.png|thumb|Copper Ingot + Quartz = Bronze Ingot]]&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Iron|Iron armor]] is made by upgrading bronze gear in a Copper Anvil, but Iron tools can be crafted normally. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Material !! Utility Block !! Required&lt;br /&gt;
|-&lt;br /&gt;
| Wood || Crafting Table || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Stone || Crafting Table || Wood&lt;br /&gt;
|-&lt;br /&gt;
| Bronze|| Copper Anvil || Stone&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Copper Anvil /  Crafting Table || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Steel || Iron Anvil || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Diamond || Smithing Table || Steel&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=354</id>
		<title>Progression Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=354"/>
		<updated>2025-10-16T21:41:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Iron|Iron armor]] is made by upgrading bronze gear in a Copper Anvil, but Iron tools can be crafted normally. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Material !! Utility Block !! Required&lt;br /&gt;
|-&lt;br /&gt;
| Wood || Crafting Table || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Stone || Crafting Table || Wood&lt;br /&gt;
|-&lt;br /&gt;
| Bronze|| Copper Anvil || Stone&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Copper Anvil /  Crafting Table || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Steel || Iron Anvil || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Diamond || Smithing Table || Steel&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=353</id>
		<title>Progression Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Progression_Changes&amp;diff=353"/>
		<updated>2025-10-16T21:41:14Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;=== Progression === Wood and Stone function exactly like vanilla. Bronze is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a Copper Anvil. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. Iron armor is made by upgrading bronze gear in a Copper Anvil, but Iron tools can be crafted normally. Steel is an alloy of Coal Blocks an...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Progression ===&lt;br /&gt;
Wood and Stone function exactly like vanilla. [[Bronze]] is an alloy, which is made by combining Copper and Quartz (which spawns in the overworld) in a [[Copper Anvil]]. Iron is not required to progress from Bronze to Steel, however Iron is very useful for its much higher durability compared to Bronze. [[Iron|Iron armor]] is made by upgrading bronze gear in a Copper Anvil, but Iron tools can be crafted normally. [[Steel]] is an alloy of Coal Blocks and [[Iron Clumps]]. Diamonds are combined with steel gear in a [[Smithing Table]] to make Diamond armor/weapons/tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Material !! Utility Block !! Required&lt;br /&gt;
|-&lt;br /&gt;
| Wood || Crafting Table || N/A&lt;br /&gt;
|-&lt;br /&gt;
| Stone || Crafting Table || Wood&lt;br /&gt;
|-&lt;br /&gt;
| Bronze|| Copper Anvil || Stone&lt;br /&gt;
|-&lt;br /&gt;
| Iron || Copper Anvil /  Crafting Table || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Steel || Iron Anvil || Bronze&lt;br /&gt;
|-&lt;br /&gt;
| Diamond || Smithing Table || Steel&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Template:InvSprite&amp;diff=352</id>
		<title>Template:InvSprite</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Template:InvSprite&amp;diff=352"/>
		<updated>2025-10-16T20:35:13Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke: spriteFile | sprite&lt;br /&gt;
| name = Invicon | scale = {{{scale|1}}}&lt;br /&gt;
| keepcase = 1 | align = middle | size = 32&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{#invoke: documentation | page }}&lt;br /&gt;
&amp;lt;!-- Put categories/interwiki on the documentation page --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Module:SpriteFile&amp;diff=351</id>
		<title>Module:SpriteFile</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Module:SpriteFile&amp;diff=351"/>
		<updated>2025-10-16T20:34:52Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;local p = {}  function p.sprite( f ) 	local args = f 	if f == mw.getCurrentFrame() then 		args = require( &amp;#039;Module:ProcessArgs&amp;#039; ).merge( true ) 	else 		f = mw.getCurrentFrame() 	end 	 	-- Default settings 	local default = { 		scale = 1, 		size = 16, 		align = &amp;#039;text-top&amp;#039; 	} 	 	local id = mw.text.trim( tostring( args[1] or &amp;#039;&amp;#039; ) ) 	if not args.keepcase then 		id = mw.ustring.lower( id ):gsub( &amp;#039;[%s%+]&amp;#039;, &amp;#039;-&amp;#039; ) 	end 	 	local link = ( args.link or &amp;#039;&amp;#039; ) 	if mw.ustring.lower( link...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.sprite( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &#039;Module:ProcessArgs&#039; ).merge( true )&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Default settings&lt;br /&gt;
	local default = {&lt;br /&gt;
		scale = 1,&lt;br /&gt;
		size = 16,&lt;br /&gt;
		align = &#039;text-top&#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local id = mw.text.trim( tostring( args[1] or &#039;&#039; ) )&lt;br /&gt;
	if not args.keepcase then&lt;br /&gt;
		id = mw.ustring.lower( id ):gsub( &#039;[%s%+]&#039;, &#039;-&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local link = ( args.link or &#039;&#039; )&lt;br /&gt;
	if mw.ustring.lower( link ) == &#039;none&#039; then&lt;br /&gt;
		link = &#039;&#039;&lt;br /&gt;
	elseif link ~= &#039;&#039; then&lt;br /&gt;
		local linkPrefix = ( not link:find( &#039;//&#039; ) and args.linkprefix ) or &#039;&#039;&lt;br /&gt;
		link = linkPrefix .. link&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local scale = args.scale or default.scale&lt;br /&gt;
	local height = ( args.height or args.size or default.size ) * scale&lt;br /&gt;
	local width = ( args.width or args.size or default.size ) * scale&lt;br /&gt;
	local size = width .. &#039;x&#039; .. height .. &#039;px&#039;&lt;br /&gt;
	&lt;br /&gt;
	local styles = {}&lt;br /&gt;
	if height ~= default.size then&lt;br /&gt;
		styles[#styles + 1] = &#039;height:&#039; .. height .. &#039;px&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if width ~= default.size then&lt;br /&gt;
		styles[#styles + 1] = &#039;width:&#039; .. width .. &#039;px&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local name = args.name or &#039;&#039;&lt;br /&gt;
	if name == &#039;InvSprite&#039; then&lt;br /&gt;
		name = &#039;Invicon&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local file = name .. &#039; &#039; .. id .. ( name == &#039;&#039; and &#039;&#039; or &#039;.png&#039; )&lt;br /&gt;
	local altText = &#039;&#039;&lt;br /&gt;
	if link == &#039;&#039; then&lt;br /&gt;
		altText = file .. &#039;: Sprite image for &#039; .. id .. &#039; in Minecraft&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if id == &#039;&#039; then&lt;br /&gt;
		file = &#039;Grid Unknown.png&#039;&lt;br /&gt;
		altText = &#039;Unknown sprite image&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local sprite = mw.html.create( &#039;span&#039; ):addClass( &#039;sprite-file&#039; )&lt;br /&gt;
	local img = &#039;[[File:&#039; .. file .. &#039;|&#039; .. size .. &#039;|link=&#039; .. link .. &#039;|alt=&#039; .. altText .. &#039;|class=pixel-image|&#039; .. ( args.title or &#039;&#039; ) .. &#039;]]&#039;&lt;br /&gt;
	sprite:node( img )&lt;br /&gt;
	&lt;br /&gt;
	local align = args.align or default.align&lt;br /&gt;
	if align ~= default.align then&lt;br /&gt;
		styles[#styles + 1] = &#039;--vertical-align:&#039; .. align&lt;br /&gt;
	end&lt;br /&gt;
	styles[#styles + 1] = args.css&lt;br /&gt;
	&lt;br /&gt;
	sprite:cssText( table.concat( styles, &#039;;&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local root&lt;br /&gt;
	local spriteText&lt;br /&gt;
	if args.text then&lt;br /&gt;
		if not args[&#039;wrap&#039;] then&lt;br /&gt;
			root = mw.html.create( &#039;span&#039; ):addClass( &#039;nowrap&#039; )&lt;br /&gt;
		end&lt;br /&gt;
		spriteText = mw.html.create( &#039;span&#039; ):addClass( &#039;sprite-text&#039; ):wikitext( args.text )&lt;br /&gt;
		if args.title then&lt;br /&gt;
			spriteText:attr( &#039;title&#039;, args.title )&lt;br /&gt;
		end&lt;br /&gt;
		if link ~= &#039;&#039; then&lt;br /&gt;
			-- External link&lt;br /&gt;
			if link:find( &#039;//&#039; ) then&lt;br /&gt;
				spriteText = &#039;[&#039; .. link .. &#039; &#039; .. tostring( spriteText ) .. &#039;]&#039;&lt;br /&gt;
			else&lt;br /&gt;
				spriteText = &#039;[[&#039; .. link .. &#039;|&#039; .. tostring( spriteText ) .. &#039;]]&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not root then&lt;br /&gt;
		root = mw.html.create( &#039;&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	root:node( sprite )&lt;br /&gt;
	if spriteText then&lt;br /&gt;
		root:node( spriteText )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( root )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.link( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &#039;Module:ProcessArgs&#039; ).merge( true )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local link = args[1]&lt;br /&gt;
	if args[1] and not args.id then&lt;br /&gt;
		link = args[1]:match( &#039;^(.-)%+&#039; ) or args[1]&lt;br /&gt;
	end&lt;br /&gt;
	local text&lt;br /&gt;
	if not args.notext then&lt;br /&gt;
		text = args.text or args[2] or link&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	args[1] = args.id or args[1]&lt;br /&gt;
	args.link = args.link or link&lt;br /&gt;
	args.text = text&lt;br /&gt;
	&lt;br /&gt;
	return p.sprite( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Category:Crafting_Recipes&amp;diff=350</id>
		<title>Category:Crafting Recipes</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Category:Crafting_Recipes&amp;diff=350"/>
		<updated>2025-10-16T20:19:11Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{Crafting Table |A1=  |B1=                 |C1=  |A2=  |B2= Oak Wood Planks |C2=  |A3=  |B3= Oak Wood Planks |C3=  |Output= Stick,4 }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Crafting Table&lt;br /&gt;
|A1=  |B1=                 |C1= &lt;br /&gt;
|A2=  |B2= Oak Wood Planks |C2= &lt;br /&gt;
|A3=  |B3= Oak Wood Planks |C3= &lt;br /&gt;
|Output= Stick,4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Module:UI&amp;diff=349</id>
		<title>Module:UI</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Module:UI&amp;diff=349"/>
		<updated>2025-10-16T20:17:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local slot = require( [[Module:Inventory slot]] ).slot&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function addSlot( args, item, prefix, class, default )&lt;br /&gt;
	local none, nostacksize&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	if #prefix == 0 then&lt;br /&gt;
		none = &#039;none&#039;&lt;br /&gt;
		nostacksize = ((item == &#039;&#039; or nil) and &#039;&#039;) or (args and args[item] and args[item]:gsub( &#039;[,%d]&#039;, &#039;&#039; ) or &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return slot{&lt;br /&gt;
		nostacksize or args[item], mod = args.Mod, link = none or args[prefix .. &#039;link&#039;],&lt;br /&gt;
		title = none or args[prefix .. &#039;title&#039;], class = class, default = default,&lt;br /&gt;
		parsed = args.parsed&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function experience_class(exp_value)&lt;br /&gt;
	local MINMAX = {&lt;br /&gt;
	  {-32768, 2},&lt;br /&gt;
	  {3, 6},&lt;br /&gt;
	  {7, 16},&lt;br /&gt;
	  {17, 36},&lt;br /&gt;
	  {37, 72},&lt;br /&gt;
	  {73, 148},&lt;br /&gt;
	  {149, 306},&lt;br /&gt;
	  {307, 616},&lt;br /&gt;
	  {617, 1236},&lt;br /&gt;
	  {1237, 2476},&lt;br /&gt;
	  {2477, 32767}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local EXP_IMGS = {&lt;br /&gt;
		&amp;quot;xp-2&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-6&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-16&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-36&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-72&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-148&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-306&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-616&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-1236&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-2476&amp;quot;,&lt;br /&gt;
		&amp;quot;xp-32767&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local n = assert( tonumber(exp_value), &amp;quot;Module:UI: Experience value is not a number (&amp;quot; .. exp_value .. &amp;quot;)&amp;quot; )&lt;br /&gt;
	&lt;br /&gt;
	local idx = 2; exp = tonumber( exp_value )&lt;br /&gt;
	if exp &amp;lt;= MINMAX[#MINMAX][2] then&lt;br /&gt;
	  for i = 1, #MINMAX do&lt;br /&gt;
		if MINMAX[i][1] &amp;lt; exp and MINMAX[i][2] &amp;gt;= exp then&lt;br /&gt;
		  idx = i&lt;br /&gt;
		  break&lt;br /&gt;
		end&lt;br /&gt;
	  end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( EXP_IMGS[idx] )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Crafting table&lt;br /&gt;
function p.craftingTable( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;mcui mcui-Crafting_Table pixel-image&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local input = body:tag( &#039;span&#039; ):addClass( &#039;mcui-input&#039; )&lt;br /&gt;
	for num = 1, 3 do&lt;br /&gt;
		local row = input:tag( &#039;span&#039; ):addClass( &#039;mcui-row&#039; )&lt;br /&gt;
		for _, letter in ipairs{ &#039;A&#039;, &#039;B&#039;, &#039;C&#039; } do&lt;br /&gt;
			row:wikitext( addSlot( args, letter .. num, letter .. num ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local arrow = body:tag( &#039;span&#039; ):addClass( &#039;mcui-arrow&#039; ):tag( &#039;br&#039; ):done()&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-output&#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &#039;Output&#039;, &#039;O&#039;, &#039;invslot-large&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local shapeless = args.shapeless or &#039;&#039;&lt;br /&gt;
	local fixed = args.fixed or &#039;&#039;&lt;br /&gt;
	if shapeless ~= &#039;&#039; or fixed ~= &#039;&#039; then&lt;br /&gt;
		local icon = body:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-icons&#039; )&lt;br /&gt;
			:tag( &#039;span&#039; )&lt;br /&gt;
				:tag( &#039;br&#039; )&lt;br /&gt;
			:done()&lt;br /&gt;
		if shapeless ~= &#039;&#039; then&lt;br /&gt;
			icon:addClass( &#039;mcui-shapeless&#039; )&lt;br /&gt;
				:attr( &#039;title&#039;,&lt;br /&gt;
					&#039;This recipe is shapeless; the inputs may be placed in any arrangement in the crafting grid.&#039;&lt;br /&gt;
				)&lt;br /&gt;
		elseif fixed ~= &#039;&#039; then&lt;br /&gt;
			local notFixed = args.notfixed or &#039;&#039;&lt;br /&gt;
			local exceptFixed = &#039;&#039;&lt;br /&gt;
			if notFixed ~= &#039;&#039; then&lt;br /&gt;
				exceptFixed = &#039;; except for &#039; .. notFixed .. &#039;, which can go anywhere&#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			icon:addClass( &#039;mcui-fixed&#039; )&lt;br /&gt;
				:attr( &#039;title&#039;,&lt;br /&gt;
					&#039;This recipe is fixed; the input arrangement may not be moved or mirrored in the crafting grid&#039; .. exceptFixed .. &#039;.&#039;&lt;br /&gt;
				)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &#039;div&#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Furnace&lt;br /&gt;
function p.furnace( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;mcui mcui-Furnace pixel-image&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local input = body:tag( &#039;span&#039; ):addClass( &#039;mcui-input&#039; )&lt;br /&gt;
	input:wikitext( addSlot( args, &#039;Input&#039;, &#039;I&#039; ) )&lt;br /&gt;
	local fuel = input:tag( &#039;span&#039; ):addClass( &#039;mcui-fuel&#039; ):tag( &#039;br&#039; ):done()&lt;br /&gt;
	local burning = args.Input or &#039;&#039; ~= &#039;&#039; and args.Fuel or &#039;&#039; ~= &#039;&#039;&lt;br /&gt;
	if not burning then&lt;br /&gt;
		fuel:addClass( &#039;mcui-inactive&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	input:wikitext( addSlot( args, &#039;Fuel&#039;, &#039;F&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local arrow = body:tag( &#039;span&#039; ):addClass( &#039;mcui-arrow&#039; ):tag( &#039;br&#039; ):done()&lt;br /&gt;
	if not burning or ( args.Output or &#039;&#039; ) == &#039;&#039; then&lt;br /&gt;
		arrow:addClass( &#039;mcui-inactive&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-output&#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &#039;Output&#039;, &#039;O&#039;, &#039;invslot-large&#039; ) )&lt;br /&gt;
			&lt;br /&gt;
	args.Experience = args.Experience or &#039;&#039;&lt;br /&gt;
	if args.Experience ~= &#039;&#039; then&lt;br /&gt;
		-- Converts commas to dots, removes all spaces and splits the arguments with semicolon.&lt;br /&gt;
		local split = mw.text.split(string.gsub(args.Experience, &#039;[ ,]&#039;, {[&#039; &#039;] = &#039;&#039;, [&#039;,&#039;] = &#039;.&#039;}), &#039;;&#039;, true)&lt;br /&gt;
		local animated = body:tag(&#039;span&#039;)&lt;br /&gt;
				:attr(&#039;title&#039;, &#039;XP reward. If there is a fractional part, it means the recipe has a chance equal to the fractional part of rewarding an additional XP point.&#039;)&lt;br /&gt;
				:addClass(&#039;animated mcui-experience&#039;)&lt;br /&gt;
		local isNotFirst = true&lt;br /&gt;
		for i, v in ipairs(split) do&lt;br /&gt;
			local xp = tonumber(v)&lt;br /&gt;
			assert(xp, &#039;Module:UI: &amp;quot;&#039; .. v .. &#039;&amp;quot; is not a valid number&#039;)&lt;br /&gt;
			local xpWrapper = animated:tag(&#039;span&#039;)&lt;br /&gt;
					:addClass(isNotFirst and &#039;animated-active&#039; or nil)&lt;br /&gt;
			xpWrapper:tag(&#039;span&#039;)&lt;br /&gt;
					:addClass(experience_class(xp) .. &#039; mcui-experience-orb&#039;)&lt;br /&gt;
			xpWrapper:tag(&#039;span&#039;)&lt;br /&gt;
					:addClass(&#039;mcui-experience-text&#039;)&lt;br /&gt;
					:wikitext((&#039;&amp;amp;nbsp;&#039; and xp &amp;gt; 72 or &#039;&#039;) .. xp)&lt;br /&gt;
			isNotFirst = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &#039;div&#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Brewing Stand&lt;br /&gt;
function p.brewingStand( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;mcui mcui-Brewing_Stand pixel-image&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local input = body:tag( &#039;span&#039; ):addClass( &#039;mcui-input&#039; )&lt;br /&gt;
	input:tag( &#039;span&#039; ):addClass( &#039;mcui-bubbling&#039; ):tag( &#039;br&#039; )&lt;br /&gt;
	input:wikitext( addSlot( args, &#039;Input&#039;, &#039;I&#039; ) )&lt;br /&gt;
	input:tag( &#039;span&#039; ):addClass( &#039;mcui-arrow&#039; ):tag( &#039;br&#039; )&lt;br /&gt;
	if ( args.Input or &#039;&#039; ) == &#039;&#039; or&lt;br /&gt;
		( ( args.Output1 or &#039;&#039; ) == &#039;&#039; and ( args.Output2 or &#039;&#039; ) == &#039;&#039; and ( args.Output3 or &#039;&#039; ) == &#039;&#039; )&lt;br /&gt;
	then&lt;br /&gt;
		input:addClass( &#039;mcui-inactive&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-paths&#039; )&lt;br /&gt;
			:tag( &#039;br&#039; )&lt;br /&gt;
	&lt;br /&gt;
	if ( ( args.Base1 or &#039;&#039; ) ~= &#039;&#039; or ( args.Base2 or &#039;&#039; ) ~= &#039;&#039; or ( args.Base3 or &#039;&#039; ) ~= &#039;&#039; ) then&lt;br /&gt;
		local base = body:tag( &#039;span&#039; ):addClass( &#039;mcui-base&#039; )&lt;br /&gt;
		local arrows = body:tag( &#039;span&#039; ):addClass( &#039;mcui-arrowDown&#039; )&lt;br /&gt;
		for i = 1, 3 do&lt;br /&gt;
			base:wikitext( addSlot( args, &#039;Base&#039; .. i, &#039;B&#039; .. i, &#039;mcui-base&#039; .. i ) )&lt;br /&gt;
			arrows:tag( &#039;span&#039; ):addClass( &#039;mcui-arrowDown&#039; .. i ):tag( &#039;br&#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local output = body:tag( &#039;span&#039; ):addClass( &#039;mcui-output&#039; )&lt;br /&gt;
	for i = 1, 3 do&lt;br /&gt;
		output:wikitext( addSlot( args, &#039;Output&#039; .. i, &#039;O&#039; .. i, &#039;mcui-output&#039; .. i ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &#039;div&#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Stonecutter&lt;br /&gt;
function p.stonecutter( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;mcui mcui-Stonecutter pixel-image&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local input = body:tag( &#039;span&#039; ):addClass( &#039;mcui-input&#039; )&lt;br /&gt;
	input:wikitext( addSlot( args, &#039;Input&#039;, &#039;I&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local arrow = body:tag( &#039;span&#039; ):addClass( &#039;mcui-stonecutterArrow&#039; )&lt;br /&gt;
	arrow:wikitext( addSlot( args, &#039;Output&#039;, &#039;&#039;, &#039;invslot-plain mcui-stonecutterSprite&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-output&#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &#039;Output&#039;, &#039;O&#039;, &#039;invslot-large&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &#039;div&#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Loom&lt;br /&gt;
function p.loom( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;mcui mcui-Loom pixel-image&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local tapestry = body:tag( &#039;span&#039; ):addClass( &#039;mcui-tapestry&#039; )&lt;br /&gt;
	if args.Banner and #args.Banner&amp;gt;0 then&lt;br /&gt;
		tapestry:wikitext( addSlot( args, &#039;Banner&#039;, &#039;B&#039;, &#039;mcui-inputBanner&#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.Dye and #args.Dye&amp;gt;0 then&lt;br /&gt;
		tapestry:wikitext( addSlot( args, &#039;Dye&#039;, &#039;D&#039;, &#039;mcui-inputDye&#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	if args.Pattern and #args.Pattern&amp;gt;0 then&lt;br /&gt;
		tapestry:wikitext( addSlot( args, &#039;Pattern&#039;, &#039;P&#039;, &#039;mcui-inputPattern&#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	tapestry:tag( &#039;span&#039; ):tag( &#039;br&#039; ):done()&lt;br /&gt;
	local arrow = body:tag( &#039;span&#039; ):addClass( &#039;mcui-loomArrow&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local bannerSprite&lt;br /&gt;
	if args.Sprite and #args.Sprite &amp;gt; 0 then&lt;br /&gt;
		local animate = require( [[Module:AnimateSprite]] ).animate&lt;br /&gt;
		bannerSprite = animate{&lt;br /&gt;
			args.Sprite,&lt;br /&gt;
			name = &#039;SlotSprite&#039;&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		bannerSprite = &#039;&amp;lt;br&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	arrow&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-bannerSprite&#039; )&lt;br /&gt;
			:wikitext( bannerSprite )&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-output&#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &#039;Output&#039;, &#039;O&#039;, &#039;invslot-large&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &#039;div&#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Grindstone&lt;br /&gt;
function p.grindstone( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;mcui mcui-Grindstone pixel-image&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local grindstone = body:tag( &#039;span&#039; ):addClass( &#039;mcui-grindstone&#039; )&lt;br /&gt;
	grindstone:wikitext( addSlot( args, &#039;Input1&#039;, &#039;I1&#039;, &#039;mcui-input1&#039; ) )&lt;br /&gt;
	grindstone:wikitext( addSlot( args, &#039;Input2&#039;, &#039;I2&#039;, &#039;mcui-input2&#039; ) )&lt;br /&gt;
		&lt;br /&gt;
	local arrow = body:tag( &#039;span&#039; ):addClass( &#039;mcui-arrow&#039; )&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-output&#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &#039;Output&#039;, &#039;O&#039;, &#039;invslot-large&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &#039;div&#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Smithing Table&lt;br /&gt;
function p.smithing(f) &lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;mcui mcui-Smithing_Table pixel-image&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local smithingTable = body:tag( &#039;span&#039; ):addClass( &#039;mcui-smithingTable&#039; )&lt;br /&gt;
	smithingTable:wikitext( addSlot( args, &#039;Input1&#039;, &#039;I1&#039;, &#039;mcui-input1&#039; ) )&lt;br /&gt;
	smithingTable:wikitext( addSlot( args, &#039;Input2&#039;, &#039;I2&#039;, &#039;mcui-input2&#039; ) )&lt;br /&gt;
	smithingTable:wikitext( addSlot( args, &#039;Input3&#039;, &#039;I3&#039;, &#039;mcui-input3&#039; ) )&lt;br /&gt;
		&lt;br /&gt;
	local arrow = body:tag( &#039;span&#039; ):addClass( &#039;mcui-arrow&#039; )&lt;br /&gt;
	arrow:cssText([[display: inline-block;&lt;br /&gt;
					width: 44px;&lt;br /&gt;
					height: 30px;&lt;br /&gt;
					margin: 3px 18px;&lt;br /&gt;
					vertical-align: top;]])&lt;br /&gt;
	&lt;br /&gt;
	if args.crossed then&lt;br /&gt;
		arrow:addClass(&#039;mcui-inactive&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-output&#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &#039;Output&#039;, &#039;O&#039;, &#039;invslot&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	return tostring( mw.html.create( &#039;div&#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Anvil&lt;br /&gt;
function p.anvil(f) &lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;mcui mcui-Anvil pixel-image&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local hammer = body:tag( &#039;span&#039; ):addClass(&#039;mcui-hammer&#039;)&lt;br /&gt;
	hammer:cssText([[display: block;&lt;br /&gt;
					 width: 60px;&lt;br /&gt;
					 height: 60px;]])&lt;br /&gt;
	                    &lt;br /&gt;
	local title = body:tag( &#039;span&#039; ):addClass(&#039;mcui-Anvil-inputbox mcui-input&#039;)&lt;br /&gt;
	local itemName&lt;br /&gt;
	if args.Input1 and #args.Input1 &amp;gt; 0 then&lt;br /&gt;
		local animate = require( [[Module:AnimateText]] ).animate&lt;br /&gt;
		itemName = animate{&lt;br /&gt;
			args.Input1:gsub(&#039;Damaged &#039;, &#039;&#039;):gsub( &#039;;&#039; , &#039;,,&#039; )&lt;br /&gt;
	    }&lt;br /&gt;
	else&lt;br /&gt;
		title:addClass( &#039;mcui-inactive&#039; )&lt;br /&gt;
		itemName = &#039;&amp;lt;br&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	title:wikitext( ( itemName:gsub( &#039;class=&amp;quot;animated&amp;quot;&#039;, &#039;class=&amp;quot;mcui-Anvil-inputtext animated&amp;quot;&#039; ) ) )&lt;br /&gt;
	&lt;br /&gt;
	local anvilA = body:tag( &#039;span&#039; ):addClass( &#039;mcui-anvil&#039; ):css(&#039;margin-left&#039;, &#039;18px&#039;)&lt;br /&gt;
	anvilA:wikitext( addSlot( args, &#039;Input1&#039;, &#039;I1&#039;, &#039;mcui-input1&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local plus = body:tag( &#039;span&#039; ):addClass( &#039;mcui-plus&#039; )&lt;br /&gt;
	plus:cssText([[display: inline-block;&lt;br /&gt;
				   width: 26px;&lt;br /&gt;
				   height: 26px;&lt;br /&gt;
				   margin: 6px 18px;&lt;br /&gt;
				   vertical-align: top;]])&lt;br /&gt;
	&lt;br /&gt;
	local anvilB = body:tag( &#039;span&#039; ):addClass( &#039;mcui-anvil&#039; )&lt;br /&gt;
	anvilB:wikitext( addSlot( args, &#039;Input2&#039;, &#039;I2&#039;, &#039;mcui-input2&#039; ) )&lt;br /&gt;
		&lt;br /&gt;
	local arrow = body:tag( &#039;span&#039; ):addClass( &#039;mcui-arrow&#039; )&lt;br /&gt;
    arrow:cssText([[display: inline-block;&lt;br /&gt;
					width: 44px;&lt;br /&gt;
					height: 30px;&lt;br /&gt;
					margin: 4px 18px;&lt;br /&gt;
					vertical-align: top;]])&lt;br /&gt;
	&lt;br /&gt;
	if args.crossed then&lt;br /&gt;
		arrow:addClass(&#039;mcui-inactive&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-output&#039; )&lt;br /&gt;
			:css( &#039;margin-right&#039;, &#039;18px&#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &#039;Output&#039;, &#039;O&#039;, &#039;invslot&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	if args.cost then&lt;br /&gt;
		local cost = body:tag(&#039;span&#039;):addClass(&#039;mcui-Anvil-cost&#039;)&lt;br /&gt;
		if args.expensive then&lt;br /&gt;
			cost:addClass(&#039;mcui-Anvil-cost-expensive&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			cost:addClass(&#039;mcui-Anvil-cost-normal&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args.cost == &#039;expensive&#039; then&lt;br /&gt;
			cost:wikitext(&#039;Too expensive&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			cost:wikitext(&#039;Enchantment Cost: &#039; .. args.cost)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local wrapper = mw.html.create( &#039;div&#039; )&lt;br /&gt;
	wrapper:wikitext( require( [[Module:TSLoader]] ).call( &amp;quot;Anvil/styles.css&amp;quot; ) )&lt;br /&gt;
	return tostring( wrapper:node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.legacySmithing(f) &lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;mcui mcui-Smithing_Table pixel-image&#039; )&lt;br /&gt;
	&lt;br /&gt;
	local smithingA = body:tag( &#039;span&#039; ):addClass( &#039;mcui-smithingTable&#039; )&lt;br /&gt;
	smithingA:wikitext( addSlot( args, &#039;Input1&#039;, &#039;I1&#039;, &#039;mcui-input1&#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local plus = body:tag( &#039;span&#039; ):addClass( &#039;mcui-plus&#039; )&lt;br /&gt;
	plus:cssText([[display: inline-block;&lt;br /&gt;
				   width: 26px;&lt;br /&gt;
				   height: 26px;&lt;br /&gt;
				   margin: 6px 18px;&lt;br /&gt;
				   vertical-align: top;]])&lt;br /&gt;
	&lt;br /&gt;
	local smithingB = body:tag( &#039;span&#039; ):addClass( &#039;mcui-smithingTable&#039; )	&lt;br /&gt;
	smithingB:wikitext( addSlot( args, &#039;Input2&#039;, &#039;I2&#039;, &#039;mcui-input2 invslot-default-smithing&#039; ) )&lt;br /&gt;
		&lt;br /&gt;
	local arrow = body:tag( &#039;span&#039; ):addClass( &#039;mcui-arrow&#039; )&lt;br /&gt;
	arrow:cssText([[display: inline-block;&lt;br /&gt;
					width: 44px;&lt;br /&gt;
					height: 30px;&lt;br /&gt;
					margin: 4px 18px;&lt;br /&gt;
					vertical-align: top;]])&lt;br /&gt;
	&lt;br /&gt;
	if args.crossed then&lt;br /&gt;
		arrow:addClass(&#039;mcui-inactive&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body&lt;br /&gt;
		:tag( &#039;span&#039; )&lt;br /&gt;
			:addClass( &#039;mcui-output&#039; )&lt;br /&gt;
			:wikitext( addSlot( args, &#039;Output&#039;, &#039;O&#039;, &#039;invslot&#039; ) )&lt;br /&gt;
&lt;br /&gt;
	return tostring( mw.html.create( &#039;div&#039; ):node( body ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Module:Inventory_slot&amp;diff=348</id>
		<title>Module:Inventory slot</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Module:Inventory_slot&amp;diff=348"/>
		<updated>2025-10-16T20:17:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Internationalization data&lt;br /&gt;
local i18n = {&lt;br /&gt;
	-- Name formats for pages and files&lt;br /&gt;
	filename = &#039;Invicon $1&#039;,&lt;br /&gt;
	legacyFilename = &#039;Grid $1&#039;,&lt;br /&gt;
	modLink = &#039;Mods/$1/$2&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- Dependencies&lt;br /&gt;
	moduleAliases = [[Module:Inventory slot/Aliases]],&lt;br /&gt;
	moduleRandom = [[Module:Random]],&lt;br /&gt;
	&lt;br /&gt;
	-- List of special prefixes which should be handled by&lt;br /&gt;
	-- other modules (such as being moved outside links)&lt;br /&gt;
	-- When localizing, you might want to use a separate list of patterns&lt;br /&gt;
	-- matching the prefixes’ grammatical forms depending on the language&lt;br /&gt;
	prefixes = {&lt;br /&gt;
		any = &#039;Any&#039;,&lt;br /&gt;
		matching = &#039;Matching&#039;,&lt;br /&gt;
		damaged = &#039;Damaged&#039;,&lt;br /&gt;
		unwaxed = &#039;Unwaxed&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	-- List of suffixes that are usually stripped from links and tooltips&lt;br /&gt;
	suffixes = {&lt;br /&gt;
		rev = &#039;Revision %d+&#039;,&lt;br /&gt;
		-- berev = &#039;BE%d+&#039;,&lt;br /&gt;
		-- jerev= &#039;JE%d+&#039;,&lt;br /&gt;
		be = &#039;BE&#039;,&lt;br /&gt;
		lce = &#039;LCE&#039;,&lt;br /&gt;
		sm = &#039;SM&#039;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
p.i18n = i18n&lt;br /&gt;
&lt;br /&gt;
-- Global dependencies and constants&lt;br /&gt;
local random = require( i18n.moduleRandom ).random&lt;br /&gt;
local aliases = mw.loadData( i18n.moduleAliases )&lt;br /&gt;
local pageName = mw.title.getCurrentTitle().text&lt;br /&gt;
local vanilla = { v = 1, vanilla = 1, mc = 1, minecraft = 1 }&lt;br /&gt;
&lt;br /&gt;
-- Auxilliary functions --&lt;br /&gt;
&lt;br /&gt;
-- Splits a given text into fragments separated by semicolons that are not&lt;br /&gt;
-- inside square brackets. Originally written by AttemptToCallNil for the&lt;br /&gt;
-- Russian wiki.&lt;br /&gt;
-- It processes the text byte-by-byte due to being written under a much stricter&lt;br /&gt;
-- Lua runtime budget, with no LuaSandbox and mw.text.split being unperformant.&lt;br /&gt;
-- See also https://help.fandom.com/wiki/Extension:Scribunto#Known_issues_and_solutions&lt;br /&gt;
local function splitOnUnenclosedSemicolons(text)&lt;br /&gt;
	local semicolon, lbrace, rbrace = (&amp;quot;;[]&amp;quot;):byte(1, 3)&lt;br /&gt;
	local nesting = false&lt;br /&gt;
	local splitStart = 1&lt;br /&gt;
	local frameIndex = 1&lt;br /&gt;
	local frames = {}&lt;br /&gt;
	&lt;br /&gt;
	for index = 1, text:len() do&lt;br /&gt;
		local byte = text:byte(index)&lt;br /&gt;
		if byte == semicolon and not nesting then&lt;br /&gt;
			frames[frameIndex] = text:sub(splitStart, index - 1)&lt;br /&gt;
			frameIndex = frameIndex + 1&lt;br /&gt;
			splitStart = index + 1&lt;br /&gt;
		elseif byte == lbrace then&lt;br /&gt;
			assert(not nesting, &amp;quot;Excessive square brackets found&amp;quot;)&lt;br /&gt;
			nesting = true&lt;br /&gt;
		elseif byte == rbrace then&lt;br /&gt;
			assert(nesting, &amp;quot;Unbalanced square brackets found&amp;quot;)&lt;br /&gt;
			nesting = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	assert(not nesting, &amp;quot;Unbalanced square brackets found&amp;quot;)&lt;br /&gt;
	frames[frameIndex] = text:sub(splitStart, text:len())&lt;br /&gt;
	&lt;br /&gt;
	for index = 1, #frames do&lt;br /&gt;
		frames[index] = (frames[index]:gsub(&amp;quot;^%s+&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;%s+$&amp;quot;, &amp;quot;&amp;quot;)) -- faster than mw.text.trim&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return frames&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Performs a simple recursive clone of a table’s values.&lt;br /&gt;
-- Probably exists due to mw.clone() being unusable on tables from mw.loadData()&lt;br /&gt;
-- at the time (see the link to help.fandom.com above)&lt;br /&gt;
local function cloneTable( origTable )&lt;br /&gt;
	local newTable = {}&lt;br /&gt;
	for k, v in pairs( origTable ) do&lt;br /&gt;
		if type( v ) == &#039;table&#039; then&lt;br /&gt;
			v = cloneTable( v )&lt;br /&gt;
		end&lt;br /&gt;
		newTable[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return newTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Merges a list, or inserts a string or table into a table,&lt;br /&gt;
-- depending on what the second argument happens to be&lt;br /&gt;
local function mergeList( parentTable, content )&lt;br /&gt;
	local i = #parentTable + 1&lt;br /&gt;
	if content[1] then&lt;br /&gt;
		-- Merge list into table&lt;br /&gt;
		for _, v in ipairs( content ) do&lt;br /&gt;
			parentTable[i] = v&lt;br /&gt;
			i = i + 1&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Add strings or tables to table&lt;br /&gt;
		parentTable[i] = content&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Creates the HTML node for a given item.&lt;br /&gt;
-- The actual icon file is found and added here&lt;br /&gt;
local function makeItem( frame, args )&lt;br /&gt;
	local item = ( mw.html.create(&#039;span&#039;)&lt;br /&gt;
		:addClass(&#039;invslot-item&#039;)&lt;br /&gt;
		:addClass(args.imgclass)&lt;br /&gt;
		:cssText(args.imgstyle)&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	if (frame.name or &#039;&#039;) == &#039;&#039; then&lt;br /&gt;
		-- Empty frame, no icon to add&lt;br /&gt;
		return item&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Frame parameters&lt;br /&gt;
	local title = frame.title or mw.text.trim( args.title or &#039;&#039; )&lt;br /&gt;
	local mod = frame.mod&lt;br /&gt;
	local name = frame.name&lt;br /&gt;
	local num = frame.num&lt;br /&gt;
	local description = frame.text&lt;br /&gt;
	&lt;br /&gt;
	-- Split the extension out of the frame’s name&lt;br /&gt;
	local extension&lt;br /&gt;
	if name:match(&#039;%.gif&#039;) or name:match(&#039;%.png&#039;) then&lt;br /&gt;
		extension = name:sub(-4)&lt;br /&gt;
		name = name:sub(0, -5)&lt;br /&gt;
	elseif name:match(&#039;%.webp&#039;) then&lt;br /&gt;
		extension = &#039;.webp&#039;&lt;br /&gt;
		name = name:sub(0, -6)&lt;br /&gt;
	else&lt;br /&gt;
		extension = &#039;.png&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Determine the file name&lt;br /&gt;
	local img&lt;br /&gt;
	if mod then&lt;br /&gt;
		-- Legacy mod support&lt;br /&gt;
		-- Comment out instead of deleting, as other wikis may find it useful&lt;br /&gt;
		img = i18n.legacyFilename:gsub( &#039;%$1&#039;, name .. &#039; (&#039; .. mod .. &#039;)&#039; )&lt;br /&gt;
	else&lt;br /&gt;
		-- Fall back to an individual image if the sprite is lacking&lt;br /&gt;
		img = i18n.filename:gsub( &#039;%$1&#039;, name)&lt;br /&gt;
	end&lt;br /&gt;
	img = img .. extension&lt;br /&gt;
&lt;br /&gt;
	-- Strip suffixes out&lt;br /&gt;
	for _, suffix in pairs( i18n.suffixes ) do&lt;br /&gt;
		name = name:gsub( &#039; &#039; .. suffix .. &#039;$&#039;, &#039;&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Determine the link’s target&lt;br /&gt;
	local link = args.link or &#039;&#039;&lt;br /&gt;
	if link == &#039;&#039; then&lt;br /&gt;
		if mod then&lt;br /&gt;
			link = i18n.modLink:gsub( &#039;%$1&#039;, mod ):gsub( &#039;%$2&#039;, name )&lt;br /&gt;
		else&lt;br /&gt;
			-- Strip the “Damaged” prefix out&lt;br /&gt;
			link = name:gsub( &#039;^&#039; .. i18n.prefixes.damaged .. &#039; &#039;, &#039;&#039; )&lt;br /&gt;
		end&lt;br /&gt;
	elseif link:lower() == &#039;none&#039; then&lt;br /&gt;
		-- Disable the link&lt;br /&gt;
		link = nil&lt;br /&gt;
	end&lt;br /&gt;
	if link and link:gsub(&#039;^%l&#039;, string.upper) == pageName then&lt;br /&gt;
		link = nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Tooltip titles. If JavaScript is not enabled, the slot will gracefully&lt;br /&gt;
	-- degrade to a simplified title without minetip formatting&lt;br /&gt;
	local formattedTitle&lt;br /&gt;
	local plainTitle&lt;br /&gt;
	if title == &#039;&#039; then&lt;br /&gt;
		-- If the title is not set, default to the slot’s name&lt;br /&gt;
		plainTitle = name&lt;br /&gt;
	elseif title:lower() ~= &#039;none&#039; then&lt;br /&gt;
		-- Special character escapes&lt;br /&gt;
		plainTitle = title:gsub( &#039;\\\\&#039;, &#039;&amp;amp;#92;&#039; ):gsub( &#039;\\&amp;amp;&#039;, &#039;&amp;amp;#38;&#039; )&lt;br /&gt;
		&lt;br /&gt;
		-- The default title will have special formatting code stripped out&lt;br /&gt;
		local formatPatterns = {&#039;&amp;amp;[0-9a-jl-qs-vyzr]&#039;, &#039;&amp;amp;#%x%x%x%x%x%x&#039;, &#039;&amp;amp;$%x%x%x&#039;}&lt;br /&gt;
		for _, formatPattern in ipairs( formatPatterns ) do&lt;br /&gt;
			if plainTitle:match( formatPattern ) then&lt;br /&gt;
				formattedTitle = title&lt;br /&gt;
				plainTitle = plainTitle:gsub( formatPattern, &#039;&#039; )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if plainTitle == &#039;&#039; then&lt;br /&gt;
			-- If the title field only has formatting code, the frame’s name&lt;br /&gt;
			-- is automatically used. For minetips it’s done by JavaScript&lt;br /&gt;
			-- by appending the plain title.&lt;br /&gt;
			plainTitle = name&lt;br /&gt;
		else&lt;br /&gt;
			-- Re-encode the &lt;br /&gt;
			plainTitle = plainTitle:gsub( &#039;&amp;amp;#92;&#039;, &#039;\\&#039; ):gsub( &#039;&amp;amp;#38;&#039;, &#039;&amp;amp;&#039; )&lt;br /&gt;
		end&lt;br /&gt;
	elseif link then&lt;br /&gt;
		-- Disable the tooltip that will otherwise appear with a link&lt;br /&gt;
		formattedTitle = &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Minetips are controlled by custom HTML attributes.&lt;br /&gt;
	-- See [[MediaWiki:Common.js]] for implementation in JavaScript&lt;br /&gt;
	item:attr{&lt;br /&gt;
		[&#039;data-minetip-title&#039;] = formattedTitle,&lt;br /&gt;
		[&#039;data-minetip-text&#039;] = description&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	-- &amp;amp; is re-escaped because mw.html treats attributes as plain text,&lt;br /&gt;
	-- but MediaWiki doesn’t.&lt;br /&gt;
	local escapedTitle = ( plainTitle or &#039;&#039; ):gsub( &#039;&amp;amp;&#039;, &#039;&amp;amp;#38;&#039; )&lt;br /&gt;
	&lt;br /&gt;
	-- Alt text&lt;br /&gt;
	local altText = img .. &#039;: Inventory sprite for &#039; .. name .. &#039; in Minecraft as shown in-game&#039;&lt;br /&gt;
	if link then&lt;br /&gt;
		altText = altText .. &#039; linking to &#039; .. link&lt;br /&gt;
	end&lt;br /&gt;
	if formattedTitle or plainTitle or link then&lt;br /&gt;
		altText = altText .. &#039; with description: &#039; .. ( formattedTitle or plainTitle or link )&lt;br /&gt;
		if description then&lt;br /&gt;
			altText = altText .. &#039; &#039; .. description:gsub( &#039;/&#039;, &#039; &#039; )&lt;br /&gt;
		end&lt;br /&gt;
		altText = altText:gsub( &#039;&amp;amp;[0-9a-jl-qs-wr]&#039;, &#039;&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Add the image&lt;br /&gt;
	item:addClass( &#039;invslot-item-image&#039; )&lt;br /&gt;
		:wikitext( &#039;[[File:&#039;, img, &#039;|32x32px|link=&#039;, link or &#039;&#039;, &#039;|alt=&#039;, altText, &#039;|&#039;, escapedTitle, &#039;]]&#039; )&lt;br /&gt;
	&lt;br /&gt;
	-- Add the stack number, if present and in 2-999 range&lt;br /&gt;
	if num and num &amp;gt; 1 and num &amp;lt; 1000 then&lt;br /&gt;
		if link then&lt;br /&gt;
			item:wikitext( &#039;[[&#039;, link, &#039;|&#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local number = item&lt;br /&gt;
			:tag( &#039;span&#039; )&lt;br /&gt;
				:addClass( &#039;invslot-stacksize&#039; )&lt;br /&gt;
				:attr{ title = plainTitle }&lt;br /&gt;
				:wikitext( num )&lt;br /&gt;
		if args.numstyle then&lt;br /&gt;
			number:cssText( args.numstyle )&lt;br /&gt;
		end&lt;br /&gt;
		if link then&lt;br /&gt;
			item:wikitext( &#039;]]&#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- The HTML node is now ready&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Publicly available functions --&lt;br /&gt;
&lt;br /&gt;
-- Main entry point: Creates the whole slot&lt;br /&gt;
function p.slot( f )&lt;br /&gt;
	-- Incoming arguments&lt;br /&gt;
	local args = f.args or f&lt;br /&gt;
	if f == mw.getCurrentFrame() and args[1] == nil then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- TODO: Add support for unexpanded frame sequences in table format&lt;br /&gt;
	if not args.parsed then&lt;br /&gt;
		-- Assumed to be a string, trim it&lt;br /&gt;
		args[1] = mw.text.trim( args[1] or &#039;&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Legacy mod support. Comment out instead of deleting; might be useful&lt;br /&gt;
	-- for other wikis&lt;br /&gt;
	-- TODO: Support multiple mod alias tables at once (like on RuMCW)&lt;br /&gt;
	local modData = {&lt;br /&gt;
		aliases = args.modaliases or &#039;&#039;,&lt;br /&gt;
		default = args.mod&lt;br /&gt;
	}&lt;br /&gt;
	if modData.aliases ~= &#039;&#039; then&lt;br /&gt;
		modData.aliases = mw.loadData( &#039;Module:&#039; .. modData.aliases )&lt;br /&gt;
	else&lt;br /&gt;
		modData.aliases = nil&lt;br /&gt;
	end&lt;br /&gt;
	if args.mod == &#039;&#039; then&lt;br /&gt;
		modData.default = nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Get the frame sequence in table format&lt;br /&gt;
	local frames&lt;br /&gt;
	if args.parsed then&lt;br /&gt;
		-- Already parsed in some other module, such as Recipe table&lt;br /&gt;
		frames = args[1]&lt;br /&gt;
	elseif args[1] ~= &#039;&#039; then&lt;br /&gt;
		-- Parse the frame string&lt;br /&gt;
		-- TODO: Make the “randomise” flag not hard-coded to invslot-large CSS class&lt;br /&gt;
		-- (ostensibly for output slots) as not all output slots are large&lt;br /&gt;
		local randomise = args.class == &#039;invslot-large&#039; and &#039;never&#039; or nil&lt;br /&gt;
		frames = p.parseFrameText( args[1], randomise, false, modData )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Create the slot node and add applicable styles&lt;br /&gt;
	local body = mw.html.create( &#039;span&#039; ):addClass( &#039;invslot&#039; ):css{ [&#039;vertical-align&#039;] = args.align }&lt;br /&gt;
	&lt;br /&gt;
	-- Is the slot animated?&lt;br /&gt;
	local animated = frames and #frames &amp;gt; 1&lt;br /&gt;
	if animated then&lt;br /&gt;
		body:addClass( &#039;animated&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Default background&lt;br /&gt;
	if ( args.default or &#039;&#039; ) ~= &#039;&#039; then -- default background&lt;br /&gt;
		body:addClass( &#039;invslot-default-&#039; .. string.lower( args.default ):gsub( &#039; &#039;, &#039;-&#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Custom styles&lt;br /&gt;
	body:addClass( args.class )&lt;br /&gt;
	body:cssText( args.style )&lt;br /&gt;
	&lt;br /&gt;
	--mw.logObject( frames )&lt;br /&gt;
	if not frames or #frames == 0 then&lt;br /&gt;
		-- Empty slot&lt;br /&gt;
		return tostring( body )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- We have frames, add them&lt;br /&gt;
	local activeFrame = frames.randomise == true and random( #frames ) or 1&lt;br /&gt;
	for i, frame in ipairs( frames ) do&lt;br /&gt;
		local item&lt;br /&gt;
		if frame[1] then&lt;br /&gt;
			-- This is a subframe container. Each animation cycle of the slot&lt;br /&gt;
			-- will show a subframe, one at a time.&lt;br /&gt;
			-- Create a container node for subframes&lt;br /&gt;
			item = body:tag( &#039;span&#039; ):addClass( &#039;animated-subframe&#039; )&lt;br /&gt;
			local subActiveFrame = frame.randomise == true and random( #frame ) or 1&lt;br /&gt;
			&lt;br /&gt;
			-- Add subframes to the note&lt;br /&gt;
			for sI, sFrame in ipairs( frame ) do&lt;br /&gt;
				local sItem = makeItem( sFrame, args )&lt;br /&gt;
				item:node( sItem )&lt;br /&gt;
				&lt;br /&gt;
				-- Set this subframe as active&lt;br /&gt;
				if sI == subActiveFrame then&lt;br /&gt;
					sItem:addClass( &#039;animated-active&#039; )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- A simple frame&lt;br /&gt;
			item = makeItem( frame, args )&lt;br /&gt;
			body:node( item )&lt;br /&gt;
		end&lt;br /&gt;
		if i == activeFrame and animated then&lt;br /&gt;
			-- Set this frame as active, if we have multiple of them&lt;br /&gt;
			item:addClass( &#039;animated-active&#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- The slot is ready&lt;br /&gt;
	return tostring( body )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Parses the frame text into a table of frames and subframes,&lt;br /&gt;
-- expanding aliases (and optionally retaining a reference), and&lt;br /&gt;
-- deciding if the slot can be randomised.&lt;br /&gt;
-- Alias references are used in [[Module:Recipe table]] to create links and&lt;br /&gt;
-- lists of unique items.&lt;br /&gt;
function p.parseFrameText( framesText, randomise, aliasReference, modData )&lt;br /&gt;
	-- Frame sequences&lt;br /&gt;
	local frames = { randomise = randomise }&lt;br /&gt;
	local subframes = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Is the current frame a subframe?&lt;br /&gt;
	local subframe&lt;br /&gt;
	&lt;br /&gt;
	-- The list of expanded aliases, will be added to the frame sequence&lt;br /&gt;
	-- if aliasReference is set to true AND if there are any aliases to expand.&lt;br /&gt;
	local expandedAliases&lt;br /&gt;
	&lt;br /&gt;
	-- Split the frame string by semicolons (respecting square brackets)&lt;br /&gt;
	local splitFrames = splitOnUnenclosedSemicolons( framesText )&lt;br /&gt;
	&lt;br /&gt;
	-- Iterate on frame fragments&lt;br /&gt;
	for i, frameText in ipairs( splitFrames ) do&lt;br /&gt;
		-- Subframes are grouped by curly braces&lt;br /&gt;
		frameText = frameText:gsub( &#039;^%s*{%s*&#039;, function()&lt;br /&gt;
			subframe = true&lt;br /&gt;
			return &#039;&#039;&lt;br /&gt;
		end )&lt;br /&gt;
		&lt;br /&gt;
		if subframe then&lt;br /&gt;
			-- Closing brace found&lt;br /&gt;
			frameText = frameText:gsub( &#039;%s*}%s*$&#039;, function()&lt;br /&gt;
				subframe = &#039;last&#039;&lt;br /&gt;
				return &#039;&#039;&lt;br /&gt;
			end )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Convert the frame text into table format, applying the default mod&lt;br /&gt;
		-- if needed.&lt;br /&gt;
		local frame = p.makeFrame( frameText, modData and modData.default )&lt;br /&gt;
		&lt;br /&gt;
		-- Alias processing&lt;br /&gt;
		-- TODO: Rework mod support to automatically load relevant alias tables,&lt;br /&gt;
		-- for use on other wikis that may want it. This will allow supporting&lt;br /&gt;
		-- multiple mod alias tables at once. Comment out instead of deleting!&lt;br /&gt;
		local newFrame = frame&lt;br /&gt;
		if aliases or modData.aliases then&lt;br /&gt;
			local id = frame.name&lt;br /&gt;
			if frame.mod then&lt;br /&gt;
				-- is this really needed? RuMCW doesn’t add mod prefixes in mod aliases&lt;br /&gt;
				id = frame.mod .. &#039;:&#039; .. id&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local alias = modData and modData.aliases and modData.aliases[id] or&lt;br /&gt;
				aliases and aliases[id]&lt;br /&gt;
			if alias then&lt;br /&gt;
				-- Alias found, expand it&lt;br /&gt;
				newFrame = p.getAlias( alias, frame )&lt;br /&gt;
				&lt;br /&gt;
				-- Save the alias references, if asked&lt;br /&gt;
				if aliasReference then&lt;br /&gt;
					-- The alias data includes the original unexpanded frame&lt;br /&gt;
					-- and the number of frames it has expanded to.&lt;br /&gt;
					-- The alias reference table is not sequential — indices for&lt;br /&gt;
					-- each alias data object correspond to that alias’ first&lt;br /&gt;
					-- (or only) expanded frame. Which is not added to the frame&lt;br /&gt;
					-- sequence yet&lt;br /&gt;
					local curFrame = #frames + 1&lt;br /&gt;
					local aliasData = { frame = frame, length = #newFrame }&lt;br /&gt;
					if subframe then&lt;br /&gt;
						-- Subframe containers will have their own&lt;br /&gt;
						-- alias reference tables&lt;br /&gt;
						if not subframes.aliasReference then&lt;br /&gt;
							subframes.aliasReference = {}&lt;br /&gt;
						end&lt;br /&gt;
						subframes.aliasReference[#subframes + 1] = aliasData&lt;br /&gt;
					else&lt;br /&gt;
						if not expandedAliases then&lt;br /&gt;
							expandedAliases = {}&lt;br /&gt;
						end&lt;br /&gt;
						expandedAliases[curFrame] = aliasData&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- Alias processing ends here&lt;br /&gt;
		&lt;br /&gt;
		-- Add frames and control randomization&lt;br /&gt;
		if subframe then&lt;br /&gt;
			-- Add the frame to the current subframe container&lt;br /&gt;
			mergeList( subframes, newFrame )&lt;br /&gt;
			&lt;br /&gt;
			-- Randomise starting frame for &amp;quot;Any *&amp;quot; aliases, as long as the&lt;br /&gt;
			-- alias is the only subframe (and randomization is not disabled)&lt;br /&gt;
			if frames.randomise ~= &#039;never&#039; and subframes.randomise == nil and&lt;br /&gt;
				frame.name:match( &#039;^&#039; .. i18n.prefixes.any .. &#039; &#039; )&lt;br /&gt;
			then&lt;br /&gt;
				subframes.randomise = true&lt;br /&gt;
			else&lt;br /&gt;
				subframes.randomise = false&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- Disable randomization&lt;br /&gt;
			if frames.randomise ~= &#039;never&#039; then&lt;br /&gt;
				frames.randomise = false&lt;br /&gt;
			end&lt;br /&gt;
			if subframe == &#039;last&#039; then&lt;br /&gt;
				if #subframes == 1 or #splitFrames == i and #frames == 0 then&lt;br /&gt;
					-- If the subframe container only has one expanded frame or&lt;br /&gt;
					-- is the only frame in the whole sequence, its contents are&lt;br /&gt;
					-- extracted into the main frame sequence&lt;br /&gt;
					local lastFrame = #frames&lt;br /&gt;
					mergeList( frames, subframes )&lt;br /&gt;
					&lt;br /&gt;
					-- Inherit the randomise flag if it’s the only frame&lt;br /&gt;
					if #splitFrames == 1 then&lt;br /&gt;
						frames.randomise = subframes.randomise&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					-- Append alias reference data, if present&lt;br /&gt;
					if aliasReference and subframes.aliasReference then&lt;br /&gt;
						if not expandedAliases then&lt;br /&gt;
							expandedAliases = {}&lt;br /&gt;
						end&lt;br /&gt;
						for i, aliasRefData in pairs(subframes.aliasReference) do&lt;br /&gt;
							expandedAliases[lastFrame + i] = aliasRefData&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					-- Add the subframe container to the frame sequence&lt;br /&gt;
					table.insert( frames, subframes )&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				-- Finished processing this subframe container&lt;br /&gt;
				subframes = {}&lt;br /&gt;
				subframe = nil&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- Randomize starting frame for &amp;quot;Any *&amp;quot; aliases, as long as the alias is the only frame&lt;br /&gt;
			if frames.randomise ~= &#039;never&#039; and frame.name:match( &#039;^&#039; .. i18n.prefixes.any .. &#039; &#039; ) then&lt;br /&gt;
				frames.randomise = true&lt;br /&gt;
			else&lt;br /&gt;
				frames.randomise = false&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- Add the expanded frame(s) to the frame sequence&lt;br /&gt;
			mergeList( frames, newFrame )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Add the alias reference, if we’re compiling one&lt;br /&gt;
	frames.aliasReference = expandedAliases&lt;br /&gt;
	&lt;br /&gt;
	-- The frame sequence is ready&lt;br /&gt;
	return frames&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Applies parameters from the parent frame (such as title or text)&lt;br /&gt;
-- to the alias’ expansion&lt;br /&gt;
function p.getAlias( aliasFrames, parentFrame )&lt;br /&gt;
	-- If alias is just a name, return the parent frame with the new name&lt;br /&gt;
	if type( aliasFrames ) == &#039;string&#039; then&lt;br /&gt;
		local expandedFrame = mw.clone( parentFrame )&lt;br /&gt;
		expandedFrame.name = aliasFrames&lt;br /&gt;
		return { expandedFrame }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Single frame alias, put in list&lt;br /&gt;
	if aliasFrames.name then&lt;br /&gt;
		aliasFrames = { aliasFrames }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Common case: group alias&lt;br /&gt;
	local expandedFrames = {}&lt;br /&gt;
	for i, aliasFrame in ipairs( aliasFrames ) do&lt;br /&gt;
		local expandedFrame&lt;br /&gt;
		if type( aliasFrame ) == &#039;string&#039; then&lt;br /&gt;
			-- Simple expansion frame in string format&lt;br /&gt;
			expandedFrame = { name = aliasFrame }&lt;br /&gt;
		else&lt;br /&gt;
			-- Expansion frame in table format&lt;br /&gt;
			-- As it’s loaded with mw.loadData, it must be cloned&lt;br /&gt;
			-- before changing&lt;br /&gt;
			expandedFrame = cloneTable( aliasFrame )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Apply the parent frame’s settings&lt;br /&gt;
		expandedFrame.title = parentFrame.title or expandedFrame.title&lt;br /&gt;
		expandedFrame.num = parentFrame.num or expandedFrame.num&lt;br /&gt;
		expandedFrame.text = parentFrame.text or expandedFrame.text&lt;br /&gt;
		&lt;br /&gt;
		-- Legacy mod support. Comment out instead of deleting&lt;br /&gt;
		-- TODO: invert the priority for mod parameter, to allow&lt;br /&gt;
		-- group mod aliases with vanilla items?&lt;br /&gt;
		expandedFrame.mod = parentFrame.mod or expandedFrame.mod&lt;br /&gt;
		&lt;br /&gt;
		expandedFrames[i] = expandedFrame&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return expandedFrames&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Convert the frame object back into string format&lt;br /&gt;
function p.stringifyFrame( frame )&lt;br /&gt;
	if not frame.name then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&#039;[%s]%s:%s,%s[%s]&#039;,&lt;br /&gt;
		frame.title or &#039;&#039;,&lt;br /&gt;
		frame.mod or &#039;Minecraft&#039;,&lt;br /&gt;
		frame.name,&lt;br /&gt;
		frame.num or &#039;&#039;,&lt;br /&gt;
		frame.text or &#039;&#039;&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Convert the frame sequence into string format&lt;br /&gt;
function p.stringifyFrames( frames )&lt;br /&gt;
	for i, frame in ipairs( frames ) do&lt;br /&gt;
		if frame[1] then&lt;br /&gt;
			-- Subframe container&lt;br /&gt;
			-- As the format and the syntax are the same, process it recursively&lt;br /&gt;
			frames[i] = &#039;{&#039; .. p.stringifyFrames( frame ) .. &#039;}&#039;&lt;br /&gt;
		else&lt;br /&gt;
			frames[i] = p.stringifyFrame( frame )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( frames, &#039;;&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Converts the frame text into a frame object&lt;br /&gt;
-- Full syntax: [Title]Mod:Name,Number[Text]&lt;br /&gt;
function p.makeFrame( frameText, defaultMod )&lt;br /&gt;
	-- Simple frame with no parts&lt;br /&gt;
	if not frameText:match( &#039;[%[:,]&#039; ) then&lt;br /&gt;
		return {&lt;br /&gt;
			mod = defaultMod,&lt;br /&gt;
			name = mw.text.trim( frameText ),&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Complex frame&lt;br /&gt;
	local frame = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Title&lt;br /&gt;
	local title, rest = frameText:match( &#039;^%s*%[([^%]]*)%]%s*(.*)&#039; )&lt;br /&gt;
	if title then&lt;br /&gt;
		frame.title = title&lt;br /&gt;
		frameText = rest&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Additional tooltip text&lt;br /&gt;
	local rest, text = frameText:match( &#039;([^%]]*)%s*%[([^%]]*)%]%s*$&#039; )&lt;br /&gt;
	if text then&lt;br /&gt;
		frame.text = text&lt;br /&gt;
		frameText = rest&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Legacy mod support&lt;br /&gt;
	-- Comment out instead of deleting&lt;br /&gt;
	local mod, rest = frameText:match(&#039;^([^:]+):%s*(.*)&#039;)&lt;br /&gt;
	if mod then&lt;br /&gt;
		if not vanilla[mod:lower()] then&lt;br /&gt;
			frame.mod = mod&lt;br /&gt;
		end&lt;br /&gt;
		frameText = rest&lt;br /&gt;
	else&lt;br /&gt;
		frame.mod = defaultMod&lt;br /&gt;
		frameText = frameText:gsub(&#039;^:&#039;, &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Name and stack size&lt;br /&gt;
	-- The pattern will match the last comma, so you can use names with commas&lt;br /&gt;
	-- like so: “Potatiesh, Greatstaff of the Peasant,1”&lt;br /&gt;
	local name, num = frameText:match(&#039;(.*),%s*(%d+)&#039;)&lt;br /&gt;
	if num then&lt;br /&gt;
		-- Number is set&lt;br /&gt;
		frame.name = mw.text.trim(name)&lt;br /&gt;
		frame.num = math.floor(num)&lt;br /&gt;
		if frame.num &amp;lt; 2 then&lt;br /&gt;
			frame.num = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- No number&lt;br /&gt;
		frame.name = mw.text.trim(frameText)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- The frame object is ready&lt;br /&gt;
	return frame&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- This line should be the last one:&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Module:Inventory_slot/Aliases&amp;diff=347</id>
		<title>Module:Inventory slot/Aliases</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Module:Inventory_slot/Aliases&amp;diff=347"/>
		<updated>2025-10-16T20:17:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local aliases = {&lt;br /&gt;
	-- Common fuel types for furnace --&lt;br /&gt;
	[&#039;Any fuel&#039;] = { &#039;Coal&#039;, &#039;Charcoal&#039;, { title = &#039;Log&#039;, name = &#039;Oak Log&#039; }, { title = &#039;Overworld Planks&#039;, name = &#039;Oak Planks&#039; }, &#039;Lava Bucket&#039;, &#039;Block of Coal&#039; },&lt;br /&gt;
	&lt;br /&gt;
	-- All armor --&lt;br /&gt;
	[&#039;Any leather armor&#039;] = { &#039;Leather Cap&#039;, &#039;Leather Tunic&#039;, &#039;Leather Pants&#039;, &#039;Leather Boots&#039; },&lt;br /&gt;
	[&#039;Any copper armor&#039;] = { &#039;Copper Helmet&#039;, &#039;Copper Chestplate&#039;, &#039;Copper Leggings&#039;, &#039;Copper Boots&#039; },&lt;br /&gt;
	[&#039;Any golden armor&#039;] = { &#039;Golden Helmet&#039;, &#039;Golden Chestplate&#039;, &#039;Golden Leggings&#039;, &#039;Golden Boots&#039; },&lt;br /&gt;
	[&#039;Any chainmail armor&#039;] = { &#039;Chainmail Helmet&#039;, &#039;Chainmail Chestplate&#039;, &#039;Chainmail Leggings&#039;, &#039;Chainmail Boots&#039; },&lt;br /&gt;
	[&#039;Any iron armor&#039;] = { &#039;Iron Helmet&#039;, &#039;Iron Chestplate&#039;, &#039;Iron Leggings&#039;, &#039;Iron Boots&#039; },&lt;br /&gt;
	[&#039;Any diamond armor&#039;] = { &#039;Diamond Helmet&#039;, &#039;Diamond Chestplate&#039;, &#039;Diamond Leggings&#039;, &#039;Diamond Boots&#039; },&lt;br /&gt;
	[&#039;Any netherite armor&#039;] = { &#039;Netherite Helmet&#039;, &#039;Netherite Chestplate&#039;, &#039;Netherite Leggings&#039;, &#039;Netherite Boots&#039; },&lt;br /&gt;
&lt;br /&gt;
    -- Stones --&lt;br /&gt;
	[&#039;Any Cobblestone or Blackstone&#039;] = { &#039;Cobblestone&#039;, &#039;Blackstone&#039; },&lt;br /&gt;
	[&#039;Any stone-tier block&#039;] = { &#039;Cobblestone&#039;, &#039;Blackstone&#039;, &#039;Cobbled Deepslate&#039; },&lt;br /&gt;
&lt;br /&gt;
	-- Miscellaeous collections --&lt;br /&gt;
	[&#039;Any leaves&#039;] = { &#039;Oak Leaves&#039;, &#039;Spruce Leaves&#039;, &#039;Birch Leaves&#039;, &#039;Acacia Leaves&#039;, &#039;Jungle Leaves&#039;, &#039;Dark Oak Leaves&#039;, &#039;Mangrove Leaves&#039;, &#039;Cherry Leaves&#039;, &#039;Pale Oak Leaves&#039;, &#039;Azalea Leaves&#039;, &#039;Flowering Azalea Leaves&#039; };&lt;br /&gt;
	[&#039;Any Egg&#039;] = { &#039;Egg&#039;, &#039;Blue Egg&#039;, &#039;Brown Egg&#039;};&lt;br /&gt;
	[&#039;Any copper tools&#039;] = { &#039;Copper Sword&#039;, &#039;Copper Pickaxe&#039;, &#039;Copper Axe&#039;, &#039;Copper Shovel&#039;, &#039;Copper Hoe&#039; },&lt;br /&gt;
	[&#039;Any Chain&#039;] = { &#039;Iron Chain&#039;, &#039;Copper Chain&#039;, &#039;Exposed Copper Chain&#039;, &#039;Weathered Copper Chain&#039;, &#039;Oxidized Copper Chain&#039;, &#039;Waxed Copper Chain&#039;, &#039;Waxed Exposed Copper Chain&#039;, &#039;Waxed Weathered Copper Chain&#039;, &#039;Waxed Oxidized Copper Chain&#039; };&lt;br /&gt;
		&lt;br /&gt;
	-- Display names --&lt;br /&gt;
	[&#039;Broken Elytra&#039;] = { title = &#039;&amp;amp;dElytra&#039;, name = &#039;Broken Elytra&#039; },&lt;br /&gt;
	[&#039;Button&#039;] = { title = &#039;Button&#039;, name = &#039;Stone Button&#039;},&lt;br /&gt;
	[&#039;Wooden Button&#039;] = { title = &#039;Button&#039;, name = &#039;Oak Button&#039;},&lt;br /&gt;
	[&#039;Arrow Loaded Crossbow&#039;] = { title = &#039;Crossbow&#039;, name = &#039;Arrow Loaded Crossbow&#039; },&lt;br /&gt;
	[&#039;Damaged Arrow Loaded Crossbow&#039;] = { title = &#039;Crossbow&#039;, name = &#039;Damaged Arrow Loaded Crossbow&#039; },&lt;br /&gt;
	[&#039;Firework Loaded Crossbow&#039;] = { title = &#039;Crossbow&#039;, name = &#039;Firework Loaded Crossbow&#039; },&lt;br /&gt;
	[&#039;Damaged Firework Loaded Crossbow&#039;] = { title = &#039;Crossbow&#039;, name = &#039;Damaged Firework Loaded Crossbow&#039; },&lt;br /&gt;
	[&#039;Ominous Banner&#039;] = { title = &#039;&amp;amp;6&amp;amp;oOminous Banner&#039;, name = &#039;Ominous Banner&#039;, text = &lt;br /&gt;
		&#039;&amp;amp;7Cyan Lozenge/&amp;amp;7Light Gray Base/&amp;amp;7Gray Pale/&amp;amp;7Light Gray Bordure/&amp;amp;7Black Fess/&amp;amp;7Light Gray Per Fess&#039;},&lt;br /&gt;
	[&#039;Half Filled Bundle&#039;] = { title = &#039;Bundle&#039;, name = &#039;Half Filled Bundle&#039; },&lt;br /&gt;
	[&#039;Filled Bundle&#039;] = { title = &#039;Bundle&#039;, name = &#039;Filled Bundle&#039; },&lt;br /&gt;
&lt;br /&gt;
	-- Empty display name --&lt;br /&gt;
	[&#039;debug_fourj_item&#039;] = { title = &#039;\226\128\140&#039;, name = &#039;debug_fourj_item&#039; },&lt;br /&gt;
&lt;br /&gt;
	-- Equipment with custom rarity --&lt;br /&gt;
	[&#039;Trident&#039;] = { title = &#039;&amp;amp;bTrident&#039;, name = &#039;Trident&#039;, text = &#039;/&amp;amp;7 When in Main Hand:/&amp;amp;#160;&amp;amp;29 Attack Damage/&amp;amp;#160;&amp;amp;21.1 Attack Speed&#039;},&lt;br /&gt;
	[&#039;Damaged Trident&#039;] = { title = &#039;&amp;amp;bTrident&#039;, name = &#039;Damaged Trident&#039;, text = &#039;/&amp;amp;7 When in Main Hand:/&amp;amp;#160;&amp;amp;29 Attack Damage/&amp;amp;#160;&amp;amp;21.1 Attack Speed&#039;},&lt;br /&gt;
	[&#039;Trident BE&#039;] = { title = &#039;&amp;amp;bTrident&#039;, name = &#039;Trident&#039;, text = &#039;/&amp;amp;9 +8 Attack Damage&#039;},&lt;br /&gt;
	[&#039;Mace&#039;] = { title = &#039;&amp;amp;dMace&#039;, name = &#039;Mace&#039;, text = &#039;/&amp;amp;7 When in Main Hand:/&amp;amp;#160;&amp;amp;26 Attack Damage/&amp;amp;#160;&amp;amp;20.6 Attack Speed&#039;},&lt;br /&gt;
	[&#039;Damaged Mace&#039;] = { title = &#039;&amp;amp;dMace&#039;, name = &#039;Damaged Mace&#039;, text = &#039;/&amp;amp;7 When in Main Hand:/&amp;amp;#160;&amp;amp;26 Attack Damage/&amp;amp;#160;&amp;amp;20.6 Attack Speed&#039;},&lt;br /&gt;
	[&#039;Mace BE&#039;] = { title = &#039;&amp;amp;dMace&#039;, name = &#039;Mace&#039;, text = &#039;/&amp;amp;9 +5 Attack Damage&#039;},&lt;br /&gt;
	[&amp;quot;Damaged Elytra&amp;quot;] = { title = &amp;quot;&amp;amp;dElytra&amp;quot;, name = &amp;quot;Damaged Elytra&amp;quot; },&lt;br /&gt;
	&lt;br /&gt;
	-- Ominous Bottles --&lt;br /&gt;
    [&#039;Ominous Bottle&#039;] = { title = &#039;&amp;amp;eOminous Bottle&#039;, name = &#039;Ominous Bottle&#039;, text = &#039;&amp;amp;9Bad Omen (01:40:00)&#039; },&lt;br /&gt;
    [&#039;Ominous Bottle II&#039;] = { title = &#039;&amp;amp;eOminous Bottle&#039;, name = &#039;Ominous Bottle&#039;, text = &#039;&amp;amp;9Bad Omen II (01:40:00)&#039; },&lt;br /&gt;
    [&#039;Ominous Bottle III&#039;] = { title = &#039;&amp;amp;eOminous Bottle&#039;, name = &#039;Ominous Bottle&#039;, text = &#039;&amp;amp;9Bad Omen III (01:40:00)&#039; },&lt;br /&gt;
    [&#039;Ominous Bottle IV&#039;] = { title = &#039;&amp;amp;eOminous Bottle&#039;, name = &#039;Ominous Bottle&#039;, text = &#039;&amp;amp;9Bad Omen IV (01:40:00)&#039; },&lt;br /&gt;
    [&#039;Ominous Bottle V&#039;] = { title = &#039;&amp;amp;eOminous Bottle&#039;, name = &#039;Ominous Bottle&#039;, text = &#039;&amp;amp;9Bad Omen V (01:40:00)&#039; },&lt;br /&gt;
&lt;br /&gt;
	-- Bedrock and Minecraft Education display names --&lt;br /&gt;
	[&#039;Buried Treasure Map BE&#039;] = { title = &#039;Treasure Map&#039;, name = &#039;Buried Treasure Map BE&#039; },&lt;br /&gt;
	[&#039;Elytra Wings&#039;] = { title = &#039;Elytra Wings&#039;, name = &#039;Elytra&#039; },&lt;br /&gt;
	[&#039;Glowing Obsidian&#039;] = { title = &#039;tile.glowingobsidian.name&#039;, name = &#039;Glowing Obsidian&#039; },&lt;br /&gt;
	[&#039;Grass Carried&#039;] = { title = &#039;Grass&#039;, name = &#039;Grass Carried&#039; },&lt;br /&gt;
	[&#039;Map (no markers)&#039;] = { title = &#039;Map&#039;, name = &#039;Map&#039;, text = &#039;Display Markers: &amp;amp;cNo&#039; },&lt;br /&gt;
	[&#039;Locator Map&#039;] = { title = &#039;Locator Map&#039;, name = &#039;Map BE&#039; },&lt;br /&gt;
	[&#039;Map BE&#039;] = { title = &#039;Map&#039;, name = &#039;Map BE&#039; },&lt;br /&gt;
	[&#039;Shrub BE&#039;] = { title = &#039;Fern&#039;, name = &#039;Short Grass&#039; },&lt;br /&gt;
	[&#039;Rose BE&#039;] = { title = &#039;Rose&#039;, name = &#039;Rose BE&#039; },&lt;br /&gt;
	[&#039;Unknown&#039;] = { title = &#039;Unknown&#039;, name = &#039;Missing Tile&#039; },&lt;br /&gt;
	[&#039;info_update&#039;] = { title = &#039;tile.info_update.name&#039;, name = &#039;Missing Tile&#039; },&lt;br /&gt;
	[&#039;info_update2&#039;] = { title = &#039;tile.info_update2.name&#039;, name = &#039;Missing Tile&#039; },&lt;br /&gt;
	[&#039;reserved6&#039;] = { title = &#039;tile.reserved6.name&#039;, name = &#039;Missing Tile&#039; },&lt;br /&gt;
	[&#039;Pufferfish 3DS&#039;] = { title = &#039;Pufferfish&#039;, name = &#039;Pufferfish 3DS&#039; },&lt;br /&gt;
	[&#039;Smooth Purpur&#039;] = { title = &#039;tile.deprecated_purpur_block_2.name&#039;, name = &#039;Smooth Purpur&#039; },&lt;br /&gt;
	[&#039;Client Request Placeholder Block&#039;] = { title = &#039;tile.client_request_placeholder_block.name&#039;, name = &#039;Missing Tile (texture) BE3&#039; },&lt;br /&gt;
	[&#039;Moving Block&#039;] = { title = &#039;tile.moving_block.name&#039;, name = &#039;Missing Tile (texture) BE3&#039; },&lt;br /&gt;
	[&#039;Piston Arm Colision&#039;] = { title = &#039;tile.piston_arm_colision.name&#039;, name = &#039;pistonArmCollision&#039; },&lt;br /&gt;
	[&#039;Sticky Piston Arm Colision&#039;] = { title = &#039;tile.sticky_piston_arm_colision.name&#039;, name = &#039;pistonArmCollision&#039; },&lt;br /&gt;
	[&#039;Beacon BE&#039;] = { title = &#039;&amp;amp;bBeacon&#039;, name = &#039;Beacon BE&#039; },&lt;br /&gt;
	[&#039;Conduit BE&#039;] = { title = &#039;&amp;amp;eConduit&#039;, name = &#039;Conduit BE&#039; },&lt;br /&gt;
	[&#039;Dragon Egg BE&#039;] = { title = &#039;&amp;amp;dDragon Egg&#039;, name = &#039;Dragon Egg BE&#039; },&lt;br /&gt;
	[&#039;Skeleton Skull BE&#039;] = { title = &#039;&amp;amp;eSkeleton Skull&#039;, name = &#039;Skeleton Skull BE&#039; },&lt;br /&gt;
	[&#039;Wither Skeleton Skull BE&#039;] = { title = &#039;&amp;amp;bWither Skeleton Skull&#039;, name = &#039;Wither Skeleton Skull BE&#039; },&lt;br /&gt;
	[&#039;Zombie Head BE&#039;] = { title = &#039;&amp;amp;eZombie Head&#039;, name = &#039;Zombie Head BE&#039; },&lt;br /&gt;
	[&#039;Player Head BE&#039;] = { title = &#039;&amp;amp;ePlayer Head&#039;, name = &#039;Player Head BE&#039; },&lt;br /&gt;
	[&#039;Creeper Head BE&#039;] = { title = &#039;&amp;amp;eCreeper Head&#039;, name = &#039;Creeper Head BE&#039; },&lt;br /&gt;
	[&#039;Dragon Head BE&#039;] = { title = &#039;&amp;amp;dDragon Head&#039;, name = &#039;Dragon Head BE&#039; },&lt;br /&gt;
	[&#039;Deprecated Anvil&#039;] = { title = &#039;Anvil&#039;, name = &#039;Deprecated Anvil&#039; },&lt;br /&gt;
	[&#039;Inverted Daylight Detector&#039;] = { title = &#039;tile.daylight_detector_inverted.name&#039;, name = &#039;Inverted Daylight Detector&#039; },&lt;br /&gt;
&lt;br /&gt;
	-- Chemistry --&lt;br /&gt;
	[&#039;Lead (element)&#039;] = { title = &#039;Lead&#039;, name = &#039;Lead (element)&#039; },&lt;br /&gt;
	[&#039;Water (compound)&#039;] = { title = &#039;Water&#039;, name = &#039;Water (compound)&#039; },&lt;br /&gt;
	[&#039;Chloride&#039;] = { &#039;Calcium Chloride&#039;, &#039;Cerium Chloride&#039;, &#039;Mercuric Chloride&#039;, &#039;Potassium Chloride&#039;, &#039;Tungsten Chloride&#039; },&lt;br /&gt;
	[&#039;Sparkler&#039;] = { &#039;Orange Sparkler&#039;, &#039;Blue Sparkler&#039;, &#039;Red Sparkler&#039;, &#039;Purple Sparkler&#039;, &#039;Green Sparkler&#039; },&lt;br /&gt;
	[&#039;Matching Balloon&#039;] = { &#039;White Balloon&#039;, &#039;Silver Balloon&#039;, &#039;Gray Balloon&#039;, &#039;Black Balloon&#039;, &#039;Brown Balloon&#039;, &#039;Red Balloon&#039;, &#039;Orange Balloon&#039;, &#039;Yellow Balloon&#039;, &#039;Lime Balloon&#039;, &#039;Green Balloon&#039;, &#039;Cyan Balloon&#039;, &#039;Light Blue Balloon&#039;, &#039;Blue Balloon&#039;, &#039;Purple Balloon&#039;, &#039;Magenta Balloon&#039;, &#039;Pink Balloon&#039; },&lt;br /&gt;
	[&#039;Matching Chloride&#039;] = { &#039;Cerium Chloride&#039;, &#039;Mercuric Chloride&#039;, &#039;Potassium Chloride&#039;, &#039;Tungsten Chloride&#039; },&lt;br /&gt;
	[&#039;Matching Colored Torch&#039;] = { &#039;Blue Torch&#039;, &#039;Red Torch&#039;, &#039;Purple Torch&#039;, &#039;Green Torch&#039; },&lt;br /&gt;
	&lt;br /&gt;
	-- April Fools&#039; Day jokes --&lt;br /&gt;
	[&#039;Potion of Caring (Poison)&#039;] = { title = &#039;Potion of Caring&#039;, text = &#039;&amp;amp;cCaring&#039;, name = &#039;Potion of Caring (Poison)&#039;},&lt;br /&gt;
	[&#039;Potion of Caring (Poison) Enhanced&#039;] = { title = &#039;Potion of Caring&#039;, text = &#039;&amp;amp;cCaring II&#039;, name = &#039;Potion of Caring (Poison)&#039;},&lt;br /&gt;
	[&#039;Splash Potion of Caring (Poison)&#039;] = { title = &#039;Splash Potion of Caring&#039;, text = &#039;&amp;amp;cCaring&#039;, name = &#039;Splash Potion of Caring (Poison)&#039;},&lt;br /&gt;
	[&#039;Splash Potion of Caring (Poison) Enhanced&#039;] = { title = &#039;Splash Potion of Caring&#039;, text = &#039;&amp;amp;cCaring II&#039;, name = &#039;Splash Potion of Caring (Poison)&#039;},&lt;br /&gt;
	[&#039;Potion of Caring (Slowness)&#039;] = { title = &#039;Potion of Caring&#039;, text = &#039;&amp;amp;cCaring&#039;, name = &#039;Potion of Caring (Slowness)&#039;},&lt;br /&gt;
	[&#039;Splash Potion of Caring (Slowness)&#039;] = { title = &#039;Splash Potion of Caring&#039;, text = &#039;&amp;amp;cCaring&#039;, name = &#039;Splash Potion of Caring (Slowness)&#039;},&lt;br /&gt;
	[&#039;Potion of Sharing&#039;] = { text = &#039;&amp;amp;cSharing (1:30)//&amp;amp;5When Applied:/&amp;amp;9+1,3 Love Power&#039;, name = &#039;Potion of Sharing&#039;},&lt;br /&gt;
	[&#039;Potion of Sharing Extended&#039;] = { text = &#039;&amp;amp;cSharing (4:00)//&amp;amp;5When Applied:/&amp;amp;9+1,3 Love Power&#039;, name = &#039;Potion of Sharing&#039;},&lt;br /&gt;
	[&#039;Splash Potion of Sharing&#039;] = { text = &#039;&amp;amp;cSharing (1:07)//&amp;amp;5When Applied:/&amp;amp;9+1,3 Love Power&#039;, name = &#039;Splash Potion of Sharing&#039;},&lt;br /&gt;
	[&#039;Splash Potion of Sharing Extended&#039;] = { text = &#039;&amp;amp;cSharing (3:00)//&amp;amp;5When Applied:/&amp;amp;9+1,3 Love Power&#039;, name = &#039;Splash Potion of Sharing&#039;},&lt;br /&gt;
	&lt;br /&gt;
	[&#039;Air (April Fools\&#039; joke)&#039;] = { title = &#039;Air&#039;, name = &#039;Air (April Fools\&#039; joke)&#039;},&lt;br /&gt;
	[&#039;Dupe Hack&#039;] = { title = &#039;minecraft:dupe_hack&#039;, name = &#039;Dupe Hack&#039; },&lt;br /&gt;
	[&#039;New Thing Banner Pattern&#039;] = { title = &#039;&amp;amp;dBanner Pattern&#039;, name = &#039;New Thing Banner Pattern&#039;, text = &#039;&amp;amp;7New Thing&#039;},&lt;br /&gt;
	&lt;br /&gt;
	[&#039;Potato of Knowledge&#039;] = { text = &#039;Amount: 10&#039;, name = &#039;Potato of Knowledge&#039;},&lt;br /&gt;
	[&#039;Poisonous Potato Hammer&#039;] = { title = &#039;&amp;amp;bPoisonous Potato Hammer&#039;, text = &#039;&amp;amp;7Knockback X//&amp;amp;7When in Main Hand/&amp;amp;#160;&amp;amp;211 Attack Damage/&amp;amp;#160;&amp;amp;26 Attack Speed&#039;, name = &#039;Poisonous Potato Hammer&#039;},&lt;br /&gt;
	[&#039;Potato Peeler&#039;] = { text = &#039;&amp;amp;a+10.0 Damage to Potato Mobs//&amp;amp;7 When in Main Hand/&amp;amp;#160;&amp;amp;22 Attack Damage/&amp;amp;#160;&amp;amp;25 Attack Speed&#039;, name = &#039;Potato Peeler&#039;},&lt;br /&gt;
	[&#039;Potato Oil&#039;] = { text = &#039;&amp;amp;9It\&#039;s very slippery&#039;, name = &#039;Potato Oil&#039;},&lt;br /&gt;
	[&#039;Poisonous Potato Oil&#039;] = { text = &#039;&amp;amp;9It\&#039;s very slippery/&amp;amp;cPoison (0:10)&#039;, name = &#039;Poisonous Potato Oil&#039;},&lt;br /&gt;
	[&#039;Potato Oil (Potion)&#039;] = { title = &#039;Potato Oil&#039;, text = &#039;&amp;amp;9It\&#039;s very slippery&#039;, name = &#039;Potato Oil (Potion)&#039;},&lt;br /&gt;
	[&#039;Poisonous Potato Oil (Potion)&#039;] = { title = &#039;Poisonous Potato Oil&#039;, text = &#039;&amp;amp;9It\&#039;s very slippery/&amp;amp;cPoison (0:10)&#039;, name = &#039;Poisonous Potato Oil (Potion)&#039;},&lt;br /&gt;
	[&#039;Splash Potato Oil&#039;] = { text = &#039;&amp;amp;9It\&#039;s very slippery&#039;, name = &#039;Splash Potato Oil&#039;},&lt;br /&gt;
	[&#039;Splash Poisonous Potato Oil&#039;] = { text = &#039;&amp;amp;9It\&#039;s very slippery/&amp;amp;cPoison (0:10)&#039;, name = &#039;Splash Poisonous Potato Oil&#039;},&lt;br /&gt;
	[&#039;Lingering Potato Oil&#039;] = { text = &#039;&amp;amp;9It\&#039;s very slippery&#039;, name = &#039;Lingering Potato Oil&#039;},&lt;br /&gt;
	[&#039;Lingering Poisonous Potato Oil&#039;] = { text = &#039;&amp;amp;9It\&#039;s very slippery/&amp;amp;cPoison (0:02)&#039;, name = &#039;Lingering Poisonous Potato Oil&#039;},&lt;br /&gt;
	[&#039;Arrow of Oilyness&#039;] = { text = &#039;&amp;amp;9It\&#039;s very slippery&#039;, name = &#039;Arrow of Oilyness&#039;},&lt;br /&gt;
	[&#039;Arrow of Deadly Oilyness&#039;] = { text = &#039;&amp;amp;9It\&#039;s very slippery/&amp;amp;cPoison (0:01)&#039;, name = &#039;Arrow of Deadly Oilyness&#039;},&lt;br /&gt;
	&lt;br /&gt;
	-- Note: These can&#039;t use this module&#039;s default color handling because potato peels have no white variant but do include the uncolored variant in recipes&lt;br /&gt;
	[&#039;Any Potato Peels&#039;] = { &#039;Potato Peels&#039;, &#039;Light Gray Potato Peels&#039;, &#039;Gray Potato Peels&#039;, &#039;Black Potato Peels&#039;, &#039;Brown Potato Peels&#039;, &#039;Red Potato Peels&#039;, &#039;Orange Potato Peels&#039;, &#039;Yellow Potato Peels&#039;, &#039;Lime Potato Peels&#039;, &#039;Green Potato Peels&#039;, &#039;Cyan Potato Peels&#039;, &#039;Light Blue Potato Peels&#039;, &#039;Blue Potato Peels&#039;, &#039;Purple Potato Peels&#039;, &#039;Magenta Potato Peels&#039;, &#039;Pink Potato Peels&#039; },&lt;br /&gt;
	&lt;br /&gt;
	-- Story Mode --&lt;br /&gt;
	[&#039;Damaged White Pumpkin&#039;] = { title = &#039;White Pumpkin&#039;, name = &#039;Damaged White Pumpkin&#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Tooltip colors --&lt;br /&gt;
local yellowTooltips = {&lt;br /&gt;
    &#039;Bottle o\&#039; Enchanting&#039;,&lt;br /&gt;
    &#039;Chainmail Boots&#039;,&lt;br /&gt;
    &#039;Chainmail Chestplate&#039;,&lt;br /&gt;
    &#039;Chainmail Helmet&#039;,&lt;br /&gt;
    &#039;Chainmail Leggings&#039;,&lt;br /&gt;
    &#039;Conduit&#039;,&lt;br /&gt;
    &#039;Creeper Charge Banner Pattern&#039;,&lt;br /&gt;
    &#039;Creeper Head&#039;,&lt;br /&gt;
    &#039;Disc Fragment 5&#039;,&lt;br /&gt;
    &#039;Dragon\&#039;s Breath&#039;,&lt;br /&gt;
    &#039;Echo Shard&#039;,&lt;br /&gt;
    &#039;Enchanted Book&#039;,&lt;br /&gt;
    &#039;Goat Horn&#039;,&lt;br /&gt;
    &#039;Heart of the Sea&#039;,&lt;br /&gt;
    &#039;Nautilus Shell&#039;,&lt;br /&gt;
    &#039;Ominous Banner&#039;,&lt;br /&gt;
    &#039;Piglin Head&#039;,&lt;br /&gt;
    &#039;Player Head&#039;,&lt;br /&gt;
    &#039;Recovery Compass&#039;,&lt;br /&gt;
    &#039;Skeleton Skull&#039;,&lt;br /&gt;
    &#039;Sniffer Egg&#039;,&lt;br /&gt;
    &#039;Snout Banner Pattern&#039;,&lt;br /&gt;
    &#039;Totem of Undying&#039;,&lt;br /&gt;
    &#039;Zombie Head&#039;,&lt;br /&gt;
}&lt;br /&gt;
for _, name in ipairs( yellowTooltips ) do&lt;br /&gt;
	aliases[name] = { title = &#039;&amp;amp;e&#039;, name = name }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local aquaTooltips = {&lt;br /&gt;
	&#039;Beacon&#039;,&lt;br /&gt;
	&#039;Enchanted Golden Apple&#039;,&lt;br /&gt;
    &#039;Flow Banner Pattern&#039;,&lt;br /&gt;
	&#039;Guster Banner Pattern&#039;,&lt;br /&gt;
	&#039;Nether Star&#039;,&lt;br /&gt;
    &#039;Skull Charge Banner Pattern&#039;,&lt;br /&gt;
    &#039;Thing Banner Pattern&#039;,&lt;br /&gt;
    &#039;Wither Skeleton Skull&#039;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;Golden Poisonous Potato&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
for _, name in ipairs( aquaTooltips ) do&lt;br /&gt;
	aliases[name] = { title = &#039;&amp;amp;b&#039;, name = name }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local magentaTooltips = {&lt;br /&gt;
	&#039;Barrier&#039;,&lt;br /&gt;
	&#039;Command Block&#039;,&lt;br /&gt;
	&#039;Chain Command Block&#039;,&lt;br /&gt;
	&#039;Debug Stick&#039;,&lt;br /&gt;
	&#039;Dragon Egg&#039;,&lt;br /&gt;
	&#039;Dragon Head&#039;,&lt;br /&gt;
	&#039;Elytra&#039;,&lt;br /&gt;
	&#039;Heavy Core&#039;,&lt;br /&gt;
	&#039;Jigsaw Block&#039;,&lt;br /&gt;
	&#039;Knowledge Book&#039;,&lt;br /&gt;
	&#039;Light&#039;,&lt;br /&gt;
	&#039;Repeating Command Block&#039;,&lt;br /&gt;
	&#039;Structure Block&#039;,&lt;br /&gt;
	&#039;Structure Void&#039;,&lt;br /&gt;
	&#039;Test Block&#039;,&lt;br /&gt;
	&#039;Test Instance Block&#039;,&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;Enchanted Golden Poisonous Potato&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
for _, name in ipairs( magentaTooltips ) do&lt;br /&gt;
	aliases[name] = { title = &#039;&amp;amp;d&#039;, name = name }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local greenTooltips = {&lt;br /&gt;
	&#039;Poisonous Potato Plant&#039;,&lt;br /&gt;
	&#039;Potatiesh, Greatstaff of the Peasant&#039;,&lt;br /&gt;
	&#039;Big Brain&#039;,&lt;br /&gt;
	&#039;Poisonous Polytra&#039;,&lt;br /&gt;
	&#039;Powerful Potato&#039;,&lt;br /&gt;
	&#039;Vicious Potato&#039;,&lt;br /&gt;
	&#039;Mega Spud Spawn Egg&#039;,&lt;br /&gt;
}&lt;br /&gt;
for _, name in ipairs( greenTooltips ) do&lt;br /&gt;
	aliases[name] = { title = &#039;&amp;amp;a&#039;, name = name }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Tools and weapons --&lt;br /&gt;
local tools = {&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Sword&#039;, 4, 1.6 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Sword&#039;, 5, 1.6 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Sword&#039;, 5, 1.6 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Sword&#039;, 6, 1.6 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Sword&#039;, 4, 1.6 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Sword&#039;, 7, 1.6 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Sword&#039;, 8, 1.6 },&lt;br /&gt;
	&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Pickaxe&#039;, 2, 1.2 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Pickaxe&#039;, 3, 1.2 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Pickaxe&#039;, 3, 1.2 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Pickaxe&#039;, 4, 1.2 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Pickaxe&#039;, 2, 1.2 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Pickaxe&#039;, 5, 1.2 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Pickaxe&#039;, 6, 1.2 },&lt;br /&gt;
	&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Axe&#039;, 7, 0.8 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Axe&#039;, 9, 0.8 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Axe&#039;, 9, 0.8 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Axe&#039;, 9, 0.9 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Axe&#039;, 7, 1 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Axe&#039;, 9, 1 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Axe&#039;, 10, 1 },&lt;br /&gt;
	&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Shovel&#039;, 2.5, 1 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Shovel&#039;, 3.5, 1 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Shovel&#039;, 3.5, 1 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Shovel&#039;, 4.5, 1 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Shovel&#039;, 2.5, 1 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Shovel&#039;, 5.5, 1 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Shovel&#039;, 6.5, 1 },&lt;br /&gt;
	&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Hoe&#039;, 1, 1 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Hoe&#039;, 1, 2 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Hoe&#039;, 1, 2 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Hoe&#039;, 1, 3 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Hoe&#039;, 1, 1 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Hoe&#039;, 1, 4 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Hoe&#039;, 1, 4 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local materialGroups = {}&lt;br /&gt;
local toolGroups = {}&lt;br /&gt;
&lt;br /&gt;
for _, toolProps in ipairs( tools ) do&lt;br /&gt;
	local aliasName = toolProps[1] .. &#039; &#039; .. toolProps[2]&lt;br /&gt;
	local damagedName = &#039;Damaged &#039; .. aliasName&lt;br /&gt;
	local text = &#039;/&amp;amp;7When in Main Hand:/&amp;amp;#160;&amp;amp;2&#039; .. toolProps[3] .. &#039; Attack Damage/&amp;amp;#160;&amp;amp;2&#039; .. toolProps[4] .. &#039; Attack Speed&#039;&lt;br /&gt;
	aliases[aliasName] = { title = aliasName, name = aliasName, text = text }&lt;br /&gt;
	aliases[damagedName] = { title = aliasName, name = damagedName, text = text }&lt;br /&gt;
	&lt;br /&gt;
	local materialGroup = toolProps[1]:lower()&lt;br /&gt;
	local toolGroup = toolProps[2]:lower()&lt;br /&gt;
	&lt;br /&gt;
	if toolProps[2] ~= &#039;Sword&#039; then&lt;br /&gt;
		if materialGroups[materialGroup] == nil then materialGroups[materialGroup] = {} end&lt;br /&gt;
		table.insert( materialGroups[materialGroup], aliases[aliasName] )&lt;br /&gt;
	end&lt;br /&gt;
	if toolGroups[toolGroup] == nil then toolGroups[toolGroup] = {} end&lt;br /&gt;
	table.insert( toolGroups[toolGroup], aliases[aliasName] )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for materialGroup, items in pairs( materialGroups ) do&lt;br /&gt;
	aliases[&#039;Any &#039; .. materialGroup .. &#039; tools&#039;] = items&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for toolGroup, items in pairs( toolGroups ) do&lt;br /&gt;
	aliases[&#039;Any &#039; .. toolGroup] = items&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Tools and weapons in Bedrock Edition --&lt;br /&gt;
local toolsBE = {&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Sword&#039;, 4 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Sword&#039;, 5 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Sword&#039;, 5 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Sword&#039;, 6 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Sword&#039;, 4 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Sword&#039;, 7 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Sword&#039;, 8 },&lt;br /&gt;
	&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Pickaxe&#039;, 2 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Pickaxe&#039;, 3 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Pickaxe&#039;, 3 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Pickaxe&#039;, 4 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Pickaxe&#039;, 2 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Pickaxe&#039;, 5 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Pickaxe&#039;, 6 },&lt;br /&gt;
	&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Axe&#039;, 3 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Axe&#039;, 4 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Axe&#039;, 4 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Axe&#039;, 5 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Axe&#039;, 3 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Axe&#039;, 6 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Axe&#039;, 7 },&lt;br /&gt;
	&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Shovel&#039;, 1 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Shovel&#039;, 2 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Shovel&#039;, 2 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Shovel&#039;, 3 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Shovel&#039;, 1 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Shovel&#039;, 4 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Shovel&#039;, 5 },&lt;br /&gt;
	&lt;br /&gt;
	{&#039;Wooden&#039;, &#039;Hoe&#039;, 2 },&lt;br /&gt;
	{&#039;Stone&#039;, &#039;Hoe&#039;, 3 },&lt;br /&gt;
	{&#039;Copper&#039;, &#039;Hoe&#039;, 3 },&lt;br /&gt;
	{&#039;Iron&#039;, &#039;Hoe&#039;, 4 },&lt;br /&gt;
	{&#039;Golden&#039;, &#039;Hoe&#039;, 2 },&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;Hoe&#039;, 5 },&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;Hoe&#039;, 6 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, toolProps in ipairs( toolsBE ) do&lt;br /&gt;
	local aliasName = toolProps[1] .. &#039; &#039; .. toolProps[2]&lt;br /&gt;
	aliases[aliasName .. &#039; BE&#039;] = { title = aliasName, name = aliasName, text = &#039;/&amp;amp;9+&#039; .. toolProps[3] .. &#039; Attack Damage&#039;}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Spears --&lt;br /&gt;
local spears = {&lt;br /&gt;
	{ &#039;Wooden&#039;,    1.54, 1 },&lt;br /&gt;
	{ &#039;Stone&#039;,     1.33, 2 },&lt;br /&gt;
	{ &#039;Copper&#039;,    1.18, 2 },&lt;br /&gt;
	{ &#039;Iron&#039;,      1.05, 3 },&lt;br /&gt;
	{ &#039;Golden&#039;,    1.05, 1 },&lt;br /&gt;
	{ &#039;Diamond&#039;,   0.95, 4 },&lt;br /&gt;
	{ &#039;Netherite&#039;, 0.87, 5 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, toolProps in ipairs( spears ) do&lt;br /&gt;
	local aliasName = toolProps[1] .. &#039; Spear&#039;&lt;br /&gt;
	local damagedName = &#039;Damaged &#039; .. aliasName&lt;br /&gt;
	local text = &#039;/&amp;amp;7When in Main Hand:/&amp;amp;#160;&amp;amp;2&#039; .. toolProps[2] .. &#039; Attack Speed//&#039; ..&lt;br /&gt;
	             &#039;&amp;amp;7When held:/&amp;amp;#160;&amp;amp;2&#039; .. toolProps[3] .. &#039; Attack Damage&#039;&lt;br /&gt;
&lt;br /&gt;
	aliases[aliasName]   = { title = aliasName, name = aliasName, text = text }&lt;br /&gt;
	aliases[damagedName] = { title = aliasName, name = damagedName, text = text }&lt;br /&gt;
&lt;br /&gt;
	local materialGroup = toolProps[1]:lower()&lt;br /&gt;
	if not materialGroups[materialGroup] then materialGroups[materialGroup] = {} end&lt;br /&gt;
	table.insert( materialGroups[materialGroup], aliases[aliasName] )&lt;br /&gt;
&lt;br /&gt;
	if not toolGroups[&#039;spear&#039;] then toolGroups[&#039;spear&#039;] = {} end&lt;br /&gt;
	table.insert( toolGroups[&#039;spear&#039;], aliases[aliasName] )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Armor tooltips --&lt;br /&gt;
local head = {&lt;br /&gt;
	{&#039;Leather Cap&#039;, 1 },&lt;br /&gt;
	{&#039;Copper Helmet&#039;, 2 },&lt;br /&gt;
	{&#039;Chainmail Helmet&#039;, 2, title = &#039;&amp;amp;eChainmail Helmet&#039; },&lt;br /&gt;
	{&#039;Iron Helmet&#039;, 2 },&lt;br /&gt;
	{&#039;Golden Helmet&#039;, 2 },&lt;br /&gt;
	{&#039;Diamond Helmet&#039;, 3, 2 },&lt;br /&gt;
	{&#039;Netherite Helmet&#039;, 3, 3, 1 },&lt;br /&gt;
	{&#039;Turtle Shell&#039;, 2 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local chest = {&lt;br /&gt;
	{&#039;Leather Tunic&#039;, 3 },&lt;br /&gt;
	{&#039;Copper Chestplate&#039;, 4 },&lt;br /&gt;
	{&#039;Chainmail Chestplate&#039;, 5, title = &#039;&amp;amp;eChainmail Chestplate&#039; },&lt;br /&gt;
	{&#039;Iron Chestplate&#039;, 6 },&lt;br /&gt;
	{&#039;Golden Chestplate&#039;, 5 },&lt;br /&gt;
	{&#039;Diamond Chestplate&#039;, 8, 2 },&lt;br /&gt;
	{&#039;Netherite Chestplate&#039;, 8, 3, 1 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local legs = {&lt;br /&gt;
	{&#039;Leather Pants&#039;, 2 },&lt;br /&gt;
	{&#039;Copper Leggings&#039;, 5 },&lt;br /&gt;
	{&#039;Chainmail Leggings&#039;, 4, title = &#039;&amp;amp;eChainmail Leggings&#039; },&lt;br /&gt;
	{&#039;Iron Leggings&#039;, 5 },&lt;br /&gt;
	{&#039;Golden Leggings&#039;, 3 },&lt;br /&gt;
	{&#039;Diamond Leggings&#039;, 6, 2 },&lt;br /&gt;
	{&#039;Netherite Leggings&#039;, 6, 3, 1 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local feet = {&lt;br /&gt;
	{&#039;Leather Boots&#039;, 1 },&lt;br /&gt;
	{&#039;Copper Boots&#039;, 1 },&lt;br /&gt;
	{&#039;Chainmail Boots&#039;, 1, title = &#039;&amp;amp;eChainmail Boots&#039; },&lt;br /&gt;
	{&#039;Iron Boots&#039;, 2 },&lt;br /&gt;
	{&#039;Golden Boots&#039;, 1 },&lt;br /&gt;
	{&#039;Diamond Boots&#039;, 3, 2 },&lt;br /&gt;
	{&#039;Netherite Boots&#039;, 3, 3, 1 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local body = {&lt;br /&gt;
	{&#039;Leather Horse Armor&#039;, 3 },&lt;br /&gt;
	{&#039;Copper Horse Armor&#039;, 4 },&lt;br /&gt;
	{&#039;Iron Horse Armor&#039;, 5 },&lt;br /&gt;
	{&#039;Golden Horse Armor&#039;, 7 },&lt;br /&gt;
	{&#039;Diamond Horse Armor&#039;, 11, 2 },&lt;br /&gt;
	{&#039;Wolf Armor&#039;, 11 },&lt;br /&gt;
	{&#039;Copper Nautilus Armor&#039;, 4 },&lt;br /&gt;
	{&#039;Iron Nautilus Armor&#039;, 5 },&lt;br /&gt;
	{&#039;Golden Nautilus Armor&#039;, 7 },&lt;br /&gt;
	{&#039;Diamond Nautilus Armor&#039;, 11, 2 },&lt;br /&gt;
	{&#039;Netherite Nautilus Armor&#039;, 19, 3, 1 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local bodyParts = {&lt;br /&gt;
    {head, &amp;quot;on Head&amp;quot;},&lt;br /&gt;
    {chest, &amp;quot;on Chest&amp;quot;},&lt;br /&gt;
    {legs, &amp;quot;on Legs&amp;quot;},&lt;br /&gt;
    {feet, &amp;quot;on Feet&amp;quot;},&lt;br /&gt;
    {body, &amp;quot;equipped&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local trimMaterial = {&lt;br /&gt;
	{&#039;Quartz&#039;, &#039;&amp;amp;h&#039;},&lt;br /&gt;
	{&#039;Iron&#039;, &#039;&amp;amp;i&#039;},&lt;br /&gt;
	{&#039;Netherite&#039;, &#039;&amp;amp;j&#039;},&lt;br /&gt;
	{&#039;Redstone&#039;, &#039;&amp;amp;y&#039;},&lt;br /&gt;
	{&#039;Copper&#039;, &#039;&amp;amp;z&#039;},&lt;br /&gt;
	{&#039;Gold&#039;, &#039;&amp;amp;p&#039;},&lt;br /&gt;
	{&#039;Emerald&#039;, &#039;&amp;amp;q&#039;},&lt;br /&gt;
	{&#039;Diamond&#039;, &#039;&amp;amp;s&#039;},&lt;br /&gt;
	{&#039;Lapis&#039;, &#039;&amp;amp;t&#039;},&lt;br /&gt;
	{&#039;Amethyst&#039;, &#039;&amp;amp;u&#039;},&lt;br /&gt;
	{&#039;Resin&#039;, &#039;&amp;amp;v&#039;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, bodyPart in ipairs(bodyParts) do&lt;br /&gt;
    local items = bodyPart[1]&lt;br /&gt;
    local bodyPartName = bodyPart[2]&lt;br /&gt;
    &lt;br /&gt;
    for _, toolProps in ipairs(items) do&lt;br /&gt;
        local aliasName = toolProps[1]&lt;br /&gt;
        local aliasTitle = toolProps.title or aliasName&lt;br /&gt;
        local damagedName&lt;br /&gt;
        if string.find(aliasName, &amp;quot;Horse Armor&amp;quot;) or string.find(aliasName, &amp;quot;Nautilus Armor&amp;quot;) then&lt;br /&gt;
            damagedName = aliasName &lt;br /&gt;
        else&lt;br /&gt;
            damagedName = &#039;Damaged &#039; .. aliasName&lt;br /&gt;
        end     &lt;br /&gt;
        local text = &#039;/&amp;amp;7When &#039; .. bodyPartName .. &#039;:/&amp;amp;9+&#039; .. toolProps[2] .. &#039; Armor/&#039;&lt;br /&gt;
        if toolProps[3] then&lt;br /&gt;
            text = text .. &#039;+&#039; .. toolProps[3] .. &#039; Armor Toughness/&#039;&lt;br /&gt;
        end&lt;br /&gt;
        if toolProps[4] then&lt;br /&gt;
            text = text .. &#039;+&#039; .. toolProps[4] .. &#039; Knockback Resistance&#039;&lt;br /&gt;
        end&lt;br /&gt;
        aliases[aliasName] = { title = aliasTitle, name = aliasName, text = text }&lt;br /&gt;
        aliases[damagedName] = { title = aliasTitle, name = damagedName, text = text }&lt;br /&gt;
        if bodyPartName ~= &amp;quot;equipped&amp;quot; then&lt;br /&gt;
			for _, materialType in ipairs( trimMaterial ) do&lt;br /&gt;
	        	local trimName = materialType[1] .. &#039; Trim &#039; .. aliasName&lt;br /&gt;
				local trimText = &#039;&amp;amp;7Upgrade:/&amp;amp;#160;&#039; .. materialType[2] .. &#039;Armor Trim/&amp;amp;#160;&#039; .. materialType[1] .. &#039; Material/&#039;&lt;br /&gt;
				aliases[trimName] = { title = aliasTitle, name = trimName, text = trimText .. text }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Joke armor tooltips (To keep amber from applying to copper armor since it was added after 24w14potato) --&lt;br /&gt;
local head = {&lt;br /&gt;
	{&#039;Leather Cap&#039;, 1 },&lt;br /&gt;
	{&#039;Chainmail Helmet&#039;, 2, title = &#039;&amp;amp;eChainmail Helmet&#039; },&lt;br /&gt;
	{&#039;Iron Helmet&#039;, 2 },&lt;br /&gt;
	{&#039;Golden Helmet&#039;, 2 },&lt;br /&gt;
	{&#039;Diamond Helmet&#039;, 3, 2 },&lt;br /&gt;
	{&#039;Netherite Helmet&#039;, 3, 3, 1 },&lt;br /&gt;
	{&#039;Turtle Shell&#039;, 2 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local chest = {&lt;br /&gt;
	{&#039;Leather Tunic&#039;, 3 },&lt;br /&gt;
	{&#039;Chainmail Chestplate&#039;, 5, title = &#039;&amp;amp;eChainmail Chestplate&#039; },&lt;br /&gt;
	{&#039;Iron Chestplate&#039;, 6 },&lt;br /&gt;
	{&#039;Golden Chestplate&#039;, 5 },&lt;br /&gt;
	{&#039;Diamond Chestplate&#039;, 8, 2 },&lt;br /&gt;
	{&#039;Netherite Chestplate&#039;, 8, 3, 1 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local legs = {&lt;br /&gt;
	{&#039;Leather Pants&#039;, 2 },&lt;br /&gt;
	{&#039;Chainmail Leggings&#039;, 4, title = &#039;&amp;amp;eChainmail Leggings&#039; },&lt;br /&gt;
	{&#039;Iron Leggings&#039;, 5 },&lt;br /&gt;
	{&#039;Golden Leggings&#039;, 3 },&lt;br /&gt;
	{&#039;Diamond Leggings&#039;, 6, 2 },&lt;br /&gt;
	{&#039;Netherite Leggings&#039;, 6, 3, 1 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local feet = {&lt;br /&gt;
	{&#039;Leather Boots&#039;, 1 },&lt;br /&gt;
	{&#039;Chainmail Boots&#039;, 1, title = &#039;&amp;amp;eChainmail Boots&#039; },&lt;br /&gt;
	{&#039;Iron Boots&#039;, 2 },&lt;br /&gt;
	{&#039;Golden Boots&#039;, 1 },&lt;br /&gt;
	{&#039;Diamond Boots&#039;, 3, 2 },&lt;br /&gt;
	{&#039;Netherite Boots&#039;, 3, 3, 1 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local bodyParts = {&lt;br /&gt;
    {head, &amp;quot;on Head&amp;quot;},&lt;br /&gt;
    {chest, &amp;quot;on Chest&amp;quot;},&lt;br /&gt;
    {legs, &amp;quot;on Legs&amp;quot;},&lt;br /&gt;
    {feet, &amp;quot;on Feet&amp;quot;},&lt;br /&gt;
    {body, &amp;quot;equipped&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local trimMaterial = {&lt;br /&gt;
	{&#039;Amber&#039;, &#039;&amp;amp;6&#039;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, bodyPart in ipairs(bodyParts) do&lt;br /&gt;
    local items = bodyPart[1]&lt;br /&gt;
    local bodyPartName = bodyPart[2]&lt;br /&gt;
    &lt;br /&gt;
    for _, toolProps in ipairs(items) do&lt;br /&gt;
        local aliasName = toolProps[1]&lt;br /&gt;
        local aliasTitle = toolProps.title or aliasName&lt;br /&gt;
        local damagedName&lt;br /&gt;
        if string.find(aliasName, &amp;quot;Horse Armor&amp;quot;) or string.find(aliasName, &amp;quot;Nautilus Armor&amp;quot;) then&lt;br /&gt;
            damagedName = aliasName &lt;br /&gt;
        else&lt;br /&gt;
            damagedName = &#039;Damaged &#039; .. aliasName&lt;br /&gt;
        end     &lt;br /&gt;
        local text = &#039;/&amp;amp;7When &#039; .. bodyPartName .. &#039;:/&amp;amp;9+&#039; .. toolProps[2] .. &#039; Armor/&#039;&lt;br /&gt;
        if toolProps[3] then&lt;br /&gt;
            text = text .. &#039;+&#039; .. toolProps[3] .. &#039; Armor Toughness/&#039;&lt;br /&gt;
        end&lt;br /&gt;
        if toolProps[4] then&lt;br /&gt;
            text = text .. &#039;+&#039; .. toolProps[4] .. &#039; Knockback Resistance&#039;&lt;br /&gt;
        end&lt;br /&gt;
        aliases[aliasName] = { title = aliasTitle, name = aliasName, text = text }&lt;br /&gt;
        aliases[damagedName] = { title = aliasTitle, name = damagedName, text = text }&lt;br /&gt;
        if bodyPartName ~= &amp;quot;equipped&amp;quot; then&lt;br /&gt;
			for _, materialType in ipairs( trimMaterial ) do&lt;br /&gt;
	        	local trimName = materialType[1] .. &#039; Trim &#039; .. aliasName&lt;br /&gt;
				local trimText = &#039;&amp;amp;7Upgrade:/&amp;amp;#160;&#039; .. materialType[2] .. &#039;Armor Trim/&amp;amp;#160;&#039; .. materialType[1] .. &#039; Material/&#039;&lt;br /&gt;
				aliases[trimName] = { title = aliasTitle, name = trimName, text = trimText .. text }&lt;br /&gt;
			end&lt;br /&gt;
        end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Lists of item variants --&lt;br /&gt;
local itemVariants = {&lt;br /&gt;
	[&#039;Small Flower&#039;] = { &#039;Oxeye Daisy&#039;, &#039;Cornflower&#039;, &#039;Lily of the Valley&#039;, &#039;Wither Rose&#039;, &#039;Red Tulip&#039;, &#039;Orange Tulip&#039;, &#039;White Tulip&#039;, &#039;Pink Tulip&#039;, &#039;Azure Bluet&#039;, &#039;Allium&#039;, &#039;Blue Orchid&#039;, &#039;Poppy&#039;, &#039;Dandelion&#039;, &#039;Torchflower&#039;, &#039;Closed Eyeblossom&#039;, &#039;Open Eyeblossom&#039; },&lt;br /&gt;
	[&#039;Eyeblossom&#039;] = { &#039;Closed Eyeblossom&#039;, &#039;Open Eyeblossom&#039; },&lt;br /&gt;
	[&#039;Mushroom&#039;] = { &#039;Red Mushroom&#039;, &#039;Brown Mushroom&#039; },&lt;br /&gt;
	[&#039;Quartz Block&#039;] = { &#039;Block of Quartz&#039;, &#039;Chiseled Quartz Block&#039;, &#039;Quartz Pillar&#039; },&lt;br /&gt;
	[&#039;Red Sandstone&#039;] = { &#039;Red Sandstone&#039;, &#039;Cut Red Sandstone&#039;, &#039;Chiseled Red Sandstone&#039;, &#039;Smooth Red Sandstone&#039; },&lt;br /&gt;
	[&#039;Sandstone&#039;] = { &#039;Sandstone&#039;, &#039;Cut Sandstone&#039;, &#039;Chiseled Sandstone&#039;, &#039;Smooth Sandstone&#039; },&lt;br /&gt;
	[&#039;Stone Bricks&#039;] = { &#039;Stone Bricks&#039;, &#039;Mossy Stone Bricks&#039;, &#039;Cracked Stone Bricks&#039;, &#039;Chiseled Stone Bricks&#039; },&lt;br /&gt;
	[&#039;Stone Slab&#039;] = { &#039;Stone Slab&#039;, &#039;Cobblestone Slab&#039;, &#039;Mossy Cobblestone Slab&#039;, &#039;Smooth Stone Slab&#039;, &#039;Stone Brick Slab&#039;, &#039;Mossy Stone Brick Slab&#039;, &lt;br /&gt;
		&#039;Granite Slab&#039;, &#039;Polished Granite Slab&#039;, &#039;Diorite Slab&#039;, &#039;Polished Diorite Slab&#039;, &#039;Andesite Slab&#039;, &#039;Polished Andesite Slab&#039;, &lt;br /&gt;
		&#039;Cobbled Deepslate Slab&#039;, &#039;Polished Deepslate Slab&#039;, &#039;Deepslate Brick Slab&#039;, &#039;Deepslate Tile Slab&#039;, &#039;Brick Slab&#039;, &#039;Mud Brick Slab&#039;, &#039;Resin Brick Slab&#039;,&lt;br /&gt;
		&#039;Sandstone Slab&#039;, &#039;Smooth Sandstone Slab&#039;, &#039;Cut Sandstone Slab&#039;, &#039;Red Sandstone Slab&#039;, &#039;Smooth Red Sandstone Slab&#039;, &#039;Cut Red Sandstone Slab&#039;, &#039;Prismarine Slab&#039;, &#039;Prismarine Brick Slab&#039;, &#039;Dark Prismarine Slab&#039;, &lt;br /&gt;
		&#039;Nether Brick Slab&#039;, &#039;Red Nether Brick Slab&#039;, &#039;Blackstone Slab&#039;, &#039;Polished Blackstone Slab&#039;, &#039;Polished Blackstone Brick Slab&#039;, &#039;End Stone Brick Slab&#039;, &#039;Purpur Slab&#039;, &#039;Quartz Slab&#039;, &#039;Smooth Quartz Slab&#039;, &#039;Petrified Oak Slab&#039; },&lt;br /&gt;
	[&#039;Stone Stairs&#039;] = { &#039;Stone Stairs&#039;, &#039;Cobblestone Stairs&#039;, &#039;Mossy Cobblestone Stairs&#039;, &#039;Stone Brick Stairs&#039;, &#039;Mossy Stone Brick Stairs&#039;, &lt;br /&gt;
		&#039;Granite Stairs&#039;, &#039;Polished Granite Stairs&#039;, &#039;Diorite Stairs&#039;, &#039;Polished Diorite Stairs&#039;, &#039;Andesite Stairs&#039;, &#039;Polished Andesite Stairs&#039;, &lt;br /&gt;
		&#039;Cobbled Deepslate Stairs&#039;, &#039;Polished Deepslate Stairs&#039;, &#039;Deepslate Brick Stairs&#039;, &#039;Deepslate Tile Stairs&#039;, &#039;Brick Stairs&#039;, &#039;Mud Brick Stairs&#039;, &#039;Resin Brick Stairs&#039;, &lt;br /&gt;
		&#039;Sandstone Stairs&#039;, &#039;Smooth Sandstone Stairs&#039;, &#039;Red Sandstone Stairs&#039;, &#039;Smooth Red Sandstone Stairs&#039;, &#039;Prismarine Stairs&#039;, &#039;Prismarine Brick Stairs&#039;, &#039;Dark Prismarine Stairs&#039;, &lt;br /&gt;
		&#039;Nether Brick Stairs&#039;, &#039;Red Nether Brick Stairs&#039;, &#039;Blackstone Stairs&#039;, &#039;Polished Blackstone Stairs&#039;, &#039;Polished Blackstone Brick Stairs&#039;, &#039;End Stone Brick Stairs&#039;, &#039;Purpur Stairs&#039;, &#039;Quartz Stairs&#039;, &#039;Smooth Quartz Stairs&#039; },&lt;br /&gt;
	[&#039;Wall&#039;] = { &#039;Cobblestone Wall&#039;, &#039;Mossy Cobblestone Wall&#039;, &#039;Stone Brick Wall&#039;, &#039;Mossy Stone Brick Wall&#039;, &#039;Granite Wall&#039;, &#039;Diorite Wall&#039;, &#039;Andesite Wall&#039;, &lt;br /&gt;
		&#039;Cobbled Deepslate Wall&#039;, &#039;Polished Deepslate Wall&#039;, &#039;Deepslate Brick Wall&#039;, &#039;Deepslate Tile Wall&#039;, &#039;Brick Wall&#039;, &#039;Mud Brick Wall&#039;, &#039;Resin Brick Wall&#039;, &#039;Sandstone Wall&#039;, &#039;Red Sandstone Wall&#039;, &#039;Prismarine Wall&#039;, &lt;br /&gt;
		&#039;Nether Brick Wall&#039;, &#039;Red Nether Brick Wall&#039;, &#039;Blackstone Wall&#039;, &#039;Polished Blackstone Wall&#039;, &#039;Polished Blackstone Brick Wall&#039;, &#039;End Stone Brick Wall&#039; },&lt;br /&gt;
	[&#039;Purpur Block&#039;] = { &#039;Purpur Block&#039;, &#039;Purpur Pillar&#039; },&lt;br /&gt;
	[&#039;Stone&#039;] = { &#039;Stone&#039;, &#039;Andesite&#039;, &#039;Granite&#039;, &#039;Diorite&#039;, &#039;Polished Andesite&#039;, &#039;Polished Granite&#039;, &#039;Polished Diorite&#039; },&lt;br /&gt;
	[&#039;Resin Block&#039;] = { &#039;Block of Resin&#039;, &#039;Resin Bricks&#039;, &#039;Chiseled Resin Bricks&#039; },&lt;br /&gt;
	[&#039;Tulip&#039;] = { &#039;Red Tulip&#039;, &#039;Orange Tulip&#039;, &#039;White Tulip&#039;, &#039;Pink Tulip&#039; },&lt;br /&gt;
	[&#039;Prismarine&#039;] = { &#039;Prismarine&#039;, &#039;Prismarine Bricks&#039;, &#039;Dark Prismarine&#039; },&lt;br /&gt;
	[&#039;Ore&#039;] = { &#039;Coal Ore&#039;, &#039;Iron Ore&#039;, &#039;Gold Ore&#039;, &#039;Lapis Lazuli Ore&#039;, &#039;Redstone Ore&#039;, &#039;Emerald Ore&#039;, &#039;Diamond Ore&#039;, &#039;Nether Quartz Ore&#039;, &#039;Nether Gold Ore&#039;, &#039;Deepslate Coal Ore&#039;, &lt;br /&gt;
		&#039;Deepslate Copper Ore&#039;, &#039;Deepslate Emerald Ore&#039;, &#039;Deepslate Iron Ore&#039;, &#039;Deepslate Gold Ore&#039;, &#039;Deepslate Lapis Lazuli Ore&#039;, &#039;Deepslate Redstone Ore&#039;, &#039;Deepslate Diamond Ore&#039;},&lt;br /&gt;
	[&#039;Dead Coral Block&#039;] = { &#039;Dead Tube Coral Block&#039;, &#039;Dead Brain Coral Block&#039;, &#039;Dead Bubble Coral Block&#039;, &#039;Dead Fire Coral Block&#039;, &#039;Dead Horn Coral Block&#039; },&lt;br /&gt;
	[&#039;Coral Block&#039;] = { &#039;Tube Coral Block&#039;, &#039;Brain Coral Block&#039;, &#039;Bubble Coral Block&#039;, &#039;Fire Coral Block&#039;, &#039;Horn Coral Block&#039; },&lt;br /&gt;
	[&#039;Dead Coral&#039;] = { &#039;Dead Tube Coral&#039;, &#039;Dead Brain Coral&#039;, &#039;Dead Bubble Coral&#039;, &#039;Dead Fire Coral&#039;, &#039;Dead Horn Coral&#039; },&lt;br /&gt;
	[&#039;Dead Coral Fan&#039;] = { &#039;Dead Tube Coral Fan&#039;, &#039;Dead Brain Coral Fan&#039;, &#039;Dead Bubble Coral Fan&#039;, &#039;Dead Fire Coral Fan&#039;, &#039;Dead Horn Coral Fan&#039; },&lt;br /&gt;
	[&#039;Coral&#039;] = { &#039;Tube Coral&#039;, &#039;Brain Coral&#039;, &#039;Bubble Coral&#039;, &#039;Fire Coral&#039;, &#039;Horn Coral&#039; },&lt;br /&gt;
	[&#039;Coral Fan&#039;] = { &#039;Tube Coral Fan&#039;, &#039;Brain Coral Fan&#039;, &#039;Bubble Coral Fan&#039;, &#039;Fire Coral Fan&#039;, &#039;Horn Coral Fan&#039; },&lt;br /&gt;
	[&#039;Torch&#039;] = { &#039;Torch&#039;, &#039;Soul Torch&#039; },&lt;br /&gt;
	[&#039;Lantern&#039;] = { &#039;Lantern&#039;, &#039;Soul Lantern&#039; },&lt;br /&gt;
	[&#039;Fungus&#039;] = { &#039;Crimson Fungus&#039;, &#039;Warped Fungus&#039; },&lt;br /&gt;
	[&#039;Fungi&#039;] = { &#039;Crimson Fungus&#039;, &#039;Warped Fungus&#039; },&lt;br /&gt;
	[&#039;Roots&#039;] = { &#039;Crimson Roots&#039;, &#039;Warped Roots&#039; },&lt;br /&gt;
	[&#039;Nylium&#039;] = { &#039;Crimson Nylium&#039;, &#039;Warped Nylium&#039; },&lt;br /&gt;
	[&#039;Soul Sand&#039;] = { &#039;Soul Sand&#039;, &#039;Soul Soil&#039; },&lt;br /&gt;
	[&#039;Campfire&#039;] = { &#039;Campfire&#039;, &#039;Soul Campfire&#039; },&lt;br /&gt;
	[&#039;Blackstone&#039;] = { &#039;Blackstone&#039;, &#039;Polished Blackstone&#039;, &#039;Chiseled Polished Blackstone&#039;, &#039;Polished Blackstone Bricks&#039;, &#039;Cracked Polished Blackstone Bricks&#039; },&lt;br /&gt;
	[&#039;Stone Button&#039;] = { &#039;Stone Button&#039;, &#039;Polished Blackstone Button&#039; },&lt;br /&gt;
	[&#039;Stone Pressure Plate&#039;] = { &#039;Stone Pressure Plate&#039;, &#039;Polished Blackstone Pressure Plate&#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Copper --&lt;br /&gt;
local copperstuff = {&lt;br /&gt;
	&#039;Block of Copper&#039;,&lt;br /&gt;
	&#039;Cut Copper&#039;,&lt;br /&gt;
	&#039;Cut Copper Stairs&#039;,&lt;br /&gt;
	&#039;Cut Copper Slab&#039;,&lt;br /&gt;
	&#039;Chiseled Copper&#039;,&lt;br /&gt;
	&#039;Copper Grate&#039;,&lt;br /&gt;
	&#039;Copper Bulb&#039;,&lt;br /&gt;
	&#039;Copper Door&#039;,&lt;br /&gt;
	&#039;Copper Trapdoor&#039;,&lt;br /&gt;
	&#039;Copper Chest&#039;,&lt;br /&gt;
	&#039;Copper Bars&#039;,&lt;br /&gt;
	&#039;Copper Chain&#039;,&lt;br /&gt;
	&#039;Copper Lantern&#039;,&lt;br /&gt;
	&#039;Copper Golem Statue&#039;,&lt;br /&gt;
	&#039;Lightning Rod&#039;,&lt;br /&gt;
}&lt;br /&gt;
local coppervariants = { &#039;&#039;, &#039;Exposed &#039;, &#039;Weathered &#039;, &#039;Oxidized &#039; }&lt;br /&gt;
for _, copper in ipairs( copperstuff ) do&lt;br /&gt;
	itemVariants[&#039;Unwaxed &#039; .. copper] = {}&lt;br /&gt;
	itemVariants[&#039;Waxed &#039; .. copper] = {}&lt;br /&gt;
	for _, coppervariant in ipairs( coppervariants ) do&lt;br /&gt;
		local name = coppervariant .. copper&lt;br /&gt;
		if copper == &#039;Block of Copper&#039; and coppervariant ~= &#039;&#039; then&lt;br /&gt;
			name = coppervariant .. &#039;Copper&#039;&lt;br /&gt;
		end&lt;br /&gt;
		table.insert( itemVariants[&#039;Unwaxed &#039; .. copper], name )&lt;br /&gt;
		table.insert( itemVariants[&#039;Waxed &#039; .. copper], &#039;Waxed &#039; .. name )&lt;br /&gt;
	end&lt;br /&gt;
	itemVariants[copper] = {}&lt;br /&gt;
	for _, copperitem in ipairs( itemVariants[&#039;Unwaxed &#039; .. copper] ) do&lt;br /&gt;
		table.insert( itemVariants[copper], copperitem )&lt;br /&gt;
	end&lt;br /&gt;
	for _, copperitem in ipairs( itemVariants[&#039;Waxed &#039; .. copper] ) do&lt;br /&gt;
		table.insert( itemVariants[copper], copperitem )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for aliasName, aliasItems in pairs( itemVariants ) do&lt;br /&gt;
	aliases[&#039;Any &#039; .. aliasName] = aliasItems&lt;br /&gt;
	aliases[&#039;Matching &#039; .. aliasName] = aliasItems&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Discs --&lt;br /&gt;
local discs = { &lt;br /&gt;
	{ &#039;13&#039;,                  &#039;C418&#039;,           &#039;&#039;,          &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Cat&#039;,                 &#039;C418&#039;,           &#039;cat&#039;,       &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Blocks&#039;,              &#039;C418&#039;,           &#039;blocks&#039;,    &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Chirp&#039;,               &#039;C418&#039;,           &#039;chirp&#039;,     &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Far&#039;,                 &#039;C418&#039;,           &#039;far&#039;,       &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Mall&#039;,                &#039;C418&#039;,           &#039;mall&#039;,      &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Mellohi&#039;,             &#039;C418&#039;,           &#039;mellohi&#039;,   &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Stal&#039;,                &#039;C418&#039;,           &#039;stal&#039;,      &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Strad&#039;,               &#039;C418&#039;,           &#039;strad&#039;,     &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Ward&#039;,                &#039;C418&#039;,           &#039;ward&#039;,      &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;11&#039;,                  &#039;C418&#039;,           &#039;&#039;,          &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Wait&#039;,                &#039;C418&#039;,           &#039;wait&#039;,      &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Otherside&#039;,           &#039;Lena Raine&#039;,     &#039;otherside&#039;, &#039;&amp;amp;b&#039; },&lt;br /&gt;
	{ &#039;Pigstep&#039;,             &#039;Lena Raine&#039;,     &#039;&#039;,          &#039;&amp;amp;b&#039; },&lt;br /&gt;
	{ &#039;5&#039;,                   &#039;Samuel Åberg&#039;,   &#039;&#039;,          &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Relic&#039;,               &#039;Aaron Cherof&#039;,   &#039;&#039;,          &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Precipice&#039;,           &#039;Aaron Cherof&#039;,   &#039;&#039;,          &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Creator&#039;,             &#039;Lena Raine&#039;,     &#039;&#039;,          &#039;&amp;amp;b&#039; },&lt;br /&gt;
	{ &#039;Creator (Music Box)&#039;, &#039;Lena Raine&#039;,     &#039;&#039;,          &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Tears&#039;,               &#039;Amos Roddy&#039;,     &#039;&#039;,          &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Lava Chicken&#039;,        &#039;Hyper Potions&#039;,  &#039;&#039;,          &#039;&amp;amp;b&#039; },&lt;br /&gt;
}&lt;br /&gt;
for _, disc in ipairs( discs ) do&lt;br /&gt;
    local rarityColor = disc[4]&lt;br /&gt;
	local name = &#039;Music Disc &#039; .. disc[1]&lt;br /&gt;
	local artist = disc[2]&lt;br /&gt;
	local trackname = disc[1]&lt;br /&gt;
	if disc[3] ~= &#039;&#039; then&lt;br /&gt;
		trackname = disc[3]&lt;br /&gt;
	end&lt;br /&gt;
	aliases[name] = { title = rarityColor .. &#039;Music Disc&#039;, name = name, text = &#039;&amp;amp;7&#039; .. artist .. &#039; - &#039; .. trackname }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Disc Fragments --&lt;br /&gt;
local disc_fragments = { &lt;br /&gt;
	{ &#039;5&#039;,    },&lt;br /&gt;
}&lt;br /&gt;
for _, disc_fragment in ipairs( disc_fragments ) do&lt;br /&gt;
	local name = &#039;Disc Fragment &#039; .. disc_fragment[1]&lt;br /&gt;
	local trackname = disc_fragment[1]&lt;br /&gt;
	if disc_fragment[2] ~= nil then&lt;br /&gt;
		trackname = disc_fragment[2]&lt;br /&gt;
	end&lt;br /&gt;
	aliases[name] = { title = &#039;&amp;amp;eDisc Fragment&#039;, name = name, text = &#039;&amp;amp;7Music Disc - &#039; .. trackname }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Paintings --&lt;br /&gt;
local paintings = { &lt;br /&gt;
	{ &#039;Kebab med tre pepperoni&#039;,    &#039;Kristoffer Zetterstrand&#039;, &#039;1x1&#039; },&lt;br /&gt;
	{ &#039;de_aztec&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;1x1&#039; },&lt;br /&gt;
	{ &#039;Albanian&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;1x1&#039; },&lt;br /&gt;
	{ &#039;Target Successfully Bombed&#039;, &#039;Kristoffer Zetterstrand&#039;, &#039;1x1&#039; },&lt;br /&gt;
	{ &#039;Paradisträd&#039;,                &#039;Kristoffer Zetterstrand&#039;, &#039;1x1&#039; },&lt;br /&gt;
	{ &#039;Wasteland&#039;,                  &#039;Kristoffer Zetterstrand&#039;, &#039;1x1&#039; },&lt;br /&gt;
	{ &#039;Meditative&#039;,                 &#039;Sarah Boeving&#039;,           &#039;1x1&#039; },&lt;br /&gt;
	{ &#039;Wanderer&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;1x2&#039; },&lt;br /&gt;
	{ &#039;Graham&#039;,                     &#039;Kristoffer Zetterstrand&#039;, &#039;1x2&#039; },&lt;br /&gt;
	{ &#039;Prairie Ride&#039;,               &#039;Sarah Boeving&#039;,           &#039;1x2&#039; },&lt;br /&gt;
	{ &#039;The Pool&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;2x1&#039; },&lt;br /&gt;
	{ &#039;Bonjour Monsieur Courbet&#039;,   &#039;Kristoffer Zetterstrand&#039;, &#039;2x1&#039; },&lt;br /&gt;
	{ &#039;sunset_dense&#039;,               &#039;Kristoffer Zetterstrand&#039;, &#039;2x1&#039; },&lt;br /&gt;
	{ &#039;Seaside&#039;,                    &#039;Kristoffer Zetterstrand&#039;, &#039;2x1&#039; },&lt;br /&gt;
	{ &#039;Creebet&#039;,                    &#039;Kristoffer Zetterstrand&#039;, &#039;2x1&#039; },&lt;br /&gt;
	{ &#039;Match&#039;,                      &#039;Kristoffer Zetterstrand&#039;, &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Bust&#039;,                       &#039;Kristoffer Zetterstrand&#039;, &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;The Stage Is Set&#039;,           &#039;Kristoffer Zetterstrand&#039;, &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;The void&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Skull and Roses&#039;,            &#039;Kristoffer Zetterstrand&#039;, &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Wither&#039;,                     &#039;Mojang&#039;,                  &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Baroque&#039;,                    &#039;Sarah Boeving&#039;,           &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Humble&#039;,                     &#039;Sarah Boeving&#039;,           &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Bouquet&#039;,                    &#039;Kristoffer Zetterstrand&#039;, &#039;3x3&#039; },&lt;br /&gt;
	{ &#039;Cavebird&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;3x3&#039; },&lt;br /&gt;
	{ &#039;Cotán&#039;,                      &#039;Kristoffer Zetterstrand&#039;, &#039;3x3&#039; },&lt;br /&gt;
	{ &#039;Endboss&#039;,                    &#039;Kristoffer Zetterstrand&#039;, &#039;3x3&#039; },&lt;br /&gt;
	{ &#039;Fern&#039;,                       &#039;Kristoffer Zetterstrand&#039;, &#039;3x3&#039; },&lt;br /&gt;
	{ &#039;Owlemons&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;3x3&#039; },&lt;br /&gt;
	{ &#039;Sunflowers&#039;,                 &#039;Kristoffer Zetterstrand&#039;, &#039;3x3&#039; },&lt;br /&gt;
	{ &#039;Tides&#039;,                      &#039;Kristoffer Zetterstrand&#039;, &#039;3x3&#039; },&lt;br /&gt;
	{ &#039;Dennis&#039;,                     &#039;Sarah Boeving&#039;,           &#039;3x3&#039;},&lt;br /&gt;
	{ &#039;Backyard&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;3x4&#039; },&lt;br /&gt;
	{ &#039;Pond&#039;,                       &#039;Kristoffer Zetterstrand&#039;, &#039;3x4&#039; },&lt;br /&gt;
	{ &#039;Fighters&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;4x2&#039; },&lt;br /&gt;
	{ &#039;Changing&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;4x2&#039; },&lt;br /&gt;
	{ &#039;Finding&#039;,                    &#039;Kristoffer Zetterstrand&#039;, &#039;4x2&#039; },&lt;br /&gt;
	{ &#039;Lowmist&#039;,                    &#039;Kristoffer Zetterstrand&#039;, &#039;4x2&#039; },&lt;br /&gt;
	{ &#039;Passage&#039;,                    &#039;Kristoffer Zetterstrand&#039;, &#039;4x2&#039; },&lt;br /&gt;
	{ &#039;Mortal Coil&#039;,                &#039;Kristoffer Zetterstrand&#039;, &#039;4x3&#039; },&lt;br /&gt;
	{ &#039;Kong&#039;,                       &#039;Kristoffer Zetterstrand&#039;, &#039;4x3&#039; },&lt;br /&gt;
	{ &#039;Pointer&#039;,                    &#039;Kristoffer Zetterstrand&#039;, &#039;4x4&#039; },&lt;br /&gt;
	{ &#039;Pigscene&#039;,                   &#039;Kristoffer Zetterstrand&#039;, &#039;4x4&#039; },&lt;br /&gt;
	{ &#039;Skull On Fire&#039;,              &#039;Kristoffer Zetterstrand&#039;, &#039;4x4&#039; },&lt;br /&gt;
	{ &#039;Unpacked&#039;,                   &#039;Sarah Boeving&#039;,           &#039;4x4&#039; },&lt;br /&gt;
	{ &#039;Orb&#039;,                        &#039;Kristoffer Zetterstrand&#039;, &#039;4x4&#039; },&lt;br /&gt;
	{ &#039;Earth&#039;,                      &#039;Mojang&#039;,                  &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Wind&#039;,                       &#039;Mojang&#039;,                  &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Fire&#039;,                       &#039;Mojang&#039;,                  &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Water&#039;,                      &#039;Mojang&#039;,                  &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Tasty Shapes&#039;,               &#039;Mr. Potato&#039;,              &#039;2x2&#039; },&lt;br /&gt;
	{ &#039;Self-portrait&#039;,              &#039;Mr. Potato&#039;,              &#039;2x3&#039; },&lt;br /&gt;
	{ &#039;Potato&#039;,                     &#039;Cris B&#039;,                  &#039;4x2&#039; },&lt;br /&gt;
	{ &#039;In The Spotlight&#039;,           &#039;Mr. Potato&#039;,              &#039;3x3&#039; },&lt;br /&gt;
	{ &#039;Hot Potato&#039;,                 &#039;Mr. Potato&#039;,              &#039;4x4&#039; },&lt;br /&gt;
	{ &#039;This is not a potato&#039;,       &#039;Mr. Potato&#039;,              &#039;8x4&#039; },&lt;br /&gt;
	{ &#039;The Treachery of Potatoes&#039;,  &#039;Mr. Potato&#039;,              &#039;8x8&#039; }&lt;br /&gt;
}&lt;br /&gt;
for _, painting in ipairs( paintings ) do&lt;br /&gt;
	local name = &#039;Painting &#039; .. painting[1]&lt;br /&gt;
	local artist = painting[2]&lt;br /&gt;
	local artwork = painting[1]&lt;br /&gt;
	local size = painting[3]&lt;br /&gt;
	aliases[name] = { title = &#039;Painting&#039;, name = &#039;Painting&#039;, text = &#039;&amp;amp;e&#039; .. artwork .. &#039;/&amp;amp;7&#039; .. artist .. &#039;/&#039; .. &#039;&amp;amp;f&#039; .. size }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Damaged items, note it skips tools, weapons, and armor as they are handled above to add the damage tooltip. --&lt;br /&gt;
-- Items with rarity (such as Mace and Elytra) are hard-coded in the module&#039;s beginning.&lt;br /&gt;
local damagedItems = {&lt;br /&gt;
	&#039;Bow&#039;,&lt;br /&gt;
	&#039;Brush&#039;,&lt;br /&gt;
	&#039;Carrot on a Stick&#039;,&lt;br /&gt;
	&#039;Crossbow&#039;,&lt;br /&gt;
	&#039;Fishing Rod&#039;,&lt;br /&gt;
	&#039;Flint and Steel&#039;,&lt;br /&gt;
	&#039;Shears&#039;,&lt;br /&gt;
	&#039;Shield&#039;&lt;br /&gt;
}&lt;br /&gt;
for _, item in ipairs( damagedItems ) do&lt;br /&gt;
	local name = &#039;Damaged &#039; .. item&lt;br /&gt;
	aliases[name] = { title = item, name = name }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Banners and colored items --&lt;br /&gt;
local patterns = {&lt;br /&gt;
	&#039;Base Dexter Canton&#039;,&lt;br /&gt;
	&#039;Base&#039;,&lt;br /&gt;
	&#039;Base Gradient&#039;,&lt;br /&gt;
	&#039;Base Indented&#039;,&lt;br /&gt;
	&#039;Base Sinister Canton&#039;,&lt;br /&gt;
	&#039;Bend&#039;,&lt;br /&gt;
	&#039;Bend Sinister&#039;,&lt;br /&gt;
	&#039;Bordure&#039;,&lt;br /&gt;
	&#039;Bordure Indented&#039;,&lt;br /&gt;
	&#039;Chevron&#039;,&lt;br /&gt;
	&#039;Chief Dexter Canton&#039;,&lt;br /&gt;
	&#039;Chief&#039;,&lt;br /&gt;
	&#039;Chief Indented&#039;,&lt;br /&gt;
	&#039;Chief Sinister Canton&#039;,&lt;br /&gt;
	&#039;Creeper Charge&#039;,&lt;br /&gt;
	&#039;Cross&#039;,&lt;br /&gt;
	&#039;Fess&#039;,&lt;br /&gt;
	&#039;Field Masoned&#039;,&lt;br /&gt;
	&#039;Flow&#039;,&lt;br /&gt;
	&#039;Flower Charge&#039;,&lt;br /&gt;
	&#039;Globe&#039;,&lt;br /&gt;
	&#039;Gradient&#039;,&lt;br /&gt;
	&#039;Guster&#039;,&lt;br /&gt;
	&#039;Inverted Chevron&#039;,&lt;br /&gt;
	&#039;Lozenge&#039;,&lt;br /&gt;
	&#039;Thing&#039;,&lt;br /&gt;
	&#039;Pale&#039;,&lt;br /&gt;
	&#039;Pale Dexter&#039;,&lt;br /&gt;
	&#039;Pale Sinister&#039;,&lt;br /&gt;
	&#039;Paly&#039;,&lt;br /&gt;
	&#039;Per Bend&#039;,&lt;br /&gt;
	&#039;Per Bend Inverted&#039;,&lt;br /&gt;
	&#039;Per Bend Sinister&#039;,&lt;br /&gt;
	&#039;Per Bend Sinister Inverted&#039;,&lt;br /&gt;
	&#039;Per Fess&#039;,&lt;br /&gt;
	&#039;Per Fess Inverted&#039;,&lt;br /&gt;
	&#039;Per Pale&#039;,&lt;br /&gt;
	&#039;Per Pale Inverted&#039;,&lt;br /&gt;
	&#039;Piglin&#039;,&lt;br /&gt;
	&#039;Snout&#039;,&lt;br /&gt;
	&#039;Roundel&#039;,&lt;br /&gt;
	&#039;Saltire&#039;,&lt;br /&gt;
	&#039;Skull Charge&#039;&lt;br /&gt;
}&lt;br /&gt;
local colors = {&lt;br /&gt;
	&#039;White&#039;,&lt;br /&gt;
	&#039;Light Gray&#039;,&lt;br /&gt;
	&#039;Gray&#039;,&lt;br /&gt;
	&#039;Black&#039;,&lt;br /&gt;
	&#039;Brown&#039;,&lt;br /&gt;
	&#039;Red&#039;,&lt;br /&gt;
	&#039;Orange&#039;,&lt;br /&gt;
	&#039;Yellow&#039;,&lt;br /&gt;
	&#039;Lime&#039;,&lt;br /&gt;
	&#039;Green&#039;,&lt;br /&gt;
	&#039;Cyan&#039;,&lt;br /&gt;
	&#039;Light Blue&#039;,&lt;br /&gt;
	&#039;Blue&#039;,&lt;br /&gt;
	&#039;Purple&#039;,&lt;br /&gt;
	&#039;Magenta&#039;,&lt;br /&gt;
	&#039;Pink&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Firework Stars --&lt;br /&gt;
local fireworkStar = {}&lt;br /&gt;
for _, color in ipairs( colors ) do&lt;br /&gt;
	local name = color .. &#039; Firework Star&#039;&lt;br /&gt;
	aliases[name] = { title = &#039;Firework Star&#039;, name = name, text = &#039;&amp;amp;7&#039; .. color }&lt;br /&gt;
	table.insert( fireworkStar, aliases[name] )&lt;br /&gt;
	for _, pattern in ipairs( patterns ) do&lt;br /&gt;
		name = color .. &#039; &#039; .. pattern .. &#039; Banner&#039;&lt;br /&gt;
		aliases[name] = { title = &#039;Banner&#039;, name = name, text = &#039;&amp;amp;7&#039; .. color .. &#039; &#039; .. pattern }&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
aliases[&#039;Any Firework Star&#039;] = fireworkStar&lt;br /&gt;
aliases[&#039;Matching Firework Star&#039;] = fireworkStar&lt;br /&gt;
&lt;br /&gt;
-- Items that use the sixteen colors --&lt;br /&gt;
local coloredItems = {&lt;br /&gt;
	withWhite = {&lt;br /&gt;
		&#039;Banner&#039;,&lt;br /&gt;
		&#039;Bed&#039;,&lt;br /&gt;
		&#039;Carpet&#039;,&lt;br /&gt;
		&#039;Concrete&#039;,&lt;br /&gt;
		&#039;Concrete Powder&#039;,&lt;br /&gt;
		&#039;Glazed Terracotta&#039;,&lt;br /&gt;
		&#039;Glow Stick&#039;,&lt;br /&gt;
		&#039;Hardened $1 Stained Glass&#039;,&lt;br /&gt;
		&#039;Hardened $1 Stained Glass Pane&#039;,&lt;br /&gt;
		&#039;Shield&#039;,&lt;br /&gt;
		&#039;Shulker Box&#039;,&lt;br /&gt;
		&#039;Stained Glass&#039;,&lt;br /&gt;
		&#039;Stained Glass Pane&#039;,&lt;br /&gt;
		&#039;Wool&#039;,&lt;br /&gt;
		&#039;Harness&#039;,&lt;br /&gt;
&lt;br /&gt;
		&#039;$Dyed Bundle&#039;,&lt;br /&gt;
		&#039;$Dyed Candle&#039;,&lt;br /&gt;
		&#039;$Stained Terracotta&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	noWhite = {&lt;br /&gt;
		&#039;$Dyed Wool&#039;,&lt;br /&gt;
		&#039;$Dyed Bed&#039;,&lt;br /&gt;
		&#039;$Dyed Carpet&#039;,&lt;br /&gt;
		&#039;$Colored Dye&#039;,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local coloredBadItems = {&lt;br /&gt;
	[&#039;Light Gray Glow Stick&#039;] = 1,&lt;br /&gt;
	[&#039;Black Glow Stick&#039;] = 1,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for type, items in pairs( coloredItems ) do&lt;br /&gt;
	for _, item in ipairs( items ) do&lt;br /&gt;
		local coloredItemAliases = {}&lt;br /&gt;
		local defaultItemAliases&lt;br /&gt;
&lt;br /&gt;
		if item:find( &#039;%$[^1]&#039; ) then&lt;br /&gt;
			defaultItemAliases = {}&lt;br /&gt;
			local itemName&lt;br /&gt;
			if type == &#039;noWhite&#039; then&lt;br /&gt;
				itemName = item:gsub( &#039;%$%w+&#039;, &#039;White&#039; )&lt;br /&gt;
			else&lt;br /&gt;
				itemName = item:gsub( &#039;%$%w+ &#039;, &#039;&#039; )&lt;br /&gt;
			end&lt;br /&gt;
			table.insert( defaultItemAliases, itemName )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		for _, color in ipairs( colors ) do&lt;br /&gt;
			local itemName&lt;br /&gt;
			if type ~= &#039;noWhite&#039; or color ~= &#039;White&#039; then&lt;br /&gt;
				if item:find( &#039;%$1&#039; ) then&lt;br /&gt;
					itemName = item:gsub( &#039;%$1&#039;, color )&lt;br /&gt;
				elseif item:find( &#039;%$&#039; ) then&lt;br /&gt;
					itemName = item:gsub( &#039;%$%w+&#039;, color )&lt;br /&gt;
				else&lt;br /&gt;
					itemName = color .. &#039; &#039; .. item&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if not coloredBadItems[itemName] then&lt;br /&gt;
				if defaultItemAliases then&lt;br /&gt;
					table.insert( defaultItemAliases, itemName )&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				table.insert( coloredItemAliases, itemName )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if defaultItemAliases then&lt;br /&gt;
			local defaultItem = item:gsub( &#039;%$%w+ &#039;, &#039;&#039; )&lt;br /&gt;
			aliases[&#039;Any &#039; .. defaultItem] = defaultItemAliases&lt;br /&gt;
			aliases[&#039;Matching &#039; .. defaultItem] = defaultItemAliases&lt;br /&gt;
		end&lt;br /&gt;
		item = item:gsub( &#039;%$1 &#039;, &#039;&#039; )&lt;br /&gt;
		item = item:gsub( &#039;%$&#039;, &#039;&#039; )&lt;br /&gt;
		aliases[&#039;Any &#039; .. item] = coloredItemAliases&lt;br /&gt;
		aliases[&#039;Matching &#039; .. item] = coloredItemAliases&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
-- list of all potions with no effects&lt;br /&gt;
local noEffects = {&lt;br /&gt;
	&#039;Water Bottle&#039;,&lt;br /&gt;
	&#039;Awkward Potion&#039;,&lt;br /&gt;
	&#039;Thick Potion&#039;,&lt;br /&gt;
	&#039;Mundane Potion&#039;,&lt;br /&gt;
	&#039;Long Mundane Potion&#039;,&lt;br /&gt;
	&#039;Uncraftable Potion&#039;,&lt;br /&gt;
	&#039;Splash Water Bottle&#039;,&lt;br /&gt;
	&#039;Awkward Splash Potion&#039;,&lt;br /&gt;
	&#039;Thick Splash Potion&#039;,&lt;br /&gt;
	&#039;Mundane Splash Potion&#039;,&lt;br /&gt;
	&#039;Splash Long Mundane Potion&#039;,&lt;br /&gt;
	&#039;Uncraftable Splash Potion&#039;,&lt;br /&gt;
	&#039;Lingering Water Bottle&#039;,&lt;br /&gt;
	&#039;Awkward Lingering Potion&#039;,&lt;br /&gt;
	&#039;Thick Lingering Potion&#039;,&lt;br /&gt;
	&#039;Mundane Lingering Potion&#039;,&lt;br /&gt;
	&#039;Lingering Long Mundane Potion&#039;,&lt;br /&gt;
	&#039;Uncraftable Lingering Potion&#039;,&lt;br /&gt;
	&#039;Tipped Arrow&#039;,&lt;br /&gt;
	&#039;Arrow of Splashing&#039;,&lt;br /&gt;
	&#039;Uncraftable Tipped Arrow&#039;,&lt;br /&gt;
}&lt;br /&gt;
for _, name in ipairs(noEffects) do&lt;br /&gt;
	aliases[name] = { name = name, text = &#039;&amp;amp;7No Effects&#039; }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- start these lists with the no effect items as names are not normal&lt;br /&gt;
local potionItems = {&lt;br /&gt;
	[&#039;Potion&#039;] = {&lt;br /&gt;
		aliases[&#039;Water Bottle&#039;],&lt;br /&gt;
		aliases[&#039;Awkward Potion&#039;],&lt;br /&gt;
		aliases[&#039;Thick Potion&#039;],&lt;br /&gt;
		aliases[&#039;Mundane Potion&#039;],&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;Splash Potion&#039;] = {&lt;br /&gt;
		aliases[&#039;Splash Water Bottle&#039;],&lt;br /&gt;
		aliases[&#039;Awkward Splash Potion&#039;],&lt;br /&gt;
		aliases[&#039;Thick Splash Potion&#039;],&lt;br /&gt;
		aliases[&#039;Mundane Splash Potion&#039;],&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;Lingering Potion&#039;] = {&lt;br /&gt;
		aliases[&#039;Lingering Water Bottle&#039;],&lt;br /&gt;
		aliases[&#039;Awkward Lingering Potion&#039;],&lt;br /&gt;
		aliases[&#039;Thick Lingering Potion&#039;],&lt;br /&gt;
		aliases[&#039;Mundane Lingering Potion&#039;],&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;Tipped Arrow&#039;] = {&lt;br /&gt;
		aliases[&#039;Arrow of Splashing&#039;],&lt;br /&gt;
		aliases[&#039;Tipped Arrow&#039;],&lt;br /&gt;
		aliases[&#039;Tipped Arrow&#039;],&lt;br /&gt;
		aliases[&#039;Tipped Arrow&#039;],&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Potions --&lt;br /&gt;
local effects = {&lt;br /&gt;
	-- durations are in the order normal, extended, enhanced&lt;br /&gt;
	{name = &#039;Regeneration&#039;, effect = &#039;&amp;amp;9Regeneration&#039;, enhanced = &#039;II&#039;,&lt;br /&gt;
		durations = { normal = { &#039;00:45&#039;, &#039;01:30&#039;, &#039;00:22&#039; }, lingering = { &#039;00:11&#039;, &#039;00:22&#039;, &#039;00:05&#039; }, arrow = { &#039;00:05&#039;, &#039;00:11&#039;, &#039;00:02&#039; }}},&lt;br /&gt;
	{ name = &#039;Swiftness&#039;, effect = &#039;&amp;amp;9Speed&#039;, enhanced = &#039;II&#039;, applied = {&#039;&amp;amp;9+20% Speed&#039;, &#039;&amp;amp;9+40% Speed&#039;}, &lt;br /&gt;
		durations = { normal = { &#039;03:00&#039;, &#039;08:00&#039;, &#039;01:30&#039; }, lingering = { &#039;00:45&#039;, &#039;02:00&#039;, &#039;00:22&#039; }, arrow = { &#039;00:22&#039;, &#039;01:00&#039;, &#039;00:11&#039; }}},&lt;br /&gt;
	{ name = &#039;Fire Resistance&#039;, effect = &#039;&amp;amp;9Fire Resistance&#039;, durations = { normal = { &#039;03:00&#039;, &#039;08:00&#039; }, lingering = { &#039;00:45&#039;, &#039;02:00&#039; }, arrow = { &#039;00:22&#039;, &#039;01:00&#039; }}},&lt;br /&gt;
	{ name = &#039;Poison&#039;, effect = &#039;&amp;amp;cPoison&#039;, enhanced = &#039;II&#039;, &lt;br /&gt;
		durations = { normal = { &#039;00:45&#039;, &#039;01:30&#039;, &#039;00:21&#039; }, lingering = { &#039;00:11&#039;, &#039;00:22&#039;, &#039;00:05&#039; }, arrow = { &#039;00:05&#039;, &#039;00:11&#039;, &#039;00:02&#039; }}},&lt;br /&gt;
	{ name = &#039;Healing&#039;, effect = &#039;&amp;amp;9Instant Health&#039;, enhanced = &#039;II&#039; },&lt;br /&gt;
	{ name = &#039;Night Vision&#039;, effect = &#039;&amp;amp;9Night Vision&#039;, durations = { normal = { &#039;03:00&#039;, &#039;08:00&#039; }, lingering = { &#039;00:45&#039;, &#039;02:00&#039; }, arrow = { &#039;00:22&#039;, &#039;01:00&#039; }}},&lt;br /&gt;
	{ name = &#039;Weakness&#039;, effect = &#039;&amp;amp;cWeakness&#039;, applied = {&#039;&amp;amp;c-4 Attack Damage&#039;}, &lt;br /&gt;
		durations = { normal = { &#039;01:30&#039;, &#039;04:00&#039; }, lingering = { &#039;00:22&#039;, &#039;01:00&#039; }, arrow = { &#039;00:11&#039;, &#039;00:30&#039; }}},&lt;br /&gt;
	{ name = &#039;Strength&#039;, effect = &#039;&amp;amp;9Strength&#039;, enhanced = &#039;II&#039;, applied = {&#039;&amp;amp;9+3 Attack Damage&#039;, &#039;&amp;amp;9+6 Attack Damage&#039;}, &lt;br /&gt;
		durations = { normal = { &#039;03:00&#039;, &#039;08:00&#039;, &#039;01:30&#039;}, lingering = {&#039;00:45&#039;, &#039;02:00&#039;, &#039;00:22&#039;}, arrow = { &#039;00:22&#039;, &#039;01:00&#039;, &#039;00:11&#039; }}},&lt;br /&gt;
	{ name = &#039;Slowness&#039;, effect = &#039;&amp;amp;cSlowness&#039;, enhanced = &#039;IV&#039;, applied = {&#039;&amp;amp;c-15% Speed&#039;, &#039;&amp;amp;c-60% Speed&#039;}, &lt;br /&gt;
		durations = { normal = { &#039;01:30&#039;, &#039;04:00&#039;, &#039;00:20&#039;}, lingering = {&#039;00:22&#039;, &#039;01:00&#039;, &#039;00:05&#039;}, arrow = { &#039;00:11&#039;, &#039;00:30&#039;, &#039;00:02&#039; }}},&lt;br /&gt;
	{ name = &#039;Leaping&#039;, effect = &#039;&amp;amp;9Jump Boost&#039;, enhanced = &#039;II&#039;, applied = {&#039;&amp;amp;9+1 Safe Fall Distance&#039;, &#039;&amp;amp;9+2 Safe Fall Distance&#039;},&lt;br /&gt;
		durations = { normal = { &#039;03:00&#039;, &#039;08:00&#039;, &#039;01:30&#039; }, lingering = {&#039;00:45&#039;, &#039;02:00&#039;, &#039;00:22&#039;}, arrow = { &#039;00:22&#039;, &#039;01:00&#039;, &#039;00:11&#039; }}},&lt;br /&gt;
	{ name = &#039;Harming&#039;, effect = &#039;&amp;amp;cInstant Damage&#039;, enhanced = &#039;II&#039; },&lt;br /&gt;
	{ name = &#039;Water Breathing&#039;, effect = &#039;&amp;amp;9Water Breathing&#039;, durations = { normal = { &#039;03:00&#039;, &#039;08:00&#039; }, lingering = { &#039;00:45&#039;, &#039;02:00&#039; }, arrow = { &#039;00:22&#039;, &#039;01:00&#039; }}},&lt;br /&gt;
	{ name = &#039;Invisibility&#039;, effect = &#039;&amp;amp;9Invisibility&#039;, applied = {&#039;&amp;amp;c-100% Waypoint Transmit Range&#039;}, &lt;br /&gt;
		durations = { normal = { &#039;03:00&#039;, &#039;08:00&#039; }, lingering = { &#039;00:45&#039;, &#039;02:00&#039; }, arrow = { &#039;00:22&#039;, &#039;01:00&#039; }}},&lt;br /&gt;
	{ name = &#039;Slow Falling&#039;, effect = &#039;&amp;amp;9Slow Falling&#039;, durations = { normal = { &#039;01:30&#039;, &#039;04:00&#039; }, lingering = { &#039;00:22&#039;, &#039;01:00&#039; }, arrow = { &#039;00:11&#039;, &#039;00:30&#039; }}},&lt;br /&gt;
	{ name = &#039;Luck&#039;, effect = &#039;&amp;amp;9Luck&#039;, applied = {&#039;&amp;amp;9+1 Luck&#039;}, durations = { normal = { &#039;05:00&#039; }, lingering = { &#039;01:15&#039; }, arrow = { &#039;00:37&#039; }}},&lt;br /&gt;
	{ name = &#039;Decay&#039;, effect = &#039;&amp;amp;cWither II&#039;, durations = { normal = { &#039;00:40&#039; }, lingering = { &#039;00:10&#039; }, arrow = { &#039;00:05&#039; }}},&lt;br /&gt;
	{ name = &#039;the Turtle Master&#039;, text = &#039;&amp;amp;cSlowness IV ($1)/&amp;amp;9Resistance III ($1)//&amp;amp;5When Applied:/&amp;amp;c-60% Speed&#039;,&lt;br /&gt;
		enhanced = &#039;&amp;amp;cSlowness VI ($1)/&amp;amp;9Resistance IV ($1)//&amp;amp;5When Applied:/&amp;amp;c-90% Speed&#039;,&lt;br /&gt;
		durations = { normal = { &#039;00:20&#039;, &#039;00:40&#039;, &#039;00:20&#039; }, lingering = { &#039;00:05&#039;, &#039;00:10&#039;, &#039;00:05&#039; }, arrow = {  &#039;00:02&#039;, &#039;00:05&#039;, &#039;00:02&#039; }}},&lt;br /&gt;
	{ name = &#039;Oozing&#039;, effect = &#039;&amp;amp;cOozing&#039;, durations = { normal = { &#039;03:00&#039; }, lingering = { &#039;00:45&#039; }, arrow = { &#039;00:22&#039; }}},&lt;br /&gt;
	{ name = &#039;Infestation&#039;, effect = &#039;&amp;amp;cInfested&#039;, durations = { normal = { &#039;03:00&#039; }, lingering = { &#039;00:45&#039; }, arrow = { &#039;00:22&#039; }}},&lt;br /&gt;
	{ name = &#039;Weaving&#039;, effect = &#039;&amp;amp;cWeaving&#039;, durations = { normal = { &#039;03:00&#039; }, lingering = { &#039;00:45&#039; }, arrow = { &#039;00:22&#039; }}},&lt;br /&gt;
	{ name = &#039;Wind Charging&#039;, effect = &#039;&amp;amp;cWind Charged&#039;, durations = { normal = { &#039;03:00&#039; }, lingering = { &#039;00:45&#039; }, arrow = { &#039;00:22&#039; }}},&lt;br /&gt;
	&lt;br /&gt;
	{ name = &#039;Big&#039;, effect = &#039;&amp;amp;9Big&#039;, enhanced = &#039;II&#039;, applied = {&#039;&amp;amp;9+1 Entity Scale&#039;, &#039;&amp;amp;9+2 Entity Scale&#039;},&lt;br /&gt;
		durations = { normal = { &#039;03:00&#039;, &#039;08:00&#039;, &#039;01:30&#039; }, lingering = { &#039;00:45&#039;, &#039;02:00&#039;, &#039;00:22&#039; }, arrow = { &#039;00:22&#039;, &#039;01:00&#039;, &#039;00:11&#039; }}},&lt;br /&gt;
	{ name = &#039;Small&#039;, effect = &#039;&amp;amp;9Small&#039;, enhanced = &#039;II&#039;, applied = {&#039;&amp;amp;c-0.5 Entity Scale&#039;, &#039;&amp;amp;c-1 Entity Scale&#039;},&lt;br /&gt;
		durations = { normal = { &#039;03:00&#039;, &#039;08:00&#039;, &#039;01:30&#039; }, lingering = { &#039;00:45&#039;, &#039;02:00&#039;, &#039;00:22&#039; }, arrow = { &#039;00:22&#039;, &#039;01:00&#039;, &#039;00:11&#039; }}},&lt;br /&gt;
	{ name = &#039;Sticky&#039;, effect = &#039;&amp;amp;9Sticky&#039;, durations = { normal = { &#039;01:30&#039; }, lingering = { &#039;00:22&#039; }, arrow = { &#039;00:11&#039; }}}&lt;br /&gt;
}&lt;br /&gt;
local types = {&lt;br /&gt;
	{name = &#039;Potion&#039;,           durations = &#039;normal&#039;,    text = &#039;Potion of &#039;},&lt;br /&gt;
	{name = &#039;Splash Potion&#039;,    durations = &#039;normal&#039;,    text = &#039;Splash Potion of &#039;},&lt;br /&gt;
	{name = &#039;Lingering Potion&#039;, durations = &#039;lingering&#039;, text = &#039;Lingering Potion of &#039;},&lt;br /&gt;
	{name = &#039;Tipped Arrow&#039;,     durations = &#039;arrow&#039;,     text = &#039;Arrow of &#039;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, effect in ipairs(effects) do&lt;br /&gt;
	for _, type in ipairs(types) do&lt;br /&gt;
		-- form name, it will be reused&lt;br /&gt;
		local name =  type.text .. effect.name&lt;br /&gt;
		local potionName = {}&lt;br /&gt;
		if type.name == &#039;Tipped Arrow&#039; then&lt;br /&gt;
		potionName = type.text .. effect.name&lt;br /&gt;
		else&lt;br /&gt;
		potionName = type.text .. effect.name&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- if we have durations, add times&lt;br /&gt;
		if effect.durations then&lt;br /&gt;
			local durations = effect.durations[type.durations]&lt;br /&gt;
			&lt;br /&gt;
			-- turtle master is weird, so just do a fancy string replacement&lt;br /&gt;
			if effect.text then&lt;br /&gt;
				aliases[name] = { name = potionName, text = effect.text:gsub( &#039;%$1&#039;, durations[1] ) }&lt;br /&gt;
				aliases[name .. &#039; Extended&#039;] = { name = potionName, text = effect.text:gsub( &#039;%$1&#039;, durations[2] ) .. &#039;/&amp;amp;8Extended&#039; }&lt;br /&gt;
				aliases[name .. &#039; Enhanced&#039;] = { name = potionName, text = effect.enhanced:gsub( &#039;%$1&#039;, durations[3] ) .. &#039;/&amp;amp;8Enhanced&#039; }&lt;br /&gt;
			elseif effect.applied then&lt;br /&gt;
				-- attribute changes by the effect&lt;br /&gt;
				local applied = effect.applied&lt;br /&gt;
				&lt;br /&gt;
				-- we always have normal&lt;br /&gt;
				aliases[name] = { name = potionName, text = string.format( &#039;%s (%s)//&amp;amp;5When Applied:/%s&#039;, effect.effect, durations[1], applied[1] ) }&lt;br /&gt;
			&lt;br /&gt;
				-- ensure we have extended&lt;br /&gt;
				if durations[2] then&lt;br /&gt;
					aliases[name .. &#039; Extended&#039;] = { name = potionName, text = string.format( &#039;%s (%s)//&amp;amp;5When Applied:/%s&#039;, effect.effect, durations[2], applied[1] ) .. &#039;/&amp;amp;8Extended&#039; }&lt;br /&gt;
					&lt;br /&gt;
					-- and enhanced&lt;br /&gt;
					if effect.enhanced then&lt;br /&gt;
						aliases[name .. &#039; Enhanced&#039;] = { name = potionName, text = string.format( &#039;%s %s (%s)//&amp;amp;5When Applied:/%s&#039;, effect.effect, effect.enhanced, durations[3], applied[2] ) .. &#039;/&amp;amp;8Enhanced&#039; }&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- we always have normal&lt;br /&gt;
				aliases[name] = { name = potionName, text = string.format( &#039;%s (%s)&#039;, effect.effect, durations[1] ) }&lt;br /&gt;
			&lt;br /&gt;
				-- ensure we have extended&lt;br /&gt;
				if durations[2] then&lt;br /&gt;
					aliases[name .. &#039; Extended&#039;] = { name = potionName, text = string.format( &#039;%s (%s)&#039;, effect.effect, durations[2] ) .. &#039;/&amp;amp;8Extended&#039; }&lt;br /&gt;
					&lt;br /&gt;
					-- and enhanced&lt;br /&gt;
					if effect.enhanced then&lt;br /&gt;
						aliases[name .. &#039; Enhanced&#039;] = { name = potionName, text = string.format( &#039;%s %s (%s)&#039;, effect.effect, effect.enhanced, durations[3] ) .. &#039;/&amp;amp;8Enhanced&#039; }&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- otherwise its just effect, currently every potion with no duration can be enhanced&lt;br /&gt;
			aliases[name] = { name = potionName, text = effect.effect}&lt;br /&gt;
			aliases[name .. &#039; Enhanced&#039;] = { name = potionName, text = effect.effect .. &#039; &#039; .. effect.enhanced .. &#039;/&amp;amp;8Enhanced&#039; }&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- add the base potion to the any list&lt;br /&gt;
		table.insert(potionItems[type.name], aliases[name])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- build the any lists&lt;br /&gt;
for item, potionAliases in pairs( potionItems ) do&lt;br /&gt;
	aliases[&#039;Any &#039; .. item] = potionAliases&lt;br /&gt;
	aliases[&#039;Matching &#039; .. item] = potionAliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Wood --&lt;br /&gt;
local woodTypes = {&lt;br /&gt;
    overworld = {&lt;br /&gt;
        &#039;Oak&#039;,&lt;br /&gt;
	    &#039;Spruce&#039;,&lt;br /&gt;
	    &#039;Birch&#039;,&lt;br /&gt;
	    &#039;Jungle&#039;,&lt;br /&gt;
	    &#039;Acacia&#039;,&lt;br /&gt;
        &#039;Dark Oak&#039;,&lt;br /&gt;
        &#039;Mangrove&#039;,&lt;br /&gt;
        &#039;Cherry&#039;,&lt;br /&gt;
        &#039;Pale Oak&#039;,&lt;br /&gt;
        &#039;Bamboo&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    nether = {&lt;br /&gt;
        &#039;Crimson&#039;,&lt;br /&gt;
        &#039;Warped&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    both = {},&lt;br /&gt;
}&lt;br /&gt;
local woodTypeWorld = {}&lt;br /&gt;
for _, world in ipairs({&#039;overworld&#039;, &#039;nether&#039;}) do&lt;br /&gt;
	local woods = woodTypes[world]&lt;br /&gt;
	for _, type in ipairs(woods) do&lt;br /&gt;
		woodTypeWorld[type] = world&lt;br /&gt;
        table.insert(woodTypes.both, type)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
local woodItems = {&lt;br /&gt;
    overworld = {&lt;br /&gt;
        &#039;Log&#039;,&lt;br /&gt;
        &#039;Wood&#039;,&lt;br /&gt;
        &#039;Stripped $1 Log&#039;,&lt;br /&gt;
        &#039;Stripped $1 Wood&#039;,&lt;br /&gt;
        &#039;Boat&#039;,&lt;br /&gt;
        &#039;Boat with Chest&#039;,&lt;br /&gt;
        &#039;Sapling&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    nether = {&lt;br /&gt;
        &#039;Stem&#039;,&lt;br /&gt;
        &#039;Hyphae&#039;,&lt;br /&gt;
        &#039;Stripped $1 Stem&#039;,&lt;br /&gt;
        &#039;Stripped $1 Hyphae&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    both = {&lt;br /&gt;
		-- Any/Matching X or Y&lt;br /&gt;
        &#039;${Log,Stem}&#039;,&lt;br /&gt;
        &#039;${Wood,Hyphae}&#039;,&lt;br /&gt;
        &#039;Stripped $1 ${Wood,Hyphae}&#039;,&lt;br /&gt;
        &#039;Stripped $1 ${Log,Stem}&#039;,&lt;br /&gt;
&lt;br /&gt;
		-- Dimensional prefixes&lt;br /&gt;
        &#039;$world Planks&#039;,&lt;br /&gt;
        &#039;$world $wood Stairs&#039;,&lt;br /&gt;
        &#039;$world $wood Slab&#039;,&lt;br /&gt;
        &#039;$world $wood Fence&#039;,&lt;br /&gt;
        &#039;$world $wood Fence Gate&#039;,&lt;br /&gt;
        &#039;$world $wood Door&#039;,&lt;br /&gt;
        &#039;$world $wood Trapdoor&#039;,&lt;br /&gt;
        &#039;$world $wood Pressure Plate&#039;,&lt;br /&gt;
        &#039;$world $wood Button&#039;,&lt;br /&gt;
        &#039;$world $wood Sign&#039;,&lt;br /&gt;
        &#039;$world $wood Hanging Sign&#039;,&lt;br /&gt;
        &#039;$world $wood Shelf&#039;,&lt;br /&gt;
&lt;br /&gt;
		-- Both dimensions&lt;br /&gt;
		-- Items with non-wood variants include $wood&lt;br /&gt;
        &#039;Planks&#039;,&lt;br /&gt;
        &#039;$wood Stairs&#039;,&lt;br /&gt;
        &#039;$wood Slab&#039;,&lt;br /&gt;
        &#039;$wood Fence&#039;,&lt;br /&gt;
        &#039;Fence Gate&#039;,&lt;br /&gt;
        &#039;$wood Door&#039;,&lt;br /&gt;
        &#039;$wood Trapdoor&#039;,&lt;br /&gt;
        &#039;$wood Pressure Plate&#039;,&lt;br /&gt;
        &#039;$wood Button&#039;,&lt;br /&gt;
        &#039;Sign&#039;,&lt;br /&gt;
        &#039;Hanging Sign&#039;,&lt;br /&gt;
        &#039;Shelf&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
local woodItemWorld = {}&lt;br /&gt;
for world, items in pairs(woodItems) do&lt;br /&gt;
    for _, item in ipairs(items) do&lt;br /&gt;
		-- expand $world (should only happen in &amp;quot;both&amp;quot;)&lt;br /&gt;
        if (item:find(&#039;%$world&#039;)) and world == &#039;both&#039; then&lt;br /&gt;
            item = item:gsub(&#039;%$world &#039;, &#039;&#039;)&lt;br /&gt;
            woodItemWorld[&#039;Overworld &#039; .. item] = &#039;overworld&#039;&lt;br /&gt;
			woodItemWorld[&#039;Nether &#039; .. item] = &#039;nether&#039;&lt;br /&gt;
		else&lt;br /&gt;
			woodItemWorld[item] = world&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local woodBadItems = {&lt;br /&gt;
	[&#039;Bamboo Sapling&#039;] = 1,&lt;br /&gt;
	[&#039;Bamboo Wood&#039;] = 1,&lt;br /&gt;
	[&#039;Bamboo Log&#039;] = 1,&lt;br /&gt;
	[&#039;Stripped Bamboo Wood&#039;] = 1,&lt;br /&gt;
	[&#039;Stripped Bamboo Log&#039;] = 1,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local woodNameMapping = {&lt;br /&gt;
	[&#039;Mangrove Sapling&#039;] = &#039;Mangrove Propagule&#039;,&lt;br /&gt;
	[&#039;Bamboo Boat&#039;] = &#039;Bamboo Raft&#039;,&lt;br /&gt;
	[&#039;Bamboo Boat with Chest&#039;] = &#039;Bamboo Raft with Chest&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for item, world in pairs(woodItemWorld) do&lt;br /&gt;
	local itemName = &#039;&#039;&lt;br /&gt;
	local woodAliases = {}&lt;br /&gt;
&lt;br /&gt;
	-- real &amp;quot;linkable&amp;quot; name&lt;br /&gt;
    local realItem = item:gsub(&#039;^Overworld &#039;, &#039;&#039;)&lt;br /&gt;
    realItem = realItem:gsub(&#039;^Nether &#039;, &#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
	for _, wood in ipairs(woodTypes[world]) do&lt;br /&gt;
		-- Parse ${,} (world-select) syntax&lt;br /&gt;
		local selector = (woodTypeWorld[wood] == &#039;overworld&#039;) and &amp;quot;%1&amp;quot; or &amp;quot;%2&amp;quot;&lt;br /&gt;
		itemName = realItem:gsub(&amp;quot;%${(.-),(.-)}&amp;quot;, selector)&lt;br /&gt;
&lt;br /&gt;
		if itemName:find(&#039;%$wood&#039;) then&lt;br /&gt;
			itemName = itemName:gsub(&#039;%$wood&#039;, wood)&lt;br /&gt;
		elseif itemName:find(&#039;%$1&#039;) then&lt;br /&gt;
			itemName = itemName:gsub( &#039;%$1&#039;, wood)&lt;br /&gt;
		else&lt;br /&gt;
			itemName = wood .. &#039; &#039; .. itemName&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- special handling&lt;br /&gt;
		if woodNameMapping[itemName] then&lt;br /&gt;
			itemName = woodNameMapping[itemName]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not woodBadItems[itemName] then&lt;br /&gt;
			table.insert(woodAliases, itemName)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Parse ${,} (world-select) syntax&lt;br /&gt;
	item = item:gsub(&amp;quot;%${(.-),(.-)}&amp;quot;, &amp;quot;%1 or %2&amp;quot;)&lt;br /&gt;
    item = item:gsub(&#039;%$wood&#039;, &#039;Wooden&#039;)&lt;br /&gt;
    item = item:gsub(&#039;%$1 &#039;, &#039;&#039;)&lt;br /&gt;
    aliases[&#039;Any &#039; .. item] = woodAliases&lt;br /&gt;
	aliases[&#039;Matching &#039; .. item] = woodAliases&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Light blocks --&lt;br /&gt;
for level = 0, 15 do&lt;br /&gt;
aliases[&amp;quot;Light &amp;quot; .. level] = { title = &amp;quot;&amp;amp;dLight&amp;quot;, name = &amp;quot;Light &amp;quot; .. level }&lt;br /&gt;
aliases[&amp;quot;Light &amp;quot; .. level .. &amp;quot; BE&amp;quot;] = { title = &amp;quot;Light&amp;quot;, name = &amp;quot;Light &amp;quot; .. level .. &amp;quot; BE&amp;quot; }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Pottery Sherds --&lt;br /&gt;
local pottery_sherds = { &lt;br /&gt;
	{ &#039;Angler&#039; },&lt;br /&gt;
	{ &#039;Arms Up&#039; },&lt;br /&gt;
	{ &#039;Archer&#039; },&lt;br /&gt;
	{ &#039;Blade&#039; },&lt;br /&gt;
	{ &#039;Brewer&#039; },&lt;br /&gt;
	{ &#039;Burn&#039; },&lt;br /&gt;
	{ &#039;Danger&#039; },&lt;br /&gt;
	{ &#039;Explorer&#039; },&lt;br /&gt;
	{ &#039;Flow&#039; },&lt;br /&gt;
	{ &#039;Friend&#039; },&lt;br /&gt;
	{ &#039;Guster&#039; },&lt;br /&gt;
	{ &#039;Heart&#039; },&lt;br /&gt;
	{ &#039;Heartbreak&#039; },&lt;br /&gt;
	{ &#039;Howl&#039; },&lt;br /&gt;
	{ &#039;Miner&#039; },&lt;br /&gt;
	{ &#039;Mourner&#039; },&lt;br /&gt;
	{ &#039;Plenty&#039; },&lt;br /&gt;
	{ &#039;Prize&#039; },&lt;br /&gt;
	{ &#039;Scrape&#039; },&lt;br /&gt;
	{ &#039;Sheaf&#039; },&lt;br /&gt;
	{ &#039;Shelter&#039; },&lt;br /&gt;
	{ &#039;Skull&#039; },&lt;br /&gt;
	{ &#039;Snort&#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local potterySherdAliases = {}&lt;br /&gt;
for _, pottery_sherd in ipairs(pottery_sherds) do&lt;br /&gt;
	local name = pottery_sherd[1] .. &#039; Pottery Sherd&#039;&lt;br /&gt;
	aliases[name] = { title = &#039;&amp;amp;e&#039; .. name , name = name }&lt;br /&gt;
	table.insert(potterySherdAliases, aliases[name])&lt;br /&gt;
end&lt;br /&gt;
table.insert(potterySherdAliases, &#039;Brick&#039;)&lt;br /&gt;
&lt;br /&gt;
aliases[&#039;Any Pottery Sherd&#039;] = potterySherdAliases&lt;br /&gt;
&lt;br /&gt;
-- Smithing Templates --&lt;br /&gt;
local smithing_templates = {&lt;br /&gt;
	{ &#039;Netherite Upgrade&#039;,    &#039;Diamond Equipment&#039;, &#039;Netherite Ingot&#039;,  &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Bolt Armor Trim&#039;,      &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Coast Armor Trim&#039;,     &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Dune Armor Trim&#039;,      &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Eye Armor Trim&#039;,       &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;b&#039; },&lt;br /&gt;
	{ &#039;Flow Armor Trim&#039;,      &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Host Armor Trim&#039;,      &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Raiser Armor Trim&#039;,    &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Rib Armor Trim&#039;,       &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Sentry Armor Trim&#039;,    &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Shaper Armor Trim&#039;,    &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Silence Armor Trim&#039;,   &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;d&#039; },&lt;br /&gt;
	{ &#039;Snout Armor Trim&#039;,     &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Spire Armor Trim&#039;,     &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;b&#039; },&lt;br /&gt;
	{ &#039;Tide Armor Trim&#039;,      &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Vex Armor Trim&#039;,       &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;b&#039; },&lt;br /&gt;
	{ &#039;Ward Armor Trim&#039;,      &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;b&#039; },&lt;br /&gt;
	{ &#039;Wayfinder Armor Trim&#039;, &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
	{ &#039;Wild Armor Trim&#039;,      &#039;Armor&#039;,             &#039;Ingot &amp;amp; Crystals&#039;, &#039;&amp;amp;e&#039; },&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
local smithing_template_array = {}&lt;br /&gt;
local armor_trims_array = {}&lt;br /&gt;
for _,smithing_template in pairs(smithing_templates) do&lt;br /&gt;
    local rarityColor = smithing_template[4]&lt;br /&gt;
	local current_alias = {&lt;br /&gt;
		title = rarityColor .. smithing_template[1],&lt;br /&gt;
		name = smithing_template[1] .. &#039; Smithing Template&#039;,&lt;br /&gt;
		text = &#039;&amp;amp;7&#039; .. &#039;Smithing Template&#039; .. &#039;//Applies to:/&amp;amp;#160;&amp;amp;9&#039; .. smithing_template[2] .. &#039;/&amp;amp;7Ingredients:/&amp;amp;#160;&amp;amp;9&#039; .. smithing_template[3],&lt;br /&gt;
	}&lt;br /&gt;
	aliases[smithing_template[1]] = current_alias&lt;br /&gt;
	aliases[smithing_template[1] .. &#039; Smithing Template&#039;] = current_alias&lt;br /&gt;
	table.insert(smithing_template_array,current_alias)&lt;br /&gt;
	if string.find(smithing_template[1],&#039; Armor Trim$&#039;) then&lt;br /&gt;
		table.insert(armor_trims_array,current_alias)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
aliases[&#039;Matching Smithing Template&#039;] = smithing_template_array&lt;br /&gt;
aliases[&#039;Any Smithing Template&#039;] = smithing_template_array&lt;br /&gt;
aliases[&#039;Matching Armor Trim&#039;] = armor_trims_array&lt;br /&gt;
aliases[&#039;Any Armor Trim&#039;] = armor_trims_array&lt;br /&gt;
aliases[&#039;Matching Armor Trim Smithing Template&#039;] = armor_trims_array&lt;br /&gt;
aliases[&#039;Any Armor Trim Smithing Template&#039;] = armor_trims_array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return aliases&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.keii.dev/index.php?title=Module:AnimateSprite&amp;diff=346</id>
		<title>Module:AnimateSprite</title>
		<link rel="alternate" type="text/html" href="https://wiki.keii.dev/index.php?title=Module:AnimateSprite&amp;diff=346"/>
		<updated>2025-10-16T20:16:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.animate( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local icons = {}&lt;br /&gt;
	local sprite = require( &#039;Module:SpriteFile&#039; ).sprite&lt;br /&gt;
	local name = args.name or &#039;InvSprite&#039;&lt;br /&gt;
	&lt;br /&gt;
	local function image( icon )&lt;br /&gt;
		args.name = name&lt;br /&gt;
		args[1] = icon&lt;br /&gt;
		args.size = args.size or 32&lt;br /&gt;
		args.align = args.align or &#039;middle&#039;&lt;br /&gt;
		args.keepcase = true&lt;br /&gt;
		return sprite(args) or &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for icon in mw.text.gsplit( args[1], &#039;%s*;%s*&#039; ) do&lt;br /&gt;
		icons[#icons+1] = &#039;&amp;lt;span&amp;gt;&#039; .. (#icon &amp;gt; 0 and image( icon ) or &#039;&amp;lt;br&amp;gt;&#039;) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	icons[1] = icons[1]:gsub( &#039;^&amp;lt;span&amp;gt;&#039;, &#039;&amp;lt;span class=&amp;quot;animated-active&amp;quot;&amp;gt;&#039; )&lt;br /&gt;
	&lt;br /&gt;
	return &#039;&amp;lt;span class=&amp;quot;animated&amp;quot;&amp;gt;&#039; .. table.concat( icons ) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>