aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorCow <cow@volloeko.de>2020-06-18 18:11:50 +0200
committerCow <cow@volloeko.de>2020-06-18 18:11:50 +0200
commit830e815c429905b29a49ecc1a2bf9e9abbca148b (patch)
tree38b94b086eb986294264e14bb02057ee56fb0974 /src/main/java
parentc2c644d9b0f8a66e757b67145935b0e3c447db97 (diff)
downloadCowlection-830e815c429905b29a49ecc1a2bf9e9abbca148b.tar.gz
Cowlection-830e815c429905b29a49ecc1a2bf9e9abbca148b.tar.bz2
Cowlection-830e815c429905b29a49ecc1a2bf9e9abbca148b.zip
Added `/moo analyzeIsland` to analyze minions on private islands
- Added Config option to toggle between Arabic and Roman numerals
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/eu/olli/cowmoonication/command/MooCommand.java98
-rw-r--r--src/main/java/eu/olli/cowmoonication/config/MooConfig.java14
-rw-r--r--src/main/java/eu/olli/cowmoonication/data/DataHelper.java639
-rw-r--r--src/main/java/eu/olli/cowmoonication/listener/ChatListener.java1
-rw-r--r--src/main/java/eu/olli/cowmoonication/util/ImageUtils.java76
-rw-r--r--src/main/java/eu/olli/cowmoonication/util/Utils.java127
6 files changed, 944 insertions, 11 deletions
diff --git a/src/main/java/eu/olli/cowmoonication/command/MooCommand.java b/src/main/java/eu/olli/cowmoonication/command/MooCommand.java
index b4d357d..7a468de 100644
--- a/src/main/java/eu/olli/cowmoonication/command/MooCommand.java
+++ b/src/main/java/eu/olli/cowmoonication/command/MooCommand.java
@@ -7,22 +7,29 @@ import eu.olli.cowmoonication.command.exception.InvalidPlayerNameException;
import eu.olli.cowmoonication.command.exception.MooCommandException;
import eu.olli.cowmoonication.config.MooConfig;
import eu.olli.cowmoonication.config.MooGuiConfig;
+import eu.olli.cowmoonication.data.DataHelper;
import eu.olli.cowmoonication.data.Friend;
import eu.olli.cowmoonication.data.HySkyBlockStats;
import eu.olli.cowmoonication.data.HyStalkingData;
import eu.olli.cowmoonication.search.GuiSearch;
-import eu.olli.cowmoonication.util.ApiUtils;
-import eu.olli.cowmoonication.util.MooChatComponent;
-import eu.olli.cowmoonication.util.TickDelay;
-import eu.olli.cowmoonication.util.Utils;
+import eu.olli.cowmoonication.util.*;
import net.minecraft.client.Minecraft;
import net.minecraft.command.*;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.item.EntityArmorStand;
import net.minecraft.event.ClickEvent;
import net.minecraft.event.HoverEvent;
+import net.minecraft.item.ItemSkull;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.*;
+import net.minecraftforge.common.util.Constants;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
import java.awt.*;
import java.io.IOException;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -58,6 +65,80 @@ public class MooCommand extends CommandBase {
} else {
handleStalkingSkyBlock(args[1]);
}
+ } else if (args[0].equalsIgnoreCase("analyzeIsland")) {
+ Map<String, String> minions = DataHelper.getMinions();
+
+ Map<String, Integer> detectedMinions = new HashMap<>();
+ Map<Integer, Integer> detectedMinionsWithSkin = new HashMap<>();
+ int detectedMinionCount = 0;
+ int minionsWithSkinCount = 0;
+ entityLoop:
+ for (Entity entity : sender.getEntityWorld().loadedEntityList) {
+ if (entity instanceof EntityArmorStand) {
+ EntityArmorStand minion = (EntityArmorStand) entity;
+
+ if (minion.isInvisible() || !minion.isSmall() || minion.getHeldItem() == null) {
+ // not a minion: invisible, or not small armor stand, or no item in hand (= minion in a minion chair)
+ continue;
+ }
+ for (int slot = 0; slot < 4; slot++) {
+ if (minion.getCurrentArmor(slot) == null) {
+ // not a minion: missing equipment
+ continue entityLoop;
+ }
+ }
+ ItemStack skullItem = minion.getCurrentArmor(3); // head slot
+ if (skullItem.getItem() instanceof ItemSkull && skullItem.getMetadata() == 3 && skullItem.hasTagCompound()) {
+ // is a player head!
+ if (skullItem.getTagCompound().hasKey("SkullOwner", Constants.NBT.TAG_COMPOUND)) {
+ NBTTagCompound skullOwner = skullItem.getTagCompound().getCompoundTag("SkullOwner");
+ String skullDataBase64 = skullOwner.getCompoundTag("Properties").getTagList("textures", Constants.NBT.TAG_COMPOUND).getCompoundTagAt(0).getString("Value");
+ String skullData = new String(Base64.decodeBase64(skullDataBase64));
+ String minionSkinId = StringUtils.substringBetween(skullData, "http://textures.minecraft.net/texture/", "\"");
+ String detectedMinion = minions.get(minionSkinId);
+ if (detectedMinion != null) {
+ // minion head matches one know minion tier
+ detectedMinions.put(detectedMinion, detectedMinions.getOrDefault(detectedMinion, 0) + 1);
+ detectedMinionCount++;
+ } else {
+ int minionTier = ImageUtils.getTierFromTexture(minionSkinId);
+ if (minionTier > 0) {
+ detectedMinionsWithSkin.put(minionTier, detectedMinionsWithSkin.getOrDefault(minionTier, 0) + 1);
+ minionsWithSkinCount++;
+ } else {
+ // looked like a minion but has no matching tier badge
+ main.getLogger().info("[/moo analyzeIsland] Found an armor stand that could be a minion but it is missing a tier badge: " + minionSkinId + "\t\t\t" + minion.serializeNBT());
+ }
+ }
+ }
+ }
+ }
+ }
+ main.getChatHelper().sendMessage(EnumChatFormatting.YELLOW,
+ "Found " + EnumChatFormatting.GOLD + detectedMinionCount + EnumChatFormatting.YELLOW + " minions" +
+ (minionsWithSkinCount > 0 ? (" + " + EnumChatFormatting.GOLD + minionsWithSkinCount + EnumChatFormatting.YELLOW + " unknown minions with skins") : "") +
+ " on this island");
+ detectedMinions.entrySet().stream()
+ .sorted(Map.Entry.comparingByKey()) // sort alphabetically by minion name and tier
+ .forEach(minion -> {
+ String minionWithTier = minion.getKey();
+ int lastSpace = minionWithTier.lastIndexOf(' ');
+
+ String tierRoman = minionWithTier.substring(lastSpace + 1);
+
+ int tierArabic = Utils.convertRomanToArabic(tierRoman);
+ EnumChatFormatting tierColor = Utils.getMinionTierColor(tierArabic);
+
+ minionWithTier = minionWithTier.substring(0, lastSpace) + " " + tierColor + (MooConfig.useRomanNumerals() ? tierRoman : tierArabic);
+ main.getChatHelper().sendMessage(EnumChatFormatting.GOLD, " " + minion.getValue() + (minion.getValue() > 1 ? "✕ " : "⨉ ") + EnumChatFormatting.YELLOW + minionWithTier);
+ });
+ detectedMinionsWithSkin.entrySet().stream()
+ .sorted(Map.Entry.comparingByKey()) // sort by tier
+ .forEach(minionWithSkin -> {
+ EnumChatFormatting tierColor = Utils.getMinionTierColor(minionWithSkin.getKey());
+ String minionTier = MooConfig.useRomanNumerals() ? Utils.convertArabicToRoman(minionWithSkin.getKey()) : String.valueOf(minionWithSkin.getKey());
+ main.getChatHelper().sendMessage(EnumChatFormatting.GOLD, " " + minionWithSkin.getValue() + (minionWithSkin.getValue() > 1 ? "✕ " : "⨉ ") + EnumChatFormatting.RED + "Unknown minion " + EnumChatFormatting.YELLOW + "(new or with minion skin) " + tierColor + minionTier);
+ });
} else if (args.length == 2 && args[0].equalsIgnoreCase("add")) {
handleBestFriendAdd(args[1]);
} else if (args.length == 2 && args[0].equalsIgnoreCase("remove")) {
@@ -269,7 +350,8 @@ public class MooCommand extends CommandBase {
String skill = Utils.fancyCase(entry.getKey().name());
int level = entry.getKey().getLevel(entry.getValue());
if (level > 0) {
- skillLevels.appendFreshSibling(new MooChatComponent.KeyValueTooltipComponent(skill, String.valueOf(level)));
+ String skillLevel = MooConfig.useRomanNumerals() ? Utils.convertArabicToRoman(level) : String.valueOf(level);
+ skillLevels.appendFreshSibling(new MooChatComponent.KeyValueTooltipComponent(skill, skillLevel));
}
if (level > highestLevel) {
@@ -297,7 +379,8 @@ public class MooCommand extends CommandBase {
if (highestLevel == 0) {
sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Highest Skill", "All skills level 0"));
} else {
- sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Highest Skill", highestSkill + " " + highestLevel).setHover(skillLevels));
+ String highestSkillLevel = MooConfig.useRomanNumerals() ? Utils.convertArabicToRoman(highestLevel) : String.valueOf(highestLevel);
+ sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Highest Skill", highestSkill + " " + highestSkillLevel).setHover(skillLevels));
}
} else {
sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Highest Skill", "API access disabled"));
@@ -375,6 +458,7 @@ public class MooCommand extends CommandBase {
.appendSibling(createCmdHelpSection(1, "Friends"))
.appendSibling(createCmdHelpEntry("stalk", "Get info of player's status"))
.appendSibling(createCmdHelpEntry("stalkskyblock", "Get info of player's SkyBlock stats"))
+ .appendSibling(createCmdHelpEntry("analyzeIsland", "Analyze a SkyBlock private island"))
.appendSibling(createCmdHelpEntry("add", "Add best friends"))
.appendSibling(createCmdHelpEntry("remove", "Remove best friends"))
.appendSibling(createCmdHelpEntry("list", "View list of best friends"))
@@ -413,7 +497,7 @@ public class MooCommand extends CommandBase {
public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
if (args.length == 1) {
return getListOfStringsMatchingLastWord(args,
- /* friends */ "stalk", "stalkskyblock", "skyblockstalk", "add", "remove", "list", "nameChangeCheck", "toggle",
+ /* friends */ "stalk", "stalkskyblock", "skyblockstalk", "analyzeIsland", "add", "remove", "list", "nameChangeCheck", "toggle",
/* miscellaneous */ "config", "search", "guiscale", "shrug", "apikey",
/* update mod */ "update", "updateHelp", "version", "directory",
/* help */ "help");
diff --git a/src/main/java/eu/olli/cowmoonication/config/MooConfig.java b/src/main/java/eu/olli/cowmoonication/config/MooConfig.java
index 4500e34..235fd14 100644
--- a/src/main/java/eu/olli/cowmoonication/config/MooConfig.java
+++ b/src/main/java/eu/olli/cowmoonication/config/MooConfig.java
@@ -32,13 +32,14 @@ import java.util.regex.Pattern;
* @see FMLConfigGuiFactory
*/
public class MooConfig {
- public static final String CATEGORY_LOGS_SEARCH = "logssearch";
+ static final String CATEGORY_LOGS_SEARCH = "logssearch";
// main config
public static boolean doUpdateCheck;
public static boolean showBestFriendNotifications;
public static boolean showFriendNotifications;
public static boolean showGuildNotifications;
public static String[] tabCompletableNamesCommands;
+ private static String numeralSystem;
// logs search config
public static String[] logsDirs;
private static String defaultStartDate;
@@ -126,8 +127,10 @@ public class MooConfig {
"showFriendNotifications", false, "Set to true to receive friends' login/logout messages, set to false hide them."), true);
Property propShowGuildNotifications = addConfigEntry(cfg.get(Configuration.CATEGORY_CLIENT,
"showGuildNotifications", false, "Set to true to receive guild members' login/logout messages, set to false hide them."), true);
+ Property propNumeralSystem = addConfigEntry(cfg.get(Configuration.CATEGORY_CLIENT,
+ "numeralSystem", "Arabic numerals: 1, 4, 10", "Use Roman or Arabic numeral system?", new String[]{"Arabic numerals: 1, 4, 10", "Roman numerals: I, IV, X"}), true);
Property propTabCompletableNamesCommands = addConfigEntry(cfg.get(Configuration.CATEGORY_CLIENT,
- "tabCompletableNamesCommands", new String[]{"party", "p", "invite", "visit", "ignore", "msg", "tell", "w", "boop", "profile"}, "List of commands with a Tab-completable username argument."), true)
+ "tabCompletableNamesCommands", new String[]{"party", "p", "invite", "visit", "ah", "ignore", "msg", "tell", "w", "boop", "profile"}, "List of commands with a Tab-completable username argument."), true)
.setValidationPattern(Pattern.compile("^[A-Za-z]+$"));
Property propMoo = addConfigEntry(cfg.get(Configuration.CATEGORY_CLIENT,
"moo", "", "The answer to life the universe and everything. Don't edit this entry manually!", Utils.VALID_UUID_PATTERN), false);
@@ -149,13 +152,13 @@ public class MooConfig {
// 'manual' replacement for propTabCompletableNamesCommands.hasChanged()
boolean modifiedTabCompletableCommandsList = false;
String[] tabCompletableCommandsPreChange = tabCompletableNamesCommands != null ? tabCompletableNamesCommands.clone() : null;
-
if (readFieldsFromConfig) {
// main config
doUpdateCheck = propDoUpdateCheck.getBoolean();
showBestFriendNotifications = propShowBestFriendNotifications.getBoolean();
showFriendNotifications = propShowFriendNotifications.getBoolean();
showGuildNotifications = propShowGuildNotifications.getBoolean();
+ numeralSystem = propNumeralSystem.getString();
tabCompletableNamesCommands = propTabCompletableNamesCommands.getStringList();
moo = propMoo.getString();
@@ -173,6 +176,7 @@ public class MooConfig {
propShowBestFriendNotifications.set(showBestFriendNotifications);
propShowFriendNotifications.set(showFriendNotifications);
propShowGuildNotifications.set(showGuildNotifications);
+ propNumeralSystem.set(numeralSystem);
propTabCompletableNamesCommands.set(tabCompletableNamesCommands);
propMoo.set(moo);
@@ -250,6 +254,10 @@ public class MooConfig {
return showBestFriendNotifications || !showFriendNotifications || !showGuildNotifications;
}
+ public static boolean useRomanNumerals() {
+ return numeralSystem.startsWith("Roman");
+ }
+
public class ConfigEventHandler {
@SubscribeEvent(priority = EventPriority.NORMAL)
public void onEvent(ConfigChangedEvent.OnConfigChangedEvent e) {
diff --git a/src/main/java/eu/olli/cowmoonication/data/DataHelper.java b/src/main/java/eu/olli/cowmoonication/data/DataHelper.java
new file mode 100644
index 0000000..f09f298
--- /dev/null
+++ b/src/main/java/eu/olli/cowmoonication/data/DataHelper.java
@@ -0,0 +1,639 @@
+package eu.olli.cowmoonication.data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public final class DataHelper {
+ private DataHelper() {
+ }
+
+ public static Map<String, String> getMinions() {
+ // key = skin id, value = minion type and tier
+ Map<String, String> minions = new HashMap<>();
+ // TODO currently Fishing VI + VII and Creeper V + VI each use the same skull texture (server-side) - thus can't be distinguished
+ minions.put("2f93289a82bd2a06cbbe61b733cfdc1f1bd93c4340f7a90abd9bdda774109071", "Cobblestone I");
+ minions.put("3fd87486dc94cb8cd04a3d7d06f191f027f38dad7b4ed34c6681fb4d08834c06", "Cobblestone II");
+ minions.put("cc088ed6bb8763af4eb7d006e00fda7dc11d7681e97c983b7011c3e872f6aab9", "Cobblestone III");
+ minions.put("39514fee95d702625b974f1730fd62e567c5934997f73bae7e07ab52ddf9066e", "Cobblestone IV");
+ minions.put("3e2467b8ccaf007d03a9bb7c22d6a61397ca1bb284f128d5ccd138ad09124e68", "Cobblestone V");
+ minions.put("f4e01f552549037ae8887570700e74db20c6f026a650aeec5d9c8ec51ba3f515", "Cobblestone VI");
+ minions.put("51616e63be0ff341f70862e0049812fa0c27b39a2e77058dd8bfc386375e1d16", "Cobblestone VII");
+ minions.put("ea53e3c9f446a77e8c59df305a410a8accb751c002a41e55a1018ce1b3114690", "Cobblestone VIII");
+ minions.put("ccf546584428b5385bc0c1a0031aa87e98e85875e4d6104e1be06cef8bd74fe4", "Cobblestone IX");
+ minions.put("989db0a9c97f0e0b5bb9ec7b3e32f8d63c648d4608cfd5be9adbe8825d4e6a94", "Cobblestone X");
+ minions.put("ebcc099f3a00ece0e5c4b31d31c828e52b06348d0a4eac11f3fcbef3c05cb407", "Cobblestone XI");
+
+ minions.put("320c29ab966637cb9aecc34ee76d5a0130461e0c4fdb08cdaf80939fa1209102", "Obsidian I");
+ minions.put("58348315724fb1409142dda1cab2e45be34ead373d4a1ecdae6cb4143cd2bd25", "Obsidian II");
+ minions.put("c5c30c4800b25625ab51d4569437ad7f3e5f6465b51575512388b4c96ecbac90", "Obsidian III");
+ minions.put("1f417418f6df6efc7515ef31f4db570353d36ee87d46c6f87a7f9678b1f3ac57", "Obsidian IV");
+ minions.put("44d4ae42f0d6e82c7ebf9877303f9a84c96ce1978a8ac33681143f4b55a447ce", "Obsidian V");
+ minions.put("7c124351bd2da2312d261574fb578594c18720ac9c9d9edfdb57754b7340bd27", "Obsidian VI");
+ minions.put("db80b743fa6a8537c495ba7786ebefb3325e6013dc87d8c144ab902bbdb20f86", "Obsidian VII");
+ minions.put("745c8fc5ccb0bdbc19278c7e91ad6ac33d44f11fae46e1bfbfd1737ec1e420d4", "Obsidian VIII");
+ minions.put("15a45b66c8e21b515ea25abf47c9c27d995fe79b128844a0c8bf7777f3badee5", "Obsidian IX");
+ minions.put("1731be266b727b49ad135b4ea7b94843f7b322f873888da9fe037edea2984324", "Obsidian X");
+ minions.put("4d36910bcbb3fc0b7dedaae85ff052967ad74f3f4c2fb6f7dd2bed5bcfd0992b", "Obsidian XI");
+
+ minions.put("20f4d7c26b0310990a7d3a3b45948b95dd4ab407a16a4b6d3b7cb4fba031aeed", "Glowstone I");
+ minions.put("c0418cf84d91171f2cd67cbaf827c5b99ce4c1eeba76e77eab241e61e865a89f", "Glowstone II");
+ minions.put("7b21d7757c8ae382432b606b26ce7854f6c1555e668444ed0eecc2faab55a37d", "Glowstone III");
+ minions.put("3cc302e56b0474d5e428978704cd4a85de2f6c3e885a70f781e2838b551d5bfc", "Glowstone IV");
+ minions.put("ba8879a5be2d2cc75fcf468054046bc1eb9c61204a66f93991c9ff840a7c57cb", "Glowstone V");
+ minions.put("cd965a713f2e553c4c3ec047237b600b5ba0de9321a9c7dfe3d47b71d6afda41", "Glowstone VI");
+ minions.put("7f07e68f9985db6c905fe8f4f079137a6deef493413206d4ec90756245b4765e", "Glowstone VII");
+ minions.put("a8507f495bf89912dd2a317ae86faf8ce3631d62ca3d062e9fe5bf8d9d00fd70", "Glowstone VIII");
+ minions.put("b30d071e8c97a9c065b307d8a845ef8be6f6db85b71a2299f1bea0be062873e7", "Glowstone IX");
+ minions.put("8eeb870670e9408a78b386db6c2106e93f7c8cf03344b2cb3128ae0a4ea19674", "Glowstone X");
+ minions.put("8bc66c5eb7a197d959fcc5d45a7aff938e07ddcd42e3f3993bde00f56fe58dd1", "Glowstone XI");
+
+ minions.put("7458507ed31cf9a38986ac8795173c609637f03da653f30483a721d3fbe602d", "Gravel I");
+ minions.put("fb48c89157ae36038bbd9c88054ef8797f5b6f38631c1b57e58dcb8d701fa61d", "Gravel II");
+ minions.put("aae230c0ded51aa97c7964db885786f0c77f6244539b185ef4a5f2554199c785", "Gravel III");
+ minions.put("ef5b6973f41305d2b41aa82b94ef3b95e05e943e4cd4f793ca59278c46cbb985", "Gravel IV");
+ minions.put("c5961d126cda263759e43940c5665e9f1487ac2c7e26f903e5086affb3785714", "Gravel V");
+ minions.put("69c5f0583967589650b0de2c5108811ff01c32ac9861a820bba650f0412126d6", "Gravel VI");
+ minions.put("d092f7535b5d091cc3d3f0a343be5d46f16466ae9344b0cac452f3435f00996a", "Gravel VII");
+ minions.put("7117a2f4cf83c41a8dfb9c7a8238ca06bbdb5540a1e91e8721df5476b70f6e74", "Gravel VIII");
+ minions.put("14463534f9fbf4590d9e2dcc1067231ccb8d7f641ee56f4652a17f5027f62c63", "Gravel IX");
+ minions.put("5c6e62f2366d42596c752925c7799c63edbfc226fffd9327ce7780b24c3abd11", "Gravel X");
+ minions.put("3945c30d258d68576f061c162b7d50ca8a1f07e41d557e42723dbd4fcce5d594", "Gravel XI");
+
+ minions.put("81f8e2ad021eefd1217e650e848b57622144d2bf8a39fbd50dab937a7eac10de", "Sand I");
+ minions.put("2ab4e2bdb878de70505120203b4481f63611c7feac98db194f864be10b07b87e", "Sand II");
+ minions.put("a53d8f2c1449bc5b89e485182633b26970538e74410ac9e6e4f5eb1195c36887", "Sand III");
+ minions.put("847709a9f5bae2c5e727aee4be706a359c51acb842aafa1a4d23fb62f73e9aa6", "Sand IV");
+ minions.put("52b94ddeedecce5f90f9d227015dd6071c314cf0234433329e53f5b26b8cf890", "Sand V");
+ minions.put("7a756b6a9735b74031b284be6064898f649e5bb4d1300aafc3c0b280dad04b69", "Sand VI");
+ minions.put("13a1a8b92d83d2200d172d4bbda8d69e37afeb676d214b83af00f246c267dcd2", "Sand VII");
+ minions.put("765db90f1e3dab4df3a5a42cd80f7e71a92ea4739395df56f1750c73c27cdc4f", "Sand VIII");
+ minions.put("281ccdfe00a7843bce0c109676c1b59dd156389f730f00d3987c10aef64a7f96", "Sand IX");
+ minions.put("fdceae5bc34dee02b31a68b0015d0ca808844e491cf926c6763d52b26191993f", "Sand X");
+ minions.put("c0e9118bcebf481394132a5111fcbcd9981b9a99504923b04794912660e22cea", "Sand XI");
+
+ minions.put("af9b312c8f53da289060e6452855072e07971458abbf338ddec351e16c171ff8", "Clay I");
+ minions.put("7411bd08421fccfea5077320a5cd2e4eecd285c86fc9d2687abb795ef119097f", "Clay II");
+ minions.put("fd4ffcb5df4ef82fc07bc7585474c97fc0f2bf59022ffd6c2606b4675f8aaa42", "Clay III");
+ minions.put("fb2cfdad77fb027ede854bcd14ee5c0b4133aa25bf4c444789782c89acd00593", "Clay IV");
+ minions.put("393452da603462cce47dda35da160316291d8d8e6db8f377f5df71971242f3d1", "Clay V");
+ minions.put("23974725dd17729fc5f751a6749e02c8fa3d9299d890c9164225b1fbb7280329", "Clay VI");
+ minions.put("94a6fbf682862d7f0b68c192521e455122bb8f3a9b7ba876294027b7a35cd1a7", "Clay VII");
+ minions.put("f0ec6c510e8c72627efd3011bb3dcf5ad33d6b6162fa7fcbd46d661db02b2e68", "Clay VIII");
+ minions.put("c7de1140a2d1ce558dffb2f69666dc9145aa8166f1528a259013d2aa49c949a8", "Clay IX");
+ minions.put("b1655ad07817ef1e71c9b82024648340f0e46a3254857e1c7fee2a1eb2eaab41", "Clay X");
+ minions.put("8428bb198b27ac6656698cb3081c2ba94c8cee2f33d16e8e9e11e82a4c1763c6", "Clay XI");
+
+ minions.put("e500064321b12972f8e5750793ec1c823da4627535e9d12feaee78394b86dabe", "Ice I");
+ minions.put("de333a96dc994277adedb2c79d37605e45442bc97ff8c9138b62e90231008d08", "Ice II");
+ minions.put("c2846bd72a4b9ac548f6b69f21004f4d9a0f2a1aee66044fb9388ca06ecb0b0d", "Ice III");
+ minions.put("79579614fdaa24d6b2136a164c23e7ef082d3dee751c2e37e096d48bef028272", "Ice IV");
+ minions.put("60bcda03d6b3b91170818dd5d91fc718e6084ca06a2fa1e841bd1db2cb0859f4", "Ice V");
+ minions.put("38bdef08b0cd6378e9a7b9c4438f7324c65d2c2afdfb699ef14305b668b44700", "Ice VI");
+ minions.put("93a0b0c2794dda82986934e95fb5a08e30a174ef6120b70c58f573683088e27e", "Ice VII");
+ minions.put("d381912c9337a459a28f66e2a3edcdacbddc296dd69b3c820942ba1f4969d936", "Ice VIII");
+ minions.put("21cb422b9e633e0700692ae573c5f63a838ebc771a209a5e0cc3cba4c56f746f", "Ice IX");
+ minions.put("6406ca9dcd26cc148e05917ae1524066824a4f59f5865c47214ba8771e9b924b", "Ice X");
+ minions.put("5ef40b76cca1e4bcd2cbda5bc61bc982a519a2df5170662ea889bf0d95aa2c1b", "Ice XI");
+
+ minions.put("f6d180684c3521c9fc89478ba4405ae9ce497da8124fa0da5a0126431c4b78c3", "Snow I");
+ minions.put("69921bab54af140481c016a59a819b369667a4e4fb2f2449ceebf7c897ed588e", "Snow II");
+ minions.put("4e13862d1d0c52d272ece109e923af62aedebb13b56c47085f41752a5d4d59e2", "Snow III");
+ minions.put("44485d90a129ff672d9287af7bf47f8ece94abeb496bda38366330893aa69464", "Snow IV");
+ minions.put("9da9d3bfa431206ab33e62f8815e4092dae6e8fc9f04b9a005a205061ea895a8", "Snow V");
+ minions.put("7c53e9ef4aba3a41fe8e03c43e6a310eec022d1089fd9a92f3af8ed8eed4ec03", "Snow VI");
+ minions.put("e1fd2b30f2ef93785404cf4ca42e6f28755e2935cd3cae910121bfa4327345c1", "Snow VII");
+ minions.put("9f53221b1b2e40a97a7a10fb47710e61bdd84e15052dd817da2f89783248375e", "Snow VIII");
+ minions.put("caa370beebe77ced5ba4d106591d523640f57e7c46a4cecec60a4fe0ebac4a4c", "Snow IX");
+ minions.put("f2c498b33325cce5668a3395a262046412cfd4844b8d86ddaeb9c84e940e2af", "Snow X");
+ minions.put("bce70b1b8e30e90a5ad951f42ff469c19dd416cedf98d5aa4178ec953c584796", "Snow XI");
+
+ minions.put("425b8d2ea965c780652d29c26b1572686fd74f6fe6403b5a3800959feb2ad935", "Coal I");
+ minions.put("f262e1dad0b220f41581dbe272963fff60be55a85c0d587e460a447b33f797c6", "Coal II");
+ minions.put("b84f042872bfc4cc1381caab90a7bbe2c053cca1dae4238a861ac3f4139d7464", "Coal III");
+ minions.put("8c87968d19102ed75d95a04389f3759667cc48a2ecacee8b404f7c1681626748", "Coal IV");
+ minions.put("c5ebd621512c22d013aab7f443862a2d81856ce037afe80fcd6841d0d539136b", "Coal V");
+ minions.put("f4757020d157443e591b28c4661064d9a6a44dafe177c9bc133300b176fc40e", "Coal VI");
+ minions.put("2d2f9afcfada866a2918335509b5401d5c56d6902658090ec4ced91fea6bf53a", "Coal VII");
+ minions.put("1292ecec3b09fbbdffc07fbe7e17fa10b1ff82a6956744e3fa35c7eb75124a98", "Coal VIII");
+ minions.put("29f5b3c25dd013c4b1630746b7f6ee88c73c0bacf22a970a2331818c225a0620", "Coal IX");
+ minions.put("46bb54a946802ebce2f00760639b2bf484faed76cbb284eb2efaa5796d771e6", "Coal X");
+ minions.put("641ffadeaa22c8d97a72036cbd5d934ca454032a81957052e85f3f95b79d3169", "Coal XI");
+
+ minions.put("af435022cb3809a68db0fccfa8993fc1954dc697a7181494905b03fdda035e4a", "Iron I");
+ minions.put("5573adc1a442b2bad0bafd4415603e821d56a20201c1e7abd259cc0790baa7bf", "Iron II");
+ minions.put("b21f639707fbe87e55ca18424384b9ef5deb896fe16a6f23a7197b096f038ad9", "Iron III");
+ minions.put("a7e83a03615a41d7a7c967fd40c0583ad273d37d0a19bde3e4a562a0f680c920", "Iron IV");
+ minions.put("c6177919c0849aa737c07b13fd5019be5572d6c9e4be59c33645a99057f25014", "Iron V");
+ minions.put("546591b819ea8a33cf993bb433fa5bbbbb200af8e6eb1103a7d1ee11da1db5f1", "Iron VI");
+ minions.put("f58e6617cefe52eeacb9d3f7f424d52e4ae1b8e8f775c0bfd6045c99387851ab", "Iron VII");
+ minions.put("7e5ea57f0fb1f58a68746b5a6e93b8491528d09ba07b586b73a43ae05638ad0c", "Iron VIII");
+ minions.put("3679a748d40754d4e5bc418d152064c7aeee4121a2b1d8e058d0b0326f8bff3", "Iron IX");
+ minions.put("ac48b4758211fd0e4713ad0b6ea9d13a29eb9f523d3911dcff945197b8bc1a56", "Iron X");
+ minions.put("1b22b582b750dbdb0b7599c786d39f2efedfe64b5ae32656020295b57f2fcf7", "Iron XI");
+
+ minions.put("f6da04ed8c810be29bba53c62e712d65cfb25238117b94d7e85a4615775bf14f", "Gold I");
+ minions.put("761bcdb7251638f757cd70fd0fd21a2a05f41cbdc78ad3e50f64ecf38aa3220c", "Gold II");
+ minions.put("8bd48b17a82d5e395034d01db61c76f13f88da6e5a0b1c1d198fbdb0805a7739", "Gold III");
+ minions.put("2b46c4f5f574748cf82777ceba40a4fa96572f9e3cb871eb9258330df960f72e", "Gold IV");
+ minions.put("f6e438a6d1ef319c42d73a00db2b2981fdbb0e437a1c02399b8daf8d9e37a05b", "Gold V");
+ minions.put("1317a0b66ed2dc274b3b0d77b6859d4b9942ccc942d9e0bc26f7fa15b89842b", "Gold VI");
+ minions.put("9d4411f11d6c0c0eb43a139e16e5b7db3fdca94f3c1a2443ff6e9b06d576a6d4", "Gold VII");
+ minions.put("6439b889f62ff1f2cc5e00db5892655c591194b9294725a366efa3e4b2a022fa", "Gold VIII");
+ minions.put("5bf721e5d5403e11d176dd33d54458332195667e89d88bbf402c6d0307ec442c", "Gold IX");
+ minions.put("3d236e1e3ef0dea06e3be72f0980767c5aea41b882f8b9b58838298ace64dc9d", "Gold X");
+ minions.put("936a5712543dde0a3c7dc54063178cb69179dfd5cd75cb1de4fe8771b53dd03f", "Gold XI");
+
+ minions.put("2354bbe604dfe58bf92e7729730d0c8e37844e831ee3816d7e8427c27a1824a2", "Diamond I");
+ minions.put("5138692abccf0cebd0d99b4a59a26d41f779acfd35a07b2b527593356bc8ece6", "Diamond II");
+ minions.put("4e7ed1638aeaab8a87d5a1193080d46262e2d6d3aa22ad3222c6af0170b3ee17", "Diamond III");
+ minions.put("51fb872f35ad1536d2d5709797f8429043dc2f4cd5a4d8e91b9422dc5c51db95", "Diamond IV");
+ minions.put("32812ae070fca358216ad627859e2d69c67c8ac7b631ff4d5c57ebc394357095", "Diamond V");
+ minions.put("ec01c11ca159a5cd18ab45c03b1c56ae3a228711b8369daf828f85c5c1a4bb2c", "Diamond VI");
+ minions.put("a6a28d4cba6907c107421e90b90c274b5ac6ce937def9e28521b5ef81f461493", "Diamond VII");
+ minions.put("6406f0ba05e99cabb166f8982ac6eff8de42b5f884b26c2ffd4ad70ec7d21151", "Diamond VIII");
+ minions.put("d6cc4e3241c518aeb8e64e32a0b6f536d7684c8b5fe6bc9699db9ee6332cf70f", "Diamond IX");
+ minions.put("f024c9b17c2b4a84fe503726df57b7cd7a77827f530c6b93d2e94e7cc0b515f9", "Diamond X");
+ minions.put("537643ca84a56411f676a11eceab6d96fc7877ae3402c6083b69ee97ab95e700", "Diamond XI");
+
+ minions.put("64fd97b9346c1208c1db3957530cdfc5789e3e65943786b0071cf2b2904a6b5c", "Lapis I");
+ minions.put("65be0e9684b28a2531bec6186f75171c1111c3133b8ea944f32c34f247ea6923", "Lapis II");
+ minions.put("2a3915a78c2397f2cef96002391f54c544889c5ced4089eb723d14b0a6f02b08", "Lapis III");
+ minions.put("97df8ae6e1436504a6f08137313e5e47e17aa078827f3a636336668a4188e6fc", "Lapis IV");
+ minions.put("aa5d796b9687cc358ea59b06fdd9a0a519d2c7a2928de10d37848b91fbbc648f", "Lapis V");
+ minions.put("6e5db0956181c801b21e53cd7eb7335941801a0f335b535a7c9afd26022e9e70", "Lapis VI");
+ minions.put("1a49908cf8c407860512997f8256f0b831bd8fc4f41d0bf21cd23dbc0bdebb0f", "Lapis VII");
+ minions.put("c08a219f5cf568c9e03711518fcf18631a1866b407c1315017e3bf57f44ef563", "Lapis VIII");
+ minions.put("e5a93254f20364b7117f606fd6745769994acd3b5c057d3382e5dd828f9ebfd4", "Lapis IX");
+ minions.put("6fe5c4ceb6e66e7e0c357014be3d58f052a38c040be62f26af5fb9bed437541", "Lapis X");
+ minions.put("736cd50c9e8cf786646960734b5e23e4d2e3112f4494d5ddb3c1e45033324a0e", "Lapis XI");
+
+ minions.put("1edefcf1a89d687a0a4ecf1589977af1e520fc673c48a0434be426612e8faa67", "Redstone I");
+ minions.put("4ebdbf0aca7d245f6d54c91c37ec7102a55dd0f3b0cfe3c2485f3a99b3e53aa0", "Redstone II");
+ minions.put("c1a5175a1caf7a88a82b88b4737159132a68dc9fc99936696b1573ea5a7bb76d", "Redstone III");
+ minions.put("bbf83cb38bd6861b33665c1c6f56e29cbc4a87a2f494581999d51d309d58d0aa", "Redstone IV");
+ minions.put("d96fa75edd9bc6e1d89789e58a489c4594d406dd93d7c566ed4534971b52c118", "Redstone V");
+ minions.put("9cfd7010be9a08edd1e91c4203fccff6ddf71e680e4dfb4d32c38dee99d4a389", "Redstone VI");
+ minions.put("18db0ef0af4853603a3f663de24381159e9faaa1cdf93b026719dab050ea9954", "Redstone VII");
+ minions.put("a40b85c00f824f61beefd651c9588698e49d01902e84a098f79ee09941d8e4ac", "Redstone VIII");
+ minions.put("85d61b9d0b8ad786e8e1ff1dbbde1221a8691fda1daf93c8605cbc2e4fdea63", "Redstone IX");
+ minions.put("6588bed4136c95dd961b54a06307b2489726bbfe4fda41cee8ab2c57fa36f291", "Redstone X");
+ minions.put("6670498256b1cbae7c8463bc2d65036cf07447b146f7d3f69bfa2dc07e9fd8cf", "Redstone XI");
+
+ minions.put("9bf57f3401b130c6b53808f2b1e119cc7b984622dac7077bbd53454e1f65bbf0", "Emerald I");
+ minions.put("5e2d440d6c2300d94e7d5c44906d73a5cde521dfe516698513dd8c02ffdd5a82", "Emerald II");
+ minions.put("6b94475f5c54147c27cbba0434ca0f5e4a501c7bae44c73d36ea36016fa47fec", "Emerald III");
+ minions.put("65cbd71747c835a09af211e821d65c4facef7fb6824973bc3ca8c4aba4a98e30", "Emerald IV");
+ minions.put("dc7c36d02b65e871cc696db42b3ae0cc98670205c8bc90cf96e5f53424cd681e", "Emerald V");
+ minions.put("67136258da9fa4143c058d4d8a6758dcb6f615e6d98d019fdafe526e5f900b1f", "Emerald VI");
+ minions.put("a6762402cbd0127351fd1aa37423f463b309379eff4a2ad28b5766d51407f288", "Emerald VII");
+ minions.put("34e546bb3f8930b0a1a204daaec9ed76f85eab3d57a61e62c3133d11f65c15b", "Emerald VIII");
+ minions.put("db81f7229ad141b925ad3ff0f121c14686478a35f4777c73d3416505343d3811", "Emerald IX");
+ minions.put("c2ba3b81576024cbde5dade239ad7603e1fe5f9d8b1fe4716cfc68a9bcb2d324", "Emerald X");
+ minions.put("67a5b0b9839081488ffde6d0cd74b540cf23a505c95e521f77e337775c49b431", "Emerald XI");
+
+ minions.put("d270093be62dfd3019f908043db570b5dfd366fd5345fccf9da340e75c701a60", "Quartz I");
+ minions.put("c305506b47609d71488a793c12479ad8b990f7f39fd7de53a45f4c50874d1051", "Quartz II");
+ minions.put("83f023160a3289b9c21431194940c8e5f45c7e43687cf1834755151d7c2250f7", "Quartz III");
+ minions.put("c2bc6c98d4cbab68af7d8434116a92a351011165f73a3f6356fb88df8af40a49", "Quartz IV");
+ minions.put("5c0e10de9331da29e0a15e73475a351b8337cd4725b8b24880fb728eb9d679dd", "Quartz V");
+ minions.put("300120cabf0ae77a143adca34b9d7187ca1ef6d724269b256d5e3663c7f19bd9", "Quartz VI");
+ minions.put("bde647431a27149bf3f462a22515863af6c36532c1f66668688131ca11453fd1", "Quartz VII");
+ minions.put("9899278d0464397dd076408812eef40758f75b1cdb82c04c08c81503453e07e6", "Quartz VIII");
+ minions.put("2974bc0b9771a4af994ea571638adf1e98cd896acf95cc27b890915669bcedfd", "Quartz IX");
+ minions.put("3ae41345d675f4ed4dc5145662303123cb828b6e1a3e72d8278174488562dfa9", "Quartz X");
+ minions.put("7aeec9ef192e733bfcb723afd489cbf4735e7cfdd2ec45cae924009a8f093708", "Quartz XI");
+
+ minions.put("7994be3dcfbb4ed0a5a7495b7335af1a3ced0b5888b5007286a790767c3b57e6", "End Stone I");
+ minions.put("eb0f8a2752e733e8d9152b1cf0a385961fa1ba77daed8d2e4e02348691610529", "End Stone II");
+ minions.put("63f211a5f8aca7607a02df177145bea0c6edc032bc82807fb1daeaa5d95b447d", "End Stone III");
+ minions.put("fd40b308f1ca5b1188618c45a3de05b068d9cafba7039aa06d2bc5b9c6751cea", "End Stone IV");
+ minions.put("627218013240d63354b7fe931f1cbea1321535e28e292937f0c8f6f776088723", "End Stone V");
+ minions.put("70ca8dbb37647bb0b51b41799d619615af04976b8111dd22d3b23316562c6c30", "End Stone VI");
+ minions.put("1260560ce465dcd39fcb0c3ce365a88ff5c8e123cdc4d0e95e682e70b9283392", "End Stone VII");
+ minions.put("2b1755ccf1e0bba50ab41007aaec977286b7d7fcf3953a9c018aaf62967f3474", "End Stone VIII");
+ minions.put("13f379728f8cbb88300e8de137d9b576205cde2c5e36607ad8d3bb558f533d68", "End Stone IX");
+ minions.put("1fbd102a90e2a19a9d2f5fcc98da00b4addbfb02593b34367fe4c2339c37eff0", "End Stone X");
+ minions.put("35fc7b11e32ead79f7d110d3efb6447a66b387fce79f70fa4ceaaa0e0fe717f5", "End Stone XI");
+
+ minions.put("bbc571c5527336352e2fee2b40a9edfa2e809f64230779aa01253c6aa535881b", "Wheat I");
+ minions.put("c62b0508b3fef406833d519da8b08ee078604c78b8ca6e9c138760041fa861bf", "Wheat II");
+ minions.put("e61773628ed7555e0a63add21166ad34227d10d21e34c3c7e5a0fa8532dd3f6", "Wheat III");
+ minions.put("a8751403935a5c637ff225cddb739c6a960a48256bc88e6ead0a728d70981267", "Wheat IV");
+ minions.put("c32fa98a6c398ca75c9480711158a60a0f37e9f93bdc8fe4156191bd88a888b3", "Wheat V");
+ minions.put("662d04c94d385f6ecddaa4bc51371baf54061ab6f21c8a030df639d87ac6be2d", "Wheat VI");
+ minions.put("5c6f9f3a7b55ee7093ee8f5bf5888b16def6bfde157556df219a1c0b94b0458f", "Wheat VII");
+ minions.put("efe4b6553a3d0f764a20624f4ab256792167e5fc3b75b31b59732325a316f162", "Wheat VIII");
+ minions.put("2e3cb30a26293b7fc67519249bb07efd9c9a72229811e902e1627027938edcce", "Wheat IX");
+ minions.put("d6ab7a3d5438c101c71b727643d08d3b3fedf321d3853ade72b1ae83feb5df70", "Wheat X");
+ minions.put("2f6d62602c22e630153be8b764f45827585521bd82bb5307df1168f250f17f6b", "Wheat XI");
+
+ minions.put("95d54539ac8d3fba9696c91f4dcc7f15c320ab86029d5c92f12359abd4df811e", "Melon I");
+ minions.put("93dbb7b41ddd998842719915179a6b5a82d0c223e4c313c9eb081b52c84a764f", "Melon II");
+ minions.put("9ed762a1b1bf0c811a6cc62742526840e8eb3c01fc86cc5afed89ec9beeb530e", "Melon III");
+ minions.put("9e2654f305b788b9345bef6be076d8f36e7c946d6eae26d3c0803ddc4843b596", "Melon IV");
+ minions.put("1234f7f7ad67acd50b30932781c21a0b1cc22530a4980f688549123e10d9c474", "Melon V");
+ minions.put("8fea2e4ddf7314f21b87fc8d8634c60cab23320112002932d6c12c2e92d5549b", "Melon VI");
+ minions.put("213637a2898fd04f0ced904c0293f136238057c33b16983e0262ff9ae0047dd2", "Melon VII");
+ minions.put("3b7e6694866967e222664641461c0a1b08b9aa0c390944e6142e769d473987a5", "Melon VIII");
+ minions.put("8ebac9c3ddbb76ea862b91a6992bae358c0eaed7b2ca73fb28b8115be019e32b", "Melon IX");
+ minions.put("dca93d1d2dc3f7ee1ac66ab5280c619fbe37e1e338a6484808a5433b1a3ee911", "Melon X");
+ minions.put("166a1693eb7764d0c78d683bb53787db6836518de0b5087869df692dc6be942", "Melon XI");
+
+ minions.put("f3fb663e843a7da787e290f23c8af2f97f7b6f572fa59a0d4d02186db6eaabb7", "Pumpkin I");
+ minions.put("95bcb44bbeaec7c903d4f37273ff6a20bd40f240dfbefc4aaf25cb4b0a25f3c4", "Pumpkin II");
+ minions.put("6832fd793f38e20265cfef3d979289493b951e0b5fb53511984bf500b6ad64ca", "Pumpkin III");
+ minions.put("6656b05400537c47b3e986697e5af027ed36adf7c80d9edaec6b48cb1af9f99b", "Pumpkin IV");
+ minions.put("16685cf51ab0e08e842a822ca416225df3c583b32110bf4d778ad69f3f604b43", "Pumpkin V");
+ minions.put("ee1807903ca846a732ea46e9490b752a2803f75017a3008808c48437cfd8827f", "Pumpkin VI");
+ minions.put("cda682c874c482e9e659e37fe3e8399c5f3c4f6237f0656071af5ffaf418ea9a", "Pumpkin VII");
+ minions.put("bb72233f28cb814aadb63f0688033e7317907cf43f015097e493a578a3f50222", "Pumpkin VIII");
+ minions.put("2cc1a47302e055e561b06daede35f84a04829bc899af03d5603b78e55269c402", "Pumpkin IX");
+ minions.put("7e246ead094174d265eb03222417dd4ed1d1a6a5ad33d77ed2578ab55eed3a37", "Pumpkin X");
+ minions.put("4c6a48f079ef70d84df10332bb0f2bf038d8e0e82ac36734823fb4b4a50705e4", "Pumpkin XI");
+
+ minions.put("4baea990b45d330998cb0c1f8515c27b24f93bff1df0db056e647f8200d03b9d", "Carrot I");
+ minions.put("32a0a1695d50e0a9ced4b91edfd42afd41b4e737aa5d174c74b13963fb022556", "Carrot II");
+ minions.put("149dbae380e85f93d4c86f5097ec2ac3dec28389fb528a0d6a719fc6139626a8", "Carrot III");
+ minions.put("7399c0373eed7e12d5c212e13c51422e21d4ec7fa301f5a5c684f816a2eb2aab", "Carrot IV");
+ minions.put("c56711e5002d0a7003f85cc2f59137da467648332baa630d939684580c5bbddb", "Carrot V");
+ minions.put("52bc4e06ec80d34fb5c419d743e7ccf313866a98dbd15d53a83db98a7bff8ff5", "Carrot VI");
+ minions.put("c8c0dbbc8cc4bdc5d8483c732a61404ad12ab0ab7c49ff81cba2b709ae547923", "Carrot VII");
+ minions.put("f3e5e690f2f78fd39efb4b0bf212bf68eb02d76936891238c8db2b4940d49313", "Carrot VIII");
+ minions.put("42c2ab452b92102b7ba030b81084d000e155beb616a026f95a11c654e96f4e28", "Carrot IX");
+ minions.put("bdf031730f2f6bd8aaebfbc6e160723d294e03cc9545d98d9bdb84cfdf853266", "Carrot X");
+ minions.put("62858c422e0963f1b1da6196e9d47936acea449bea9f90e2dbf32f921f2522e", "Carrot XI");
+
+ minions.put("7dda35a044cb0374b516015d991a0f65bf7d0fb6566e350496642cf2059ff1d9", "Potato I");
+ minions.put("6ce06fb5d857f1b821b4f6f4481464b2471650733bf7baa3e1f6b41555aab561", "Potato II");
+ minions.put("29e3d309d56d37b51f4a356cba55fec4ac8e174bf2b72a03fb8361a2b41da17d", "Potato III");
+ minions.put("72fd7129e7831c043447a8355e78109431e7ca19959ef79dcc7a4c8f0a4ccf77", "Potato IV");
+ minions.put("2033a6e541525d523fe25da2c68a885ba1c2449362d0b35a68c95b69e8a28c87", "Potato V");
+ minions.put("2aea4e3ef5782f4cb6e0d38e8d871221d29197cb186aca0e144922e7cd2e1224", "Potato VI");
+ minions.put("6a1812e4f58f1ec46c608521fc5f51eb2e653bbc4e43cd9e89dff88e8c777e", "Potato VII");
+ minions.put("9788f69ebdb3030054feff365e689bb5b10a867f52f9873bc952fc26b54d48ff", "Potato VIII");
+ minions.put("b84792c8674b964f708b880df7d175631b9b6d9b5362353362ca997e727e1189", "Potato IX");
+ minions.put("e05c2ab7f41ca1f3f221b949edc7b20b800ed3bbaeb36514eb003887338f960", "Potato X");
+ minions.put("57441fa19d89d5df902c07586c084f1b00c4ca06ca4cc2ec5b6230d1a5199811", "Potato XI");
+
+ minions.put("4a3b58341d196a9841ef1526b367209cbc9f96767c24f5f587cf413d42b74a93", "Mushroom I");
+ minions.put("645c0b050d7223cce699f6cdc8649b865349ebc22001c067bf41151d6e5c1060", "Mushroom II");
+ minions.put("a8e5b335b018b36c2d259711bee83da5b42fcc55ec234514ae2c23b1e98d7e77", "Mushroom III");
+ minions.put("80970ebf76d0aa52a6abb7458a2e3917d967d553def9174a8b83697a10f4e339", "Mushroom IV");
+ minions.put("268b2d44457a92988400687d43e1562e0cb2ed1667ef0e62ed033a2881723eb4", "Mushroom V");
+ minions.put("ac8772dfd110ef66d5eb3957046834313adbf035f36352f2426be2802c1a21d8", "Mushroom VI");
+ minions.put("9fd3d54f0eb2570ffd254bcbff3b3c076521ed896118d984fb66db154d4a5466", "Mushroom VII");
+ minions.put("dd360de8da7f050cedad36e91f595577622a2ae9db32f622b745c47f35dc012e", "Mushroom VIII");
+ minions.put("e785f2fb94555998b380d19deffe120eb8dbd1191b0927312221e1f4f762a87d", "Mushroom IX");
+ minions.put("9ff2be74b7aad963d3f7bad59d2f9cda1337c3d00af0bcd6e314ba1fe348dfae", "Mushroom X");
+ minions.put("74e69059cb27b7b7c65b5543db19aa153a2509a0090719e5199f1082acc1b051", "Mushroom XI");
+
+ minions.put("ef93ec6e67a6cd272c9a9684b67df62584cb084a265eee3cde141d20e70d7d72", "Cactus I");
+ minions.put("d133a6e56ac05d1cfa027a564c7392b04c2cffda3e57c70b06ed5ae1d73ca6fe", "Cactus II");
+ minions.put("1b35a27732a2cb5ee36a52653b2e7d98bdd9d3d799499035c9f918344570c9e8", "Cactus III");
+ minions.put("6569e2f7104a423362844fdd645c3a9d2b8f8c1b8979d208ec20487ac2a5c783", "Cactus IV");
+ minions.put("c4fe9efb395689a9254fea06d929c3c408a5b314084399b386c009ca83a062a9", "Cactus V");
+ minions.put("ac8a964da5cc050812171dce6e9937191e4e7b65b7eb5f27e1846f868c023f58", "Cactus VI");
+ minions.put("2c1b5f3b3ffb6a8983f5110d4fd347df6086205bcedd3e065cbdf9ee47f957fe", "Cactus VII");
+ minions.put("2ddea64e86688c84d9edae63cf94765b9a5fac004e4babb3bfff081b30198327", "Cactus VIII");
+ minions.put("5a03ed5566128ca6d7911e2e1614450e28372e2b0513327689e183168edc5711", "Cactus IX");
+ minions.put("f4272b51f991a088d3aae579b93d253efc2e6d9657f0299191e3a18ee89a22c0", "Cactus X");
+ minions.put("b1cabca262d9f98ccabf5546c033614f664173c6f206e626ca8b316d7962f8c8", "Cactus XI");
+
+ minions.put("acb680e96f6177cd8ffaf27e9625d8b544d720afc50738801818d0e745c0e5f7", "Cocoa Beans I");
+ minions.put("475cb9dcc1b3c33aca8220834588d457f9f771235f37d62050544be2f2825d1b", "Cocoa Beans II");
+ minions.put("1d569fdd54d61e55c84960271950ce755d60ea6dc03c427773098649e8b7136d", "Cocoa Beans III");
+ minions.put("5ed37c0b33043212ad9527df957be53f0e0fb08c184648cf0d2a64775fb6b4ec", "Cocoa Beans IV");
+ minions.put("4ea5d503ed03184a906ad29a8b