using MinecraftClient.Inventory; using System.Collections.Generic; namespace MinecraftClient.Mapping { public static class Material2Tool { // Made with the following ressources: https://minecraft.fandom.com/wiki/Breaking // Sorted in alphabetical order. // Minable by Any Pickaxe. private static readonly List pickaxeTier0 = new List() { Material.ActivatorRail, Material.Andesite, Material.AndesiteSlab, Material.AndesiteStairs, Material.AndesiteWall, Material.Anvil, Material.Basalt, Material.Bell, Material.BlackConcrete, Material.BlackGlazedTerracotta, Material.BlackShulkerBox, Material.BlackTerracotta, Material.Blackstone, Material.BlackstoneSlab, Material.BlackstoneStairs, Material.BlackstoneWall, Material.BlastFurnace, Material.BlueConcrete, Material.BlueGlazedTerracotta, Material.BlueIce, Material.BlueShulkerBox, Material.BlueTerracotta, Material.BoneBlock, Material.BrewingStand, Material.BrickSlab, Material.BrickStairs, Material.BrickWall, Material.Bricks, Material.BrownConcrete, Material.BrownGlazedTerracotta, Material.BrownShulkerBox, Material.BrownTerracotta, Material.Cauldron, Material.WaterCauldron, Material.LavaCauldron, Material.PowderSnowCauldron, Material.Chain, Material.Calcite, Material.ChippedAnvil, Material.ChiseledDeepslate, Material.ChiseledNetherBricks, Material.ChiseledPolishedBlackstone, Material.ChiseledQuartzBlock, Material.ChiseledRedSandstone, Material.ChiseledSandstone, Material.ChiseledStoneBricks, Material.CoalBlock, Material.CoalOre, Material.CobbledDeepslateSlab, Material.CobbledDeepslateStairs, Material.CobbledDeepslateWall, Material.CobbledDeepslate, Material.Cobblestone, Material.CobblestoneSlab, Material.CobblestoneStairs, Material.CobblestoneWall, Material.Conduit, Material.CrackedDeepslateBricks, Material.CrackedDeepslateTiles, Material.CrackedNetherBricks, Material.CrackedPolishedBlackstoneBricks, Material.CrackedStoneBricks, Material.CrimsonNylium, Material.CutRedSandstone, Material.CutRedSandstoneSlab, Material.CutSandstone, Material.CutSandstoneSlab, Material.CyanConcrete, Material.CyanGlazedTerracotta, Material.CyanShulkerBox, Material.CyanTerracotta, Material.DamagedAnvil, Material.DarkPrismarine, Material.DarkPrismarineSlab, Material.DarkPrismarineStairs, Material.Deepslate, Material.DeepslateBrickSlab, Material.DeepslateBrickStairs, Material.DeepslateBricks, Material.DeepslateBrickWall, Material.DeepslateCoalOre, Material.DeepslateTileSlab, Material.DeepslateTileStairs, Material.DeepslateTiles, Material.DeepslateTileWall, Material.DetectorRail, Material.Diorite, Material.DioriteSlab, Material.DioriteStairs, Material.DioriteWall, Material.DripstoneBlock, Material.Dispenser, Material.Dropper, Material.EnchantingTable, Material.EndRod, Material.EndStone, Material.EndStoneBrickSlab, Material.EndStoneBrickStairs, Material.EndStoneBrickWall, Material.EndStoneBricks, Material.EnderChest, Material.FrostedIce, Material.Furnace, Material.GildedBlackstone, Material.Glowstone, Material.Granite, Material.GraniteSlab, Material.GraniteStairs, Material.GraniteWall, Material.GrayConcrete, Material.GrayGlazedTerracotta, Material.GrayShulkerBox, Material.GrayTerracotta, Material.GreenConcrete, Material.GreenGlazedTerracotta, Material.GreenShulkerBox, Material.GreenTerracotta, Material.Grindstone, Material.HeavyWeightedPressurePlate, Material.Hopper, Material.Ice, Material.IronBars, Material.IronDoor, Material.IronTrapdoor, Material.Lantern, Material.LightBlueConcrete, Material.LightBlueGlazedTerracotta, Material.LightBlueShulkerBox, Material.LightBlueTerracotta, Material.LightGrayConcrete, Material.LightGrayGlazedTerracotta, Material.LightGrayShulkerBox, Material.LightGrayTerracotta, Material.LightWeightedPressurePlate, Material.LimeConcrete, Material.LimeGlazedTerracotta, Material.LimeShulkerBox, Material.LimeTerracotta, Material.Lodestone, Material.MagentaConcrete, Material.MagentaGlazedTerracotta, Material.MagentaShulkerBox, Material.MagentaTerracotta, Material.MagmaBlock, Material.MossyCobblestone, Material.MossyCobblestoneSlab, Material.MossyCobblestoneStairs, Material.MossyCobblestoneWall, Material.MossyStoneBrickSlab, Material.MossyStoneBrickStairs, Material.MossyStoneBrickWall, Material.MossyStoneBricks, Material.NetherBrickFence, Material.NetherBrickSlab, Material.NetherBrickStairs, Material.NetherBrickWall, Material.NetherBricks, Material.NetherGoldOre, Material.NetherQuartzOre, Material.Netherrack, Material.Observer, Material.OrangeConcrete, Material.OrangeGlazedTerracotta, Material.OrangeShulkerBox, Material.OrangeTerracotta, Material.PackedIce, Material.PetrifiedOakSlab, Material.PinkConcrete, Material.PinkGlazedTerracotta, Material.PinkShulkerBox, Material.PinkTerracotta, Material.Piston, Material.PointedDripstone, Material.PolishedAndesite, Material.PolishedAndesiteSlab, Material.PolishedAndesiteStairs, Material.PolishedBasalt, Material.PolishedBlackstone, Material.PolishedBlackstoneBrickSlab, Material.PolishedBlackstoneBrickStairs, Material.PolishedBlackstoneBrickWall, Material.PolishedBlackstoneBricks, Material.PolishedBlackstoneButton, Material.PolishedBlackstonePressurePlate, Material.PolishedBlackstoneSlab, Material.PolishedBlackstoneStairs, Material.PolishedBlackstoneWall, Material.PolishedDiorite, Material.PolishedDioriteSlab, Material.PolishedDioriteStairs, Material.PolishedGranite, Material.PolishedGraniteSlab, Material.PolishedGraniteStairs, Material.PoweredRail, Material.Prismarine, Material.PrismarineBrickSlab, Material.PrismarineBrickStairs, Material.PrismarineBricks, Material.PrismarineSlab, Material.PrismarineStairs, Material.PrismarineWall, Material.PurpleConcrete, Material.PurpleGlazedTerracotta, Material.PurpleShulkerBox, Material.PurpleTerracotta, Material.PurpurBlock, Material.PurpurPillar, Material.PurpurSlab, Material.PurpurStairs, Material.QuartzBlock, Material.QuartzBricks, Material.QuartzPillar, Material.QuartzSlab, Material.QuartzStairs, Material.Rail, Material.RedConcrete, Material.RedGlazedTerracotta, Material.RedNetherBrickSlab, Material.RedNetherBrickStairs, Material.RedNetherBrickWall, Material.RedNetherBricks, Material.RedSandstone, Material.RedSandstoneSlab, Material.RedSandstoneStairs, Material.RedSandstoneWall, Material.RedShulkerBox, Material.RedTerracotta, Material.RedstoneBlock, Material.Sandstone, Material.SandstoneSlab, Material.SandstoneStairs, Material.SandstoneWall, Material.ShulkerBox, Material.Smoker, Material.SmoothBasalt, Material.SmoothQuartz, Material.SmoothQuartzSlab, Material.SmoothQuartzStairs, Material.SmoothRedSandstone, Material.SmoothRedSandstoneSlab, Material.SmoothRedSandstoneStairs, Material.SmoothSandstone, Material.SmoothSandstoneSlab, Material.SmoothSandstoneStairs, Material.SmoothStone, Material.SmoothStoneSlab, Material.Spawner, Material.StickyPiston, Material.Stone, Material.StoneBrickSlab, Material.StoneBrickStairs, Material.StoneBrickWall, Material.StoneBricks, Material.StoneButton, Material.StonePressurePlate, Material.StoneSlab, Material.StoneStairs, Material.Stonecutter, Material.Terracotta, Material.Tuff, Material.WarpedNylium, Material.WhiteConcrete, Material.WhiteGlazedTerracotta, Material.WhiteShulkerBox, Material.WhiteTerracotta, Material.YellowConcrete, Material.YellowGlazedTerracotta, Material.YellowShulkerBox, Material.YellowTerracotta, }; // Minable by Stone, iron, diamond, netherite. private static readonly List pickaxeTier1 = new List() { Material.CopperOre, Material.CopperBlock, Material.CutCopperSlab, Material.CutCopperStairs, Material.CutCopper, Material.DeepslateCopperOre, Material.DeepslateIronOre, Material.DeepslateLapisOre, Material.ExposedCopper, Material.ExposedCutCopperSlab, Material.ExposedCutCopperStairs, Material.ExposedCutCopper, Material.IronBlock, Material.IronOre, Material.LapisBlock, Material.LapisOre, Material.LightningRod, Material.OxidizedCopper, Material.OxidizedCutCopperSlab, Material.OxidizedCutCopperStairs, Material.OxidizedCutCopper, Material.RawCopperBlock, Material.RawIronBlock, Material.Terracotta, Material.WaxedCopperBlock, Material.WaxedCutCopperSlab, Material.WaxedCutCopperStairs, Material.WaxedCutCopper, Material.WaxedExposedCopper, Material.WaxedExposedCutCopperSlab, Material.WaxedExposedCutCopperStairs, Material.WaxedExposedCutCopper, Material.WaxedOxidizedCopper, Material.WaxedOxidizedCutCopperSlab, Material.WaxedOxidizedCutCopperStairs, Material.WaxedOxidizedCutCopper, Material.WaxedWeatheredCopper, Material.WaxedWeatheredCutCopperSlab, Material.WaxedWeatheredCutCopperStairs, Material.WaxedWeatheredCutCopper, Material.WeatheredCopper, Material.WeatheredCutCopperSlab, Material.WeatheredCutCopperStairs, Material.WeatheredCutCopper, }; // Minable by Iron, diamond, netherite. private static readonly List pickaxeTier2 = new List() { Material.DeepslateDiamondOre, Material.DeepslateEmeraldOre, Material.DeepslateGoldOre, Material.DeepslateRedstoneOre, Material.DiamondBlock, Material.DiamondOre, Material.EmeraldBlock, Material.EmeraldOre, Material.GoldBlock, Material.GoldOre, Material.RawGoldBlock, Material.RedstoneOre, }; // Minable by Diamond, Netherite. private static readonly List pickaxeTier3 = new List() { Material.AncientDebris, Material.CryingObsidian, Material.NetheriteBlock, Material.Obsidian, Material.RespawnAnchor }; // Every shovel can mine every block (speed difference). private static readonly List shovel = new List() { Material.BlackConcretePowder, Material.BlueConcretePowder, Material.BrownConcretePowder, Material.Clay, Material.CoarseDirt, Material.CyanConcretePowder, Material.Dirt, Material.Farmland, Material.Grass, Material.GrassBlock, Material.GrassPath, Material.Gravel, Material.GrayConcretePowder, Material.GreenConcretePowder, Material.LightBlueConcretePowder, Material.LightGrayConcretePowder, Material.LimeConcretePowder, Material.MagentaConcretePowder, Material.Mycelium, Material.OrangeConcretePowder, Material.PinkConcretePowder, Material.Podzol, Material.PrismarineSlab, Material.PurpleConcretePowder, Material.RedConcretePowder, Material.RedSand, Material.RootedDirt, Material.Sand, Material.Snow, Material.SnowBlock, Material.SoulSand, Material.SoulSoil, Material.WhiteConcretePowder, Material.YellowConcretePowder, }; // Every axe can mine every block (speed difference). private static readonly List axe = new List() { Material.AcaciaButton, Material.AcaciaDoor, Material.AcaciaFence, Material.AcaciaFenceGate, Material.AcaciaLog, Material.AcaciaPlanks, Material.AcaciaPressurePlate, Material.AcaciaSign, Material.AcaciaSlab, Material.AcaciaStairs, Material.AcaciaTrapdoor, Material.AcaciaWallSign, Material.AcaciaWood, Material.Barrel, Material.BeeNest, Material.Beehive, Material.BigDripleaf, Material.BirchButton, Material.BirchDoor, Material.BirchFence, Material.BirchFenceGate, Material.BirchLog, Material.BirchPlanks, Material.BirchPressurePlate, Material.BirchSign, Material.BirchSlab, Material.BirchStairs, Material.BirchTrapdoor, Material.BirchWallSign, Material.BirchWood, Material.BlackBanner, Material.BlackWallBanner, Material.BlueBanner, Material.BlueWallBanner, Material.Bookshelf, Material.BrownBanner, Material.BrownMushroomBlock, Material.BrownWallBanner, Material.Campfire, Material.CartographyTable, Material.Chest, Material.Cocoa, Material.Composter, Material.CraftingTable, Material.CrimsonButton, Material.CrimsonDoor, Material.CrimsonFence, Material.CrimsonFenceGate, Material.CrimsonHyphae, Material.CrimsonPlanks, Material.CrimsonPressurePlate, Material.CrimsonSign, Material.CrimsonSlab, Material.CrimsonStairs, Material.CrimsonStem, Material.CrimsonTrapdoor, Material.CrimsonWallSign, Material.CyanBanner, Material.CyanWallBanner, Material.DarkOakButton, Material.DarkOakDoor, Material.DarkOakFence, Material.DarkOakFenceGate, Material.DarkOakLog, Material.DarkOakPlanks, Material.DarkOakPressurePlate, Material.DarkOakSign, Material.DarkOakSlab, Material.DarkOakStairs, Material.DarkOakTrapdoor, Material.DarkOakWallSign, Material.DarkOakWood, Material.DaylightDetector, Material.FletchingTable, Material.GrayBanner, Material.GrayWallBanner, Material.GreenBanner, Material.GreenWallBanner, Material.JackOLantern, Material.Jukebox, Material.JungleButton, Material.JungleDoor, Material.JungleFence, Material.JungleFenceGate, Material.JungleLog, Material.JunglePlanks, Material.JunglePressurePlate, Material.JungleSign, Material.JungleSlab, Material.JungleStairs, Material.JungleTrapdoor, Material.JungleWallSign, Material.JungleWood, Material.Ladder, Material.Lectern, Material.LightBlueBanner, Material.LightBlueWallBanner, Material.LightGrayBanner, Material.LightGrayWallBanner, Material.LimeBanner, Material.LimeWallBanner, Material.Loom, Material.MagentaBanner, Material.MagentaWallBanner, Material.Melon, Material.MushroomStem, Material.NoteBlock, Material.OakButton, Material.OakDoor, Material.OakFence, Material.OakFenceGate, Material.OakLog, Material.OakPlanks, Material.OakPressurePlate, Material.OakSign, Material.OakSlab, Material.OakStairs, Material.OakTrapdoor, Material.OakWallSign, Material.OakWood, Material.OrangeBanner, Material.OrangeWallBanner, Material.PinkBanner, Material.PinkWallBanner, Material.Pumpkin, Material.PurpleBanner, Material.PurpleWallBanner, Material.RedBanner, Material.RedMushroomBlock, Material.RedWallBanner, Material.SmithingTable, Material.SoulCampfire, Material.SpruceButton, Material.SpruceDoor, Material.SpruceFence, Material.SpruceFenceGate, Material.SpruceLog, Material.SprucePlanks, Material.SprucePressurePlate, Material.SpruceSign, Material.SpruceSlab, Material.SpruceStairs, Material.SpruceTrapdoor, Material.SpruceWallSign, Material.SpruceWood, Material.StrippedAcaciaLog, Material.StrippedAcaciaWood, Material.StrippedBirchLog, Material.StrippedBirchWood, Material.StrippedCrimsonHyphae, Material.StrippedCrimsonStem, Material.StrippedDarkOakLog, Material.StrippedDarkOakWood, Material.StrippedDarkOakWood, Material.StrippedJungleLog, Material.StrippedJungleWood, Material.StrippedOakLog, Material.StrippedOakWood, Material.StrippedSpruceLog, Material.StrippedSpruceWood, Material.StrippedWarpedHyphae, Material.StrippedWarpedStem, Material.TrappedChest, Material.Vine, Material.WarpedButton, Material.WarpedDoor, Material.WarpedFence, Material.WarpedFenceGate, Material.WarpedHyphae, Material.WarpedPlanks, Material.WarpedPressurePlate, Material.WarpedSign, Material.WarpedSlab, Material.WarpedStairs, Material.WarpedStem, Material.WarpedTrapdoor, Material.WarpedWallSign, Material.WhiteBanner, Material.WhiteWallBanner, Material.YellowBanner, Material.YellowWallBanner, }; // Every block a shear can mine. private static readonly List shears = new List() { Material.AcaciaLeaves, Material.AzaleaLeaves, Material.BirchLeaves, Material.BlackWool, Material.BlueWool, Material.BrownWool, Material.Cobweb, Material.CyanWool, Material.DarkOakLeaves, Material.FloweringAzaleaLeaves, Material.GrayWool, Material.GreenWool, Material.JungleLeaves, Material.LightBlueWool, Material.LightGrayWool, Material.LimeWool, Material.MagentaWool, Material.OakLeaves, Material.OrangeWool, Material.PinkWool, Material.PurpleWool, Material.RedWool, Material.SpruceLeaves, Material.WhiteWool, Material.YellowWool, }; // Every block that is mined with a sword. private static readonly List sword = new List() { Material.Bamboo, Material.Cobweb, Material.InfestedChiseledStoneBricks, Material.InfestedDeepslate, Material.InfestedCobblestone, Material.InfestedCrackedStoneBricks, Material.InfestedMossyStoneBricks, Material.InfestedStone, Material.InfestedStoneBricks, }; // Every block that can be mined with a hoe. private static readonly List hoe = new List() { Material.AcaciaLeaves, Material.BirchLeaves, Material.DarkOakLeaves, Material.HayBlock, Material.JungleLeaves, Material.MossBlock, Material.NetherWartBlock, Material.OakLeaves, Material.SculkSensor, Material.Shroomlight, Material.Sponge, Material.SpruceLeaves, Material.Target, Material.WarpedWartBlock, Material.WetSponge, }; // Liquids private static readonly List bucket = new List() { Material.Lava, Material.Water }; // Unbreakable Blocks private static readonly List unbreakable = new List() { Material.Air, Material.Barrier, Material.Bedrock, Material.BubbleColumn, Material.ChainCommandBlock, Material.CommandBlock, Material.EndGateway, Material.EndPortal, Material.EndPortalFrame, Material.Jigsaw, Material.NetherPortal, Material.RepeatingCommandBlock, Material.StructureBlock, Material.StructureVoid }; /// /// Evaluates the right tool for the job /// /// Enter the Material of a block /// Returns a list of tools that can be used, best to worst public static ItemType[] GetCorrectToolForBlock(Material block) { if (pickaxeTier0.Contains(block)) { return new ItemType[] { ItemType.NetheritePickaxe, ItemType.DiamondPickaxe, ItemType.IronPickaxe, ItemType.GoldenPickaxe, ItemType.StonePickaxe, ItemType.WoodenPickaxe, }; } else if (pickaxeTier1.Contains(block)) { return new ItemType[] { ItemType.NetheritePickaxe, ItemType.DiamondPickaxe, ItemType.IronPickaxe, ItemType.GoldenPickaxe, ItemType.StonePickaxe, }; } else if (pickaxeTier2.Contains(block)) { return new ItemType[] { ItemType.NetheritePickaxe, ItemType.DiamondPickaxe, ItemType.IronPickaxe, }; } else if (pickaxeTier3.Contains(block)) { return new ItemType[] { ItemType.NetheritePickaxe, ItemType.DiamondPickaxe, }; } else if (shovel.Contains(block)) { return new ItemType[] { ItemType.NetheriteShovel, ItemType.DiamondShovel, ItemType.IronShovel, ItemType.GoldenShovel, ItemType.StoneShovel, ItemType.WoodenShovel, }; } else if (axe.Contains(block)) { return new ItemType[] { ItemType.NetheriteAxe, ItemType.DiamondAxe, ItemType.IronAxe, ItemType.GoldenAxe, ItemType.StoneAxe, ItemType.WoodenAxe, }; } else if (shears.Contains(block)) { return new ItemType[] { ItemType.Shears, }; } else if (sword.Contains(block)) { return new ItemType[] { ItemType.NetheriteSword, ItemType.DiamondSword, ItemType.IronSword, ItemType.GoldenSword, ItemType.StoneSword, ItemType.WoodenSword, }; } else if (hoe.Contains(block)) { return new ItemType[] { ItemType.NetheriteHoe, ItemType.DiamondHoe, ItemType.IronHoe, ItemType.GoldenHoe, ItemType.StoneHoe, ItemType.WoodenHoe, }; } else if (bucket.Contains(block)) { return new ItemType[] { ItemType.Bucket, }; } else { return new ItemType[0]; } } public static bool IsUnbreakable(Material block) { return unbreakable.Contains(block); } } }