diff --git a/.skills/mermaid-diagrams/SKILL.md b/.skills/mermaid-diagrams/SKILL.md new file mode 100644 index 00000000..2d7ca5a5 --- /dev/null +++ b/.skills/mermaid-diagrams/SKILL.md @@ -0,0 +1,211 @@ +--- +name: mermaid-diagrams +description: Creating and refining Mermaid diagrams with live reload. Use when users want flowcharts, sequence diagrams, class diagrams, ER diagrams, state diagrams, or any other Mermaid visualization. Provides best practices for syntax, styling, and the iterative workflow using mermaid_preview and mermaid_save tools. +allowed-tools: mcp__mermaid__mermaid_preview, mcp__mermaid__mermaid_save +--- + +# Mermaid Diagram Expert + +You are an expert at creating, refining, and optimizing Mermaid diagrams using the MCP server tools. + +## Core Workflow + +1. **Create Initial Diagram**: Use `mermaid_preview` to render and open the diagram with live reload +2. **Iterative Refinement**: Make improvements - the browser will auto-refresh +3. **Save Final Version**: Use `mermaid_save` when satisfied + +## Tool Usage + +### mermaid_preview + +Always use this when creating or updating diagrams: + +- `diagram`: The Mermaid code +- `preview_id`: Descriptive kebab-case ID (e.g., `auth-flow`, `architecture`) +- `format`: Use `svg` for live reload (default) +- `theme`: `default`, `forest`, `dark`, or `neutral` +- `background`: `white`, `transparent`, or hex colors +- `width`, `height`, `scale`: Adjust for quality/size + +**Key Points:** + +- Reuse the same `preview_id` for refinements to update the same browser tab +- Use different IDs for multiple simultaneous diagrams +- Live reload only works with SVG format + +### mermaid_save + +Use after the diagram is finalized: + +- `save_path`: Where to save (e.g., `./docs/diagram.svg`) +- `preview_id`: Must match the preview ID used earlier +- `format`: Must match format from preview + +## Diagram Types + +### Flowcharts (`graph` or `flowchart`) + +Direction: `LR`, `TB`, `RL`, `BT` + +```mermaid +graph LR + A[Start] --> B{Decision} + B -->|Yes| C[Action] + B -->|No| D[End] + + style A fill:#e1f5ff + style C fill:#d4edda +``` + +### Sequence Diagrams (`sequenceDiagram`) + +⚠️ **Do NOT use `style` statements** - not supported + +```mermaid +sequenceDiagram + participant User + participant App + participant API + + User->>App: Login + App->>API: Authenticate + API-->>App: Token + App-->>User: Success +``` + +### Class Diagrams (`classDiagram`) + +```mermaid +classDiagram + class User { + +String name + +String email + +login() + } + class Order { + +int id + +Date created + } + User "1" --> "*" Order +``` + +### Entity Relationship (`erDiagram`) + +```mermaid +erDiagram + USER ||--o{ ORDER : places + ORDER ||--|{ LINE_ITEM : contains + + USER { + int id PK + string email + string name + } +``` + +### State Diagrams (`stateDiagram-v2`) + +```mermaid +stateDiagram-v2 + [*] --> Idle + Idle --> Processing : start + Processing --> Complete : finish + Complete --> [*] +``` + +### Gantt Charts (`gantt`) + +```mermaid +gantt + title Project Timeline + section Phase 1 + Task 1 :a1, 2024-01-01, 30d + Task 2 :after a1, 20d +``` + +## Best Practices + +### Preview IDs + +- Use descriptive names: `architecture`, `auth-flow`, `data-model` +- Keep the same ID during refinements +- Use different IDs for concurrent diagrams + +### Themes & Styling + +- `default`: Clean, professional +- `forest`: Green tones +- `dark`: Dark background +- `neutral`: Grayscale + +Use `transparent` background for docs, `white` for standalone + +### Common Patterns + +**System Architecture:** + +```mermaid +graph TB + Client[Web App] + API[API Gateway] + DB[(Database)] + + Client --> API --> DB +``` + +**Authentication Flow:** + +```mermaid +sequenceDiagram + User->>App: Login Request + App->>Auth: Validate + Auth-->>App: JWT Token + App-->>User: Access Granted +``` + +## User Interaction + +When a user requests a diagram: + +1. **Clarify if needed**: What type? What level of detail? +2. **Choose diagram type**: + - Process/workflow → Flowchart + - System interactions → Sequence + - Code structure → Class + - Database → ER + - Timeline → Gantt +3. **Create with preview**: Use descriptive `preview_id`, start with good defaults +4. **Iterate**: Keep same `preview_id`, explain changes +5. **Save**: Ask where/what format, use `mermaid_save` + +## Proactive Behavior + +- Always preview diagrams, don't just generate code +- Use sensible defaults without asking +- Reuse preview_id for refinements +- Suggest improvements when you see opportunities +- Explain your diagram type choice briefly + +## Common Issues + +**Syntax errors**: Check quotes, arrow syntax, keywords +**Layout issues**: Try different directions (LR vs TB) +**Text overlap**: Increase dimensions or shorten labels +**Colors not working**: Verify CSS color format; remember sequence diagrams don't support styles + +## Example Interaction + +**User**: "Create an auth flow diagram" + +**You**: "I'll create a sequence diagram showing the authentication flow." +[Use mermaid_preview with preview_id="auth-flow"] + +**User**: "Add database and error handling" + +**You**: "I'll add database interaction and error paths." +[Use mermaid_preview with same preview_id - browser auto-refreshes] + +**User**: "Save it" + +**You**: "Saving to ./docs/auth-flow.svg" +[Use mermaid_save] diff --git a/MinecraftClient/ChatBots/AutoDig.cs b/MinecraftClient/ChatBots/AutoDig.cs index 148335d5..04f3f6da 100644 --- a/MinecraftClient/ChatBots/AutoDig.cs +++ b/MinecraftClient/ChatBots/AutoDig.cs @@ -30,6 +30,12 @@ namespace MinecraftClient.ChatBots [TomlInlineComment("$ChatBot.AutoDig.Auto_Tool_Switch$")] public bool Auto_Tool_Switch = false; + [TomlInlineComment("$ChatBot.AutoDig.Apply_Efficiency_Enchantments$")] + public bool Apply_Efficiency_Enchantments = true; + + [TomlInlineComment("$ChatBot.AutoDig.Apply_Haste_Effects$")] + public bool Apply_Haste_Effects = true; + [TomlInlineComment("$ChatBot.AutoDig.Durability_Limit$")] public int Durability_Limit = 2; @@ -322,6 +328,15 @@ namespace MinecraftClient.ChatBots return !IsBelowDurabilityLimit(currentTool); } + private static MiningCalculator.MiningOptions GetMiningOptions() + { + return new MiningCalculator.MiningOptions + { + ApplyEfficiencyEnchantments = Config.Apply_Efficiency_Enchantments, + ApplyHasteEffects = Config.Apply_Haste_Effects + }; + } + public override void Update() { lock (stateLock) @@ -393,7 +408,7 @@ namespace MinecraftClient.ChatBots if (!EnsureSuitableTool(block.Type)) return false; - if (DigBlock(blockLoc, Direction.Down, lookAtBlock: false)) + if (DigBlock(blockLoc, Direction.Down, lookAtBlock: false, miningOptions: GetMiningOptions())) { currentDig = blockLoc; if (Config.Log_Block_Dig) @@ -457,7 +472,7 @@ namespace MinecraftClient.ChatBots if (!EnsureSuitableTool(targetBlock.Type)) return false; - if (DigBlock(target, Direction.Down, lookAtBlock: true)) + if (DigBlock(target, Direction.Down, lookAtBlock: true, miningOptions: GetMiningOptions())) { currentDig = target; if (Config.Log_Block_Dig) @@ -494,7 +509,7 @@ namespace MinecraftClient.ChatBots if (!EnsureSuitableTool(block.Type)) return false; - if (DigBlock(blockLoc, Direction.Down, lookAtBlock: true)) + if (DigBlock(blockLoc, Direction.Down, lookAtBlock: true, miningOptions: GetMiningOptions())) { currentDig = blockLoc; if (Config.Log_Block_Dig) diff --git a/MinecraftClient/Mapping/BlockHardness.cs b/MinecraftClient/Mapping/BlockHardness.cs index 84cd8f92..97d1df94 100644 --- a/MinecraftClient/Mapping/BlockHardness.cs +++ b/MinecraftClient/Mapping/BlockHardness.cs @@ -5,12 +5,12 @@ namespace MinecraftClient.Mapping { /// /// Provides block hardness values and tool requirement data for mining calculations. - /// Data extracted from Minecraft 1.21.11 decompiled source (Blocks.java). + /// Data extracted from Minecraft 1.21.11 decompiled Blocks.java. /// public static class BlockHardness { /// - /// Default hardness for blocks not in the table (assumes stone-like). + /// Default hardness for blocks not in the table. Uses stone-like hardness as a safe fallback. /// public const float DefaultHardness = 1.5f; @@ -27,7 +27,7 @@ namespace MinecraftClient.Mapping /// /// Check whether a block requires the correct tool to get drops - /// (and uses the 100 divisor instead of 30 when mined without the correct tool). + /// and uses the 100 divisor instead of 30 when mined without the correct tool. /// public static bool RequiresCorrectTool(Material material) { @@ -36,172 +36,463 @@ namespace MinecraftClient.Mapping private static readonly FrozenDictionary HardnessTable = new Dictionary { - // Hardness -1.0: 15 blocks - { Material.Barrier, -1.0f }, - { Material.Bedrock, -1.0f }, - { Material.ChainCommandBlock, -1.0f }, - { Material.CommandBlock, -1.0f }, - { Material.EndGateway, -1.0f }, - { Material.EndPortal, -1.0f }, - { Material.EndPortalFrame, -1.0f }, - { Material.Jigsaw, -1.0f }, - { Material.Light, -1.0f }, - { Material.MovingPiston, -1.0f }, - { Material.NetherPortal, -1.0f }, - { Material.RepeatingCommandBlock, -1.0f }, - { Material.StructureBlock, -1.0f }, - { Material.TestBlock, -1.0f }, - { Material.TestInstanceBlock, -1.0f }, - // Hardness 0.0: 443 blocks - { Material.AcaciaButton, 0.0f }, - { Material.AcaciaLeaves, 0.0f }, - { Material.AcaciaLog, 0.0f }, + { Material.AcaciaButton, 0.5f }, + { Material.AcaciaDoor, 3.0f }, + { Material.AcaciaFence, 2.0f }, + { Material.AcaciaFenceGate, 2.0f }, + { Material.AcaciaHangingSign, 1.0f }, + { Material.AcaciaLeaves, 0.2f }, + { Material.AcaciaLog, 2.0f }, + { Material.AcaciaPlanks, 2.0f }, + { Material.AcaciaPressurePlate, 0.5f }, { Material.AcaciaSapling, 0.0f }, + { Material.AcaciaShelf, 2.0f }, + { Material.AcaciaSign, 1.0f }, + { Material.AcaciaSlab, 2.0f }, + { Material.AcaciaStairs, 2.0f }, + { Material.AcaciaTrapdoor, 3.0f }, + { Material.AcaciaWallHangingSign, 1.0f }, + { Material.AcaciaWallSign, 1.0f }, + { Material.AcaciaWood, 2.0f }, + { Material.ActivatorRail, 0.7f }, { Material.Air, 0.0f }, { Material.Allium, 0.0f }, - { Material.AndesiteSlab, 0.0f }, - { Material.AndesiteWall, 0.0f }, + { Material.AmethystBlock, 1.5f }, + { Material.AmethystCluster, 1.5f }, + { Material.AncientDebris, 30.0f }, + { Material.Andesite, 1.5f }, + { Material.AndesiteSlab, 1.5f }, + { Material.AndesiteStairs, 1.5f }, + { Material.AndesiteWall, 1.5f }, + { Material.Anvil, 5.0f }, + { Material.AttachedMelonStem, 0.0f }, + { Material.AttachedPumpkinStem, 0.0f }, { Material.Azalea, 0.0f }, - { Material.AzaleaLeaves, 0.0f }, + { Material.AzaleaLeaves, 0.2f }, { Material.AzureBluet, 0.0f }, { Material.Bamboo, 0.0f }, - { Material.BambooBlock, 0.0f }, - { Material.BambooButton, 0.0f }, + { Material.BambooBlock, 2.0f }, + { Material.BambooButton, 0.5f }, + { Material.BambooDoor, 3.0f }, + { Material.BambooFence, 2.0f }, + { Material.BambooFenceGate, 2.0f }, + { Material.BambooHangingSign, 1.0f }, + { Material.BambooMosaic, 2.0f }, + { Material.BambooMosaicSlab, 2.0f }, + { Material.BambooMosaicStairs, 2.0f }, + { Material.BambooPlanks, 2.0f }, + { Material.BambooPressurePlate, 0.5f }, { Material.BambooSapling, 0.0f }, + { Material.BambooShelf, 2.0f }, + { Material.BambooSign, 1.0f }, + { Material.BambooSlab, 2.0f }, + { Material.BambooStairs, 2.0f }, + { Material.BambooTrapdoor, 3.0f }, + { Material.BambooWallHangingSign, 1.0f }, + { Material.BambooWallSign, 1.0f }, + { Material.Barrel, 2.5f }, + { Material.Barrier, -1.0f }, + { Material.Basalt, 1.25f }, + { Material.Beacon, 3.0f }, + { Material.Bedrock, -1.0f }, + { Material.BeeNest, 0.3f }, + { Material.Beehive, 0.6f }, { Material.Beetroots, 0.0f }, - { Material.BirchButton, 0.0f }, - { Material.BirchLeaves, 0.0f }, - { Material.BirchLog, 0.0f }, + { Material.Bell, 5.0f }, + { Material.BigDripleaf, 0.1f }, + { Material.BigDripleafStem, 0.1f }, + { Material.BirchButton, 0.5f }, + { Material.BirchDoor, 3.0f }, + { Material.BirchFence, 2.0f }, + { Material.BirchFenceGate, 2.0f }, + { Material.BirchHangingSign, 1.0f }, + { Material.BirchLeaves, 0.2f }, + { Material.BirchLog, 2.0f }, + { Material.BirchPlanks, 2.0f }, + { Material.BirchPressurePlate, 0.5f }, { Material.BirchSapling, 0.0f }, - { Material.BlackCandle, 0.0f }, - { Material.BlackCandleCake, 0.0f }, - { Material.BlackShulkerBox, 0.0f }, - { Material.BlackstoneWall, 0.0f }, - { Material.BlueCandle, 0.0f }, - { Material.BlueCandleCake, 0.0f }, + { Material.BirchShelf, 2.0f }, + { Material.BirchSign, 1.0f }, + { Material.BirchSlab, 2.0f }, + { Material.BirchStairs, 2.0f }, + { Material.BirchTrapdoor, 3.0f }, + { Material.BirchWallHangingSign, 1.0f }, + { Material.BirchWallSign, 1.0f }, + { Material.BirchWood, 2.0f }, + { Material.BlackBanner, 1.0f }, + { Material.BlackBed, 0.2f }, + { Material.BlackCandle, 0.1f }, + { Material.BlackCandleCake, 0.5f }, + { Material.BlackCarpet, 0.1f }, + { Material.BlackConcrete, 1.8f }, + { Material.BlackConcretePowder, 0.5f }, + { Material.BlackGlazedTerracotta, 1.4f }, + { Material.BlackShulkerBox, 2.0f }, + { Material.BlackStainedGlass, 0.3f }, + { Material.BlackStainedGlassPane, 0.3f }, + { Material.BlackTerracotta, 1.25f }, + { Material.BlackWallBanner, 1.0f }, + { Material.BlackWool, 0.8f }, + { Material.Blackstone, 1.5f }, + { Material.BlackstoneSlab, 2.0f }, + { Material.BlackstoneStairs, 1.5f }, + { Material.BlackstoneWall, 1.5f }, + { Material.BlastFurnace, 3.5f }, + { Material.BlueBanner, 1.0f }, + { Material.BlueBed, 0.2f }, + { Material.BlueCandle, 0.1f }, + { Material.BlueCandleCake, 0.5f }, + { Material.BlueCarpet, 0.1f }, + { Material.BlueConcrete, 1.8f }, + { Material.BlueConcretePowder, 0.5f }, + { Material.BlueGlazedTerracotta, 1.4f }, + { Material.BlueIce, 2.8f }, { Material.BlueOrchid, 0.0f }, - { Material.BlueShulkerBox, 0.0f }, + { Material.BlueShulkerBox, 2.0f }, + { Material.BlueStainedGlass, 0.3f }, + { Material.BlueStainedGlassPane, 0.3f }, + { Material.BlueTerracotta, 1.25f }, + { Material.BlueWallBanner, 1.0f }, + { Material.BlueWool, 0.8f }, + { Material.BoneBlock, 2.0f }, + { Material.Bookshelf, 1.5f }, { Material.BrainCoral, 0.0f }, + { Material.BrainCoralBlock, 1.5f }, { Material.BrainCoralFan, 0.0f }, { Material.BrainCoralWallFan, 0.0f }, - { Material.BrickWall, 0.0f }, - { Material.BrownCandle, 0.0f }, - { Material.BrownCandleCake, 0.0f }, + { Material.BrewingStand, 0.5f }, + { Material.BrickSlab, 2.0f }, + { Material.BrickStairs, 2.0f }, + { Material.BrickWall, 2.0f }, + { Material.Bricks, 2.0f }, + { Material.BrownBanner, 1.0f }, + { Material.BrownBed, 0.2f }, + { Material.BrownCandle, 0.1f }, + { Material.BrownCandleCake, 0.5f }, + { Material.BrownCarpet, 0.1f }, + { Material.BrownConcrete, 1.8f }, + { Material.BrownConcretePowder, 0.5f }, + { Material.BrownGlazedTerracotta, 1.4f }, { Material.BrownMushroom, 0.0f }, - { Material.BrownShulkerBox, 0.0f }, + { Material.BrownMushroomBlock, 0.2f }, + { Material.BrownShulkerBox, 2.0f }, + { Material.BrownStainedGlass, 0.3f }, + { Material.BrownStainedGlassPane, 0.3f }, + { Material.BrownTerracotta, 1.25f }, + { Material.BrownWallBanner, 1.0f }, + { Material.BrownWool, 0.8f }, { Material.BubbleColumn, 0.0f }, { Material.BubbleCoral, 0.0f }, + { Material.BubbleCoralBlock, 1.5f }, { Material.BubbleCoralFan, 0.0f }, { Material.BubbleCoralWallFan, 0.0f }, + { Material.BuddingAmethyst, 1.5f }, { Material.Bush, 0.0f }, + { Material.Cactus, 0.4f }, { Material.CactusFlower, 0.0f }, - { Material.CalibratedSculkSensor, 0.0f }, - { Material.Candle, 0.0f }, - { Material.CandleCake, 0.0f }, + { Material.Cake, 0.5f }, + { Material.Calcite, 0.75f }, + { Material.CalibratedSculkSensor, 1.5f }, + { Material.Campfire, 2.0f }, + { Material.Candle, 0.1f }, + { Material.CandleCake, 0.5f }, { Material.Carrots, 0.0f }, + { Material.CartographyTable, 2.5f }, + { Material.CarvedPumpkin, 1.0f }, + { Material.Cauldron, 2.0f }, { Material.CaveAir, 0.0f }, { Material.CaveVines, 0.0f }, { Material.CaveVinesPlant, 0.0f }, - { Material.CherryButton, 0.0f }, - { Material.CherryLog, 0.0f }, + { Material.ChainCommandBlock, -1.0f }, + { Material.CherryButton, 0.5f }, + { Material.CherryDoor, 3.0f }, + { Material.CherryFence, 2.0f }, + { Material.CherryFenceGate, 2.0f }, + { Material.CherryHangingSign, 1.0f }, + { Material.CherryLeaves, 0.2f }, + { Material.CherryLog, 2.0f }, + { Material.CherryPlanks, 2.0f }, + { Material.CherryPressurePlate, 0.5f }, { Material.CherrySapling, 0.0f }, - { Material.ChiseledCopper, 0.0f }, - { Material.ChiseledDeepslate, 0.0f }, - { Material.ChiseledTuff, 0.0f }, - { Material.ChiseledTuffBricks, 0.0f }, + { Material.CherryShelf, 2.0f }, + { Material.CherrySign, 1.0f }, + { Material.CherrySlab, 2.0f }, + { Material.CherryStairs, 2.0f }, + { Material.CherryTrapdoor, 3.0f }, + { Material.CherryWallHangingSign, 1.0f }, + { Material.CherryWallSign, 1.0f }, + { Material.CherryWood, 2.0f }, + { Material.Chest, 2.5f }, + { Material.ChippedAnvil, 5.0f }, + { Material.ChiseledBookshelf, 1.5f }, + { Material.ChiseledCopper, 3.0f }, + { Material.ChiseledDeepslate, 3.5f }, + { Material.ChiseledNetherBricks, 2.0f }, + { Material.ChiseledPolishedBlackstone, 1.5f }, + { Material.ChiseledQuartzBlock, 0.8f }, + { Material.ChiseledRedSandstone, 0.8f }, + { Material.ChiseledResinBricks, 1.5f }, + { Material.ChiseledSandstone, 0.8f }, + { Material.ChiseledStoneBricks, 1.5f }, + { Material.ChiseledTuff, 1.5f }, + { Material.ChiseledTuffBricks, 1.5f }, + { Material.ChorusFlower, 0.4f }, + { Material.ChorusPlant, 0.4f }, + { Material.Clay, 0.6f }, { Material.ClosedEyeblossom, 0.0f }, - { Material.CobbledDeepslateSlab, 0.0f }, - { Material.CobbledDeepslateWall, 0.0f }, - { Material.CobblestoneWall, 0.0f }, + { Material.CoalBlock, 5.0f }, + { Material.CoalOre, 3.0f }, + { Material.CoarseDirt, 0.5f }, + { Material.CobbledDeepslate, 3.5f }, + { Material.CobbledDeepslateSlab, 3.5f }, + { Material.CobbledDeepslateStairs, 3.5f }, + { Material.CobbledDeepslateWall, 3.5f }, + { Material.Cobblestone, 2.0f }, + { Material.CobblestoneSlab, 2.0f }, + { Material.CobblestoneStairs, 2.0f }, + { Material.CobblestoneWall, 2.0f }, + { Material.Cobweb, 4.0f }, + { Material.Cocoa, 0.2f }, + { Material.CommandBlock, -1.0f }, { Material.Comparator, 0.0f }, - { Material.CopperOre, 0.0f }, + { Material.Composter, 0.6f }, + { Material.Conduit, 3.0f }, + { Material.CopperBlock, 3.0f }, + { Material.CopperBulb, 3.0f }, + { Material.CopperChest, 3.0f }, + { Material.CopperDoor, 3.0f }, + { Material.CopperGolemStatue, 3.0f }, + { Material.CopperGrate, 3.0f }, + { Material.CopperOre, 3.0f }, { Material.CopperTorch, 0.0f }, + { Material.CopperTrapdoor, 3.0f }, { Material.CopperWallTorch, 0.0f }, { Material.Cornflower, 0.0f }, - { Material.CrackedDeepslateBricks, 0.0f }, - { Material.CrackedDeepslateTiles, 0.0f }, - { Material.CrackedPolishedBlackstoneBricks, 0.0f }, - { Material.CrimsonButton, 0.0f }, + { Material.CrackedDeepslateBricks, 3.5f }, + { Material.CrackedDeepslateTiles, 3.5f }, + { Material.CrackedNetherBricks, 2.0f }, + { Material.CrackedPolishedBlackstoneBricks, 1.5f }, + { Material.CrackedStoneBricks, 1.5f }, + { Material.Crafter, 1.5f }, + { Material.CraftingTable, 2.5f }, + { Material.CreakingHeart, 10.0f }, + { Material.CreeperHead, 1.0f }, + { Material.CreeperWallHead, 1.0f }, + { Material.CrimsonButton, 0.5f }, + { Material.CrimsonDoor, 3.0f }, + { Material.CrimsonFence, 2.0f }, + { Material.CrimsonFenceGate, 2.0f }, { Material.CrimsonFungus, 0.0f }, + { Material.CrimsonHangingSign, 1.0f }, + { Material.CrimsonHyphae, 2.0f }, + { Material.CrimsonNylium, 0.4f }, + { Material.CrimsonPlanks, 2.0f }, + { Material.CrimsonPressurePlate, 0.5f }, { Material.CrimsonRoots, 0.0f }, - { Material.CrimsonStem, 0.0f }, - { Material.CutCopper, 0.0f }, - { Material.CutCopperSlab, 0.0f }, - { Material.CutCopperStairs, 0.0f }, - { Material.CyanCandle, 0.0f }, - { Material.CyanCandleCake, 0.0f }, - { Material.CyanShulkerBox, 0.0f }, + { Material.CrimsonShelf, 2.0f }, + { Material.CrimsonSign, 1.0f }, + { Material.CrimsonSlab, 2.0f }, + { Material.CrimsonStairs, 2.0f }, + { Material.CrimsonStem, 2.0f }, + { Material.CrimsonTrapdoor, 3.0f }, + { Material.CrimsonWallHangingSign, 1.0f }, + { Material.CrimsonWallSign, 1.0f }, + { Material.CryingObsidian, 50.0f }, + { Material.CutCopper, 3.0f }, + { Material.CutCopperSlab, 3.0f }, + { Material.CutCopperStairs, 3.0f }, + { Material.CutRedSandstone, 0.8f }, + { Material.CutRedSandstoneSlab, 2.0f }, + { Material.CutSandstone, 0.8f }, + { Material.CutSandstoneSlab, 2.0f }, + { Material.CyanBanner, 1.0f }, + { Material.CyanBed, 0.2f }, + { Material.CyanCandle, 0.1f }, + { Material.CyanCandleCake, 0.5f }, + { Material.CyanCarpet, 0.1f }, + { Material.CyanConcrete, 1.8f }, + { Material.CyanConcretePowder, 0.5f }, + { Material.CyanGlazedTerracotta, 1.4f }, + { Material.CyanShulkerBox, 2.0f }, + { Material.CyanStainedGlass, 0.3f }, + { Material.CyanStainedGlassPane, 0.3f }, + { Material.CyanTerracotta, 1.25f }, + { Material.CyanWallBanner, 1.0f }, + { Material.CyanWool, 0.8f }, + { Material.DamagedAnvil, 5.0f }, { Material.Dandelion, 0.0f }, - { Material.DarkOakButton, 0.0f }, - { Material.DarkOakLeaves, 0.0f }, - { Material.DarkOakLog, 0.0f }, + { Material.DarkOakButton, 0.5f }, + { Material.DarkOakDoor, 3.0f }, + { Material.DarkOakFence, 2.0f }, + { Material.DarkOakFenceGate, 2.0f }, + { Material.DarkOakHangingSign, 1.0f }, + { Material.DarkOakLeaves, 0.2f }, + { Material.DarkOakLog, 2.0f }, + { Material.DarkOakPlanks, 2.0f }, + { Material.DarkOakPressurePlate, 0.5f }, { Material.DarkOakSapling, 0.0f }, + { Material.DarkOakShelf, 2.0f }, + { Material.DarkOakSign, 1.0f }, + { Material.DarkOakSlab, 2.0f }, + { Material.DarkOakStairs, 2.0f }, + { Material.DarkOakTrapdoor, 3.0f }, + { Material.DarkOakWallHangingSign, 1.0f }, + { Material.DarkOakWallSign, 1.0f }, + { Material.DarkOakWood, 2.0f }, + { Material.DarkPrismarine, 1.5f }, + { Material.DarkPrismarineSlab, 1.5f }, + { Material.DarkPrismarineStairs, 1.5f }, + { Material.DaylightDetector, 0.2f }, { Material.DeadBrainCoral, 0.0f }, + { Material.DeadBrainCoralBlock, 1.5f }, { Material.DeadBrainCoralFan, 0.0f }, { Material.DeadBrainCoralWallFan, 0.0f }, { Material.DeadBubbleCoral, 0.0f }, + { Material.DeadBubbleCoralBlock, 1.5f }, { Material.DeadBubbleCoralFan, 0.0f }, { Material.DeadBubbleCoralWallFan, 0.0f }, { Material.DeadBush, 0.0f }, { Material.DeadFireCoral, 0.0f }, + { Material.DeadFireCoralBlock, 1.5f }, { Material.DeadFireCoralFan, 0.0f }, { Material.DeadFireCoralWallFan, 0.0f }, { Material.DeadHornCoral, 0.0f }, + { Material.DeadHornCoralBlock, 1.5f }, { Material.DeadHornCoralFan, 0.0f }, { Material.DeadHornCoralWallFan, 0.0f }, { Material.DeadTubeCoral, 0.0f }, + { Material.DeadTubeCoralBlock, 1.5f }, { Material.DeadTubeCoralFan, 0.0f }, { Material.DeadTubeCoralWallFan, 0.0f }, { Material.DecoratedPot, 0.0f }, - { Material.DeepslateBrickSlab, 0.0f }, - { Material.DeepslateBrickWall, 0.0f }, - { Material.DeepslateBricks, 0.0f }, - { Material.DeepslateTileSlab, 0.0f }, - { Material.DeepslateTileWall, 0.0f }, - { Material.DeepslateTiles, 0.0f }, - { Material.DioriteSlab, 0.0f }, - { Material.DioriteWall, 0.0f }, + { Material.Deepslate, 3.0f }, + { Material.DeepslateBrickSlab, 3.5f }, + { Material.DeepslateBrickStairs, 3.5f }, + { Material.DeepslateBrickWall, 3.5f }, + { Material.DeepslateBricks, 3.5f }, + { Material.DeepslateCoalOre, 4.5f }, + { Material.DeepslateCopperOre, 4.5f }, + { Material.DeepslateDiamondOre, 4.5f }, + { Material.DeepslateEmeraldOre, 4.5f }, + { Material.DeepslateGoldOre, 4.5f }, + { Material.DeepslateIronOre, 4.5f }, + { Material.DeepslateLapisOre, 4.5f }, + { Material.DeepslateRedstoneOre, 4.5f }, + { Material.DeepslateTileSlab, 3.5f }, + { Material.DeepslateTileStairs, 3.5f }, + { Material.DeepslateTileWall, 3.5f }, + { Material.DeepslateTiles, 3.5f }, + { Material.DetectorRail, 0.7f }, + { Material.DiamondBlock, 5.0f }, + { Material.DiamondOre, 3.0f }, + { Material.Diorite, 1.5f }, + { Material.DioriteSlab, 1.5f }, + { Material.DioriteStairs, 1.5f }, + { Material.DioriteWall, 1.5f }, + { Material.Dirt, 0.5f }, + { Material.DirtPath, 0.65f }, + { Material.Dispenser, 3.5f }, + { Material.DragonEgg, 3.0f }, + { Material.DragonHead, 1.0f }, + { Material.DragonWallHead, 1.0f }, { Material.DriedGhast, 0.0f }, + { Material.DriedKelpBlock, 0.5f }, + { Material.DripstoneBlock, 1.5f }, + { Material.Dropper, 3.5f }, + { Material.EmeraldBlock, 5.0f }, + { Material.EmeraldOre, 3.0f }, + { Material.EnchantingTable, 5.0f }, + { Material.EndGateway, -1.0f }, + { Material.EndPortal, -1.0f }, + { Material.EndPortalFrame, -1.0f }, { Material.EndRod, 0.0f }, - { Material.EndStoneBrickSlab, 0.0f }, - { Material.EndStoneBrickWall, 0.0f }, - { Material.ExposedChiseledCopper, 0.0f }, - { Material.ExposedCopper, 0.0f }, - { Material.ExposedCopperBulb, 0.0f }, - { Material.ExposedCopperChest, 0.0f }, - { Material.ExposedCopperDoor, 0.0f }, - { Material.ExposedCopperGolemStatue, 0.0f }, - { Material.ExposedCopperGrate, 0.0f }, - { Material.ExposedCopperTrapdoor, 0.0f }, - { Material.ExposedCutCopper, 0.0f }, - { Material.ExposedCutCopperSlab, 0.0f }, - { Material.ExposedCutCopperStairs, 0.0f }, - { Material.ExposedLightningRod, 0.0f }, + { Material.EndStone, 3.0f }, + { Material.EndStoneBrickSlab, 3.0f }, + { Material.EndStoneBrickStairs, 3.0f }, + { Material.EndStoneBrickWall, 3.0f }, + { Material.EndStoneBricks, 3.0f }, + { Material.EnderChest, 22.5f }, + { Material.ExposedChiseledCopper, 3.0f }, + { Material.ExposedCopper, 3.0f }, + { Material.ExposedCopperBulb, 3.0f }, + { Material.ExposedCopperChest, 3.0f }, + { Material.ExposedCopperDoor, 3.0f }, + { Material.ExposedCopperGolemStatue, 3.0f }, + { Material.ExposedCopperGrate, 3.0f }, + { Material.ExposedCopperTrapdoor, 3.0f }, + { Material.ExposedCutCopper, 3.0f }, + { Material.ExposedCutCopperSlab, 3.0f }, + { Material.ExposedCutCopperStairs, 3.0f }, + { Material.ExposedLightningRod, 3.0f }, + { Material.Farmland, 0.6f }, { Material.Fern, 0.0f }, { Material.Fire, 0.0f }, { Material.FireCoral, 0.0f }, + { Material.FireCoralBlock, 1.5f }, { Material.FireCoralFan, 0.0f }, { Material.FireCoralWallFan, 0.0f }, { Material.FireflyBush, 0.0f }, + { Material.FletchingTable, 2.5f }, { Material.FlowerPot, 0.0f }, { Material.FloweringAzalea, 0.0f }, - { Material.FloweringAzaleaLeaves, 0.0f }, + { Material.FloweringAzaleaLeaves, 0.2f }, { Material.Frogspawn, 0.0f }, - { Material.GildedBlackstone, 0.0f }, - { Material.GlassPane, 0.0f }, - { Material.GraniteSlab, 0.0f }, - { Material.GraniteWall, 0.0f }, - { Material.GrayCandle, 0.0f }, - { Material.GrayCandleCake, 0.0f }, - { Material.GrayShulkerBox, 0.0f }, - { Material.GreenCandle, 0.0f }, - { Material.GreenCandleCake, 0.0f }, - { Material.GreenShulkerBox, 0.0f }, + { Material.FrostedIce, 0.5f }, + { Material.Furnace, 3.5f }, + { Material.GildedBlackstone, 1.5f }, + { Material.Glass, 0.3f }, + { Material.GlassPane, 0.3f }, + { Material.GlowLichen, 0.2f }, + { Material.Glowstone, 0.3f }, + { Material.GoldBlock, 3.0f }, + { Material.GoldOre, 3.0f }, + { Material.Granite, 1.5f }, + { Material.GraniteSlab, 1.5f }, + { Material.GraniteStairs, 1.5f }, + { Material.GraniteWall, 1.5f }, + { Material.GrassBlock, 0.6f }, + { Material.Gravel, 0.6f }, + { Material.GrayBanner, 1.0f }, + { Material.GrayBed, 0.2f }, + { Material.GrayCandle, 0.1f }, + { Material.GrayCandleCake, 0.5f }, + { Material.GrayCarpet, 0.1f }, + { Material.GrayConcrete, 1.8f }, + { Material.GrayConcretePowder, 0.5f }, + { Material.GrayGlazedTerracotta, 1.4f }, + { Material.GrayShulkerBox, 2.0f }, + { Material.GrayStainedGlass, 0.3f }, + { Material.GrayStainedGlassPane, 0.3f }, + { Material.GrayTerracotta, 1.25f }, + { Material.GrayWallBanner, 1.0f }, + { Material.GrayWool, 0.8f }, + { Material.GreenBanner, 1.0f }, + { Material.GreenBed, 0.2f }, + { Material.GreenCandle, 0.1f }, + { Material.GreenCandleCake, 0.5f }, + { Material.GreenCarpet, 0.1f }, + { Material.GreenConcrete, 1.8f }, + { Material.GreenConcretePowder, 0.5f }, + { Material.GreenGlazedTerracotta, 1.4f }, + { Material.GreenShulkerBox, 2.0f }, + { Material.GreenStainedGlass, 0.3f }, + { Material.GreenStainedGlassPane, 0.3f }, + { Material.GreenTerracotta, 1.25f }, + { Material.GreenWallBanner, 1.0f }, + { Material.GreenWool, 0.8f }, + { Material.Grindstone, 2.0f }, { Material.HangingRoots, 0.0f }, + { Material.HayBlock, 0.5f }, + { Material.HeavyCore, 10.0f }, + { Material.HeavyWeightedPressurePlate, 0.5f }, { Material.HoneyBlock, 0.0f }, + { Material.HoneycombBlock, 0.6f }, + { Material.Hopper, 3.0f }, { Material.HornCoral, 0.0f }, + { Material.HornCoralBlock, 1.5f }, { Material.HornCoralFan, 0.0f }, { Material.HornCoralWallFan, 0.0f }, + { Material.Ice, 0.5f }, { Material.InfestedChiseledStoneBricks, 0.0f }, { Material.InfestedCobblestone, 0.0f }, { Material.InfestedCrackedStoneBricks, 0.0f }, @@ -209,94 +500,296 @@ namespace MinecraftClient.Mapping { Material.InfestedMossyStoneBricks, 0.0f }, { Material.InfestedStone, 0.0f }, { Material.InfestedStoneBricks, 0.0f }, - { Material.JungleButton, 0.0f }, - { Material.JungleLeaves, 0.0f }, - { Material.JungleLog, 0.0f }, + { Material.IronBars, 5.0f }, + { Material.IronBlock, 5.0f }, + { Material.IronChain, 5.0f }, + { Material.IronDoor, 5.0f }, + { Material.IronOre, 3.0f }, + { Material.IronTrapdoor, 5.0f }, + { Material.JackOLantern, 1.0f }, + { Material.Jigsaw, -1.0f }, + { Material.Jukebox, 2.0f }, + { Material.JungleButton, 0.5f }, + { Material.JungleDoor, 3.0f }, + { Material.JungleFence, 2.0f }, + { Material.JungleFenceGate, 2.0f }, + { Material.JungleHangingSign, 1.0f }, + { Material.JungleLeaves, 0.2f }, + { Material.JungleLog, 2.0f }, + { Material.JunglePlanks, 2.0f }, + { Material.JunglePressurePlate, 0.5f }, { Material.JungleSapling, 0.0f }, + { Material.JungleShelf, 2.0f }, + { Material.JungleSign, 1.0f }, + { Material.JungleSlab, 2.0f }, + { Material.JungleStairs, 2.0f }, + { Material.JungleTrapdoor, 3.0f }, + { Material.JungleWallHangingSign, 1.0f }, + { Material.JungleWallSign, 1.0f }, + { Material.JungleWood, 2.0f }, { Material.Kelp, 0.0f }, { Material.KelpPlant, 0.0f }, - { Material.LargeAmethystBud, 0.0f }, + { Material.Ladder, 0.4f }, + { Material.Lantern, 3.5f }, + { Material.LapisBlock, 3.0f }, + { Material.LapisOre, 3.0f }, + { Material.LargeAmethystBud, 1.5f }, { Material.LargeFern, 0.0f }, - { Material.LavaCauldron, 0.0f }, + { Material.Lava, 100.0f }, + { Material.LavaCauldron, 2.0f }, { Material.LeafLitter, 0.0f }, - { Material.LightBlueCandle, 0.0f }, - { Material.LightBlueCandleCake, 0.0f }, - { Material.LightBlueShulkerBox, 0.0f }, - { Material.LightGrayCandle, 0.0f }, - { Material.LightGrayCandleCake, 0.0f }, - { Material.LightGrayShulkerBox, 0.0f }, + { Material.Lectern, 2.5f }, + { Material.Lever, 0.5f }, + { Material.Light, -1.0f }, + { Material.LightBlueBanner, 1.0f }, + { Material.LightBlueBed, 0.2f }, + { Material.LightBlueCandle, 0.1f }, + { Material.LightBlueCandleCake, 0.5f }, + { Material.LightBlueCarpet, 0.1f }, + { Material.LightBlueConcrete, 1.8f }, + { Material.LightBlueConcretePowder, 0.5f }, + { Material.LightBlueGlazedTerracotta, 1.4f }, + { Material.LightBlueShulkerBox, 2.0f }, + { Material.LightBlueStainedGlass, 0.3f }, + { Material.LightBlueStainedGlassPane, 0.3f }, + { Material.LightBlueTerracotta, 1.25f }, + { Material.LightBlueWallBanner, 1.0f }, + { Material.LightBlueWool, 0.8f }, + { Material.LightGrayBanner, 1.0f }, + { Material.LightGrayBed, 0.2f }, + { Material.LightGrayCandle, 0.1f }, + { Material.LightGrayCandleCake, 0.5f }, + { Material.LightGrayCarpet, 0.1f }, + { Material.LightGrayConcrete, 1.8f }, + { Material.LightGrayConcretePowder, 0.5f }, + { Material.LightGrayGlazedTerracotta, 1.4f }, + { Material.LightGrayShulkerBox, 2.0f }, + { Material.LightGrayStainedGlass, 0.3f }, + { Material.LightGrayStainedGlassPane, 0.3f }, + { Material.LightGrayTerracotta, 1.25f }, + { Material.LightGrayWallBanner, 1.0f }, + { Material.LightGrayWool, 0.8f }, + { Material.LightWeightedPressurePlate, 0.5f }, + { Material.LightningRod, 3.0f }, { Material.Lilac, 0.0f }, { Material.LilyOfTheValley, 0.0f }, { Material.LilyPad, 0.0f }, - { Material.LimeCandle, 0.0f }, - { Material.LimeCandleCake, 0.0f }, - { Material.LimeShulkerBox, 0.0f }, - { Material.MagentaCandle, 0.0f }, - { Material.MagentaCandleCake, 0.0f }, - { Material.MagentaShulkerBox, 0.0f }, - { Material.MangroveButton, 0.0f }, - { Material.MangroveLeaves, 0.0f }, - { Material.MangroveLog, 0.0f }, + { Material.LimeBanner, 1.0f }, + { Material.LimeBed, 0.2f }, + { Material.LimeCandle, 0.1f }, + { Material.LimeCandleCake, 0.5f }, + { Material.LimeCarpet, 0.1f }, + { Material.LimeConcrete, 1.8f }, + { Material.LimeConcretePowder, 0.5f }, + { Material.LimeGlazedTerracotta, 1.4f }, + { Material.LimeShulkerBox, 2.0f }, + { Material.LimeStainedGlass, 0.3f }, + { Material.LimeStainedGlassPane, 0.3f }, + { Material.LimeTerracotta, 1.25f }, + { Material.LimeWallBanner, 1.0f }, + { Material.LimeWool, 0.8f }, + { Material.Lodestone, 3.5f }, + { Material.Loom, 2.5f }, + { Material.MagentaBanner, 1.0f }, + { Material.MagentaBed, 0.2f }, + { Material.MagentaCandle, 0.1f }, + { Material.MagentaCandleCake, 0.5f }, + { Material.MagentaCarpet, 0.1f }, + { Material.MagentaConcrete, 1.8f }, + { Material.MagentaConcretePowder, 0.5f }, + { Material.MagentaGlazedTerracotta, 1.4f }, + { Material.MagentaShulkerBox, 2.0f }, + { Material.MagentaStainedGlass, 0.3f }, + { Material.MagentaStainedGlassPane, 0.3f }, + { Material.MagentaTerracotta, 1.25f }, + { Material.MagentaWallBanner, 1.0f }, + { Material.MagentaWool, 0.8f }, + { Material.MagmaBlock, 0.5f }, + { Material.MangroveButton, 0.5f }, + { Material.MangroveDoor, 3.0f }, + { Material.MangroveFence, 2.0f }, + { Material.MangroveFenceGate, 2.0f }, + { Material.MangroveHangingSign, 1.0f }, + { Material.MangroveLeaves, 0.2f }, + { Material.MangroveLog, 2.0f }, + { Material.MangrovePlanks, 2.0f }, + { Material.MangrovePressurePlate, 0.5f }, { Material.MangrovePropagule, 0.0f }, - { Material.MediumAmethystBud, 0.0f }, - { Material.MossyCobblestoneSlab, 0.0f }, - { Material.MossyCobblestoneWall, 0.0f }, - { Material.MossyStoneBrickSlab, 0.0f }, - { Material.MossyStoneBrickWall, 0.0f }, - { Material.Mud, 0.0f }, - { Material.MudBrickWall, 0.0f }, - { Material.NetherBrickWall, 0.0f }, + { Material.MangroveRoots, 0.7f }, + { Material.MangroveShelf, 2.0f }, + { Material.MangroveSign, 1.0f }, + { Material.MangroveSlab, 2.0f }, + { Material.MangroveStairs, 2.0f }, + { Material.MangroveTrapdoor, 3.0f }, + { Material.MangroveWallHangingSign, 1.0f }, + { Material.MangroveWallSign, 1.0f }, + { Material.MangroveWood, 2.0f }, + { Material.MediumAmethystBud, 1.5f }, + { Material.Melon, 1.0f }, + { Material.MelonStem, 0.0f }, + { Material.MossBlock, 0.1f }, + { Material.MossCarpet, 0.1f }, + { Material.MossyCobblestone, 2.0f }, + { Material.MossyCobblestoneSlab, 2.0f }, + { Material.MossyCobblestoneStairs, 2.0f }, + { Material.MossyCobblestoneWall, 2.0f }, + { Material.MossyStoneBrickSlab, 1.5f }, + { Material.MossyStoneBrickStairs, 1.5f }, + { Material.MossyStoneBrickWall, 1.5f }, + { Material.MossyStoneBricks, 1.5f }, + { Material.MovingPiston, -1.0f }, + { Material.Mud, 0.5f }, + { Material.MudBrickSlab, 1.5f }, + { Material.MudBrickStairs, 1.5f }, + { Material.MudBrickWall, 1.5f }, + { Material.MudBricks, 1.5f }, + { Material.MuddyMangroveRoots, 0.7f }, + { Material.MushroomStem, 0.2f }, + { Material.Mycelium, 0.6f }, + { Material.NetherBrickFence, 2.0f }, + { Material.NetherBrickSlab, 2.0f }, + { Material.NetherBrickStairs, 2.0f }, + { Material.NetherBrickWall, 2.0f }, + { Material.NetherBricks, 2.0f }, + { Material.NetherGoldOre, 3.0f }, + { Material.NetherPortal, -1.0f }, + { Material.NetherQuartzOre, 3.0f }, { Material.NetherSprouts, 0.0f }, { Material.NetherWart, 0.0f }, - { Material.OakButton, 0.0f }, + { Material.NetherWartBlock, 1.0f }, + { Material.NetheriteBlock, 50.0f }, + { Material.Netherrack, 0.4f }, + { Material.NoteBlock, 0.8f }, + { Material.OakButton, 0.5f }, + { Material.OakDoor, 3.0f }, + { Material.OakFence, 2.0f }, + { Material.OakFenceGate, 2.0f }, + { Material.OakHangingSign, 1.0f }, { Material.OakLeaves, 0.2f }, { Material.OakLog, 2.0f }, + { Material.OakPlanks, 2.0f }, + { Material.OakPressurePlate, 0.5f }, { Material.OakSapling, 0.0f }, + { Material.OakShelf, 2.0f }, + { Material.OakSign, 1.0f }, + { Material.OakSlab, 2.0f }, + { Material.OakStairs, 2.0f }, + { Material.OakTrapdoor, 3.0f }, + { Material.OakWallHangingSign, 1.0f }, + { Material.OakWallSign, 1.0f }, + { Material.OakWood, 2.0f }, + { Material.Observer, 3.0f }, + { Material.Obsidian, 50.0f }, + { Material.OchreFroglight, 0.3f }, { Material.OpenEyeblossom, 0.0f }, - { Material.OrangeCandle, 0.0f }, - { Material.OrangeCandleCake, 0.0f }, - { Material.OrangeShulkerBox, 0.0f }, + { Material.OrangeBanner, 1.0f }, + { Material.OrangeBed, 0.2f }, + { Material.OrangeCandle, 0.1f }, + { Material.OrangeCandleCake, 0.5f }, + { Material.OrangeCarpet, 0.1f }, + { Material.OrangeConcrete, 1.8f }, + { Material.OrangeConcretePowder, 0.5f }, + { Material.OrangeGlazedTerracotta, 1.4f }, + { Material.OrangeShulkerBox, 2.0f }, + { Material.OrangeStainedGlass, 0.3f }, + { Material.OrangeStainedGlassPane, 0.3f }, + { Material.OrangeTerracotta, 1.25f }, { Material.OrangeTulip, 0.0f }, + { Material.OrangeWallBanner, 1.0f }, + { Material.OrangeWool, 0.8f }, { Material.OxeyeDaisy, 0.0f }, - { Material.OxidizedChiseledCopper, 0.0f }, - { Material.OxidizedCopper, 0.0f }, - { Material.OxidizedCopperBulb, 0.0f }, - { Material.OxidizedCopperChest, 0.0f }, - { Material.OxidizedCopperDoor, 0.0f }, - { Material.OxidizedCopperGolemStatue, 0.0f }, - { Material.OxidizedCopperGrate, 0.0f }, - { Material.OxidizedCopperTrapdoor, 0.0f }, - { Material.OxidizedCutCopper, 0.0f }, - { Material.OxidizedCutCopperSlab, 0.0f }, - { Material.OxidizedCutCopperStairs, 0.0f }, - { Material.OxidizedLightningRod, 0.0f }, + { Material.OxidizedChiseledCopper, 3.0f }, + { Material.OxidizedCopper, 3.0f }, + { Material.OxidizedCopperBulb, 3.0f }, + { Material.OxidizedCopperChest, 3.0f }, + { Material.OxidizedCopperDoor, 3.0f }, + { Material.OxidizedCopperGolemStatue, 3.0f }, + { Material.OxidizedCopperGrate, 3.0f }, + { Material.OxidizedCopperTrapdoor, 3.0f }, + { Material.OxidizedCutCopper, 3.0f }, + { Material.OxidizedCutCopperSlab, 3.0f }, + { Material.OxidizedCutCopperStairs, 3.0f }, + { Material.OxidizedLightningRod, 3.0f }, + { Material.PackedIce, 0.5f }, + { Material.PackedMud, 1.0f }, { Material.PaleHangingMoss, 0.0f }, - { Material.PaleOakButton, 0.0f }, - { Material.PaleOakLog, 0.0f }, + { Material.PaleMossBlock, 0.1f }, + { Material.PaleMossCarpet, 0.1f }, + { Material.PaleOakButton, 0.5f }, + { Material.PaleOakDoor, 3.0f }, + { Material.PaleOakFence, 2.0f }, + { Material.PaleOakFenceGate, 2.0f }, + { Material.PaleOakHangingSign, 1.0f }, + { Material.PaleOakLeaves, 0.2f }, + { Material.PaleOakLog, 2.0f }, + { Material.PaleOakPlanks, 2.0f }, + { Material.PaleOakPressurePlate, 0.5f }, { Material.PaleOakSapling, 0.0f }, + { Material.PaleOakShelf, 2.0f }, + { Material.PaleOakSign, 1.0f }, + { Material.PaleOakSlab, 2.0f }, + { Material.PaleOakStairs, 2.0f }, + { Material.PaleOakTrapdoor, 3.0f }, + { Material.PaleOakWallHangingSign, 1.0f }, + { Material.PaleOakWallSign, 1.0f }, + { Material.PaleOakWood, 2.0f }, + { Material.PearlescentFroglight, 0.3f }, { Material.Peony, 0.0f }, - { Material.PinkCandle, 0.0f }, - { Material.PinkCandleCake, 0.0f }, + { Material.PetrifiedOakSlab, 2.0f }, + { Material.PiglinHead, 1.0f }, + { Material.PiglinWallHead, 1.0f }, + { Material.PinkBanner, 1.0f }, + { Material.PinkBed, 0.2f }, + { Material.PinkCandle, 0.1f }, + { Material.PinkCandleCake, 0.5f }, + { Material.PinkCarpet, 0.1f }, + { Material.PinkConcrete, 1.8f }, + { Material.PinkConcretePowder, 0.5f }, + { Material.PinkGlazedTerracotta, 1.4f }, { Material.PinkPetals, 0.0f }, - { Material.PinkShulkerBox, 0.0f }, + { Material.PinkShulkerBox, 2.0f }, + { Material.PinkStainedGlass, 0.3f }, + { Material.PinkStainedGlassPane, 0.3f }, + { Material.PinkTerracotta, 1.25f }, { Material.PinkTulip, 0.0f }, + { Material.PinkWallBanner, 1.0f }, + { Material.PinkWool, 0.8f }, { Material.Piston, 0.0f }, + { Material.PistonHead, 1.5f }, { Material.PitcherCrop, 0.0f }, { Material.PitcherPlant, 0.0f }, - { Material.PolishedAndesiteSlab, 0.0f }, - { Material.PolishedBlackstoneBrickWall, 0.0f }, - { Material.PolishedBlackstoneButton, 0.0f }, - { Material.PolishedBlackstoneSlab, 0.0f }, - { Material.PolishedBlackstoneWall, 0.0f }, - { Material.PolishedDeepslate, 0.0f }, - { Material.PolishedDeepslateSlab, 0.0f }, - { Material.PolishedDeepslateWall, 0.0f }, - { Material.PolishedDioriteSlab, 0.0f }, - { Material.PolishedGraniteSlab, 0.0f }, - { Material.PolishedTuff, 0.0f }, - { Material.PolishedTuffSlab, 0.0f }, - { Material.PolishedTuffStairs, 0.0f }, - { Material.PolishedTuffWall, 0.0f }, + { Material.PlayerHead, 1.0f }, + { Material.PlayerWallHead, 1.0f }, + { Material.Podzol, 0.5f }, + { Material.PointedDripstone, 1.5f }, + { Material.PolishedAndesite, 1.5f }, + { Material.PolishedAndesiteSlab, 1.5f }, + { Material.PolishedAndesiteStairs, 1.5f }, + { Material.PolishedBasalt, 1.25f }, + { Material.PolishedBlackstone, 2.0f }, + { Material.PolishedBlackstoneBrickSlab, 2.0f }, + { Material.PolishedBlackstoneBrickStairs, 1.5f }, + { Material.PolishedBlackstoneBrickWall, 1.5f }, + { Material.PolishedBlackstoneBricks, 1.5f }, + { Material.PolishedBlackstoneButton, 0.5f }, + { Material.PolishedBlackstonePressurePlate, 0.5f }, + { Material.PolishedBlackstoneSlab, 2.0f }, + { Material.PolishedBlackstoneStairs, 2.0f }, + { Material.PolishedBlackstoneWall, 2.0f }, + { Material.PolishedDeepslate, 3.5f }, + { Material.PolishedDeepslateSlab, 3.5f }, + { Material.PolishedDeepslateStairs, 3.5f }, + { Material.PolishedDeepslateWall, 3.5f }, + { Material.PolishedDiorite, 1.5f }, + { Material.PolishedDioriteSlab, 1.5f }, + { Material.PolishedDioriteStairs, 1.5f }, + { Material.PolishedGranite, 1.5f }, + { Material.PolishedGraniteSlab, 1.5f }, + { Material.PolishedGraniteStairs, 1.5f }, + { Material.PolishedTuff, 1.5f }, + { Material.PolishedTuffSlab, 1.5f }, + { Material.PolishedTuffStairs, 1.5f }, + { Material.PolishedTuffWall, 1.5f }, { Material.Poppy, 0.0f }, { Material.Potatoes, 0.0f }, { Material.PottedAcaciaSapling, 0.0f }, @@ -336,777 +829,355 @@ namespace MinecraftClient.Mapping { Material.PottedWarpedRoots, 0.0f }, { Material.PottedWhiteTulip, 0.0f }, { Material.PottedWitherRose, 0.0f }, - { Material.PowderSnowCauldron, 0.0f }, - { Material.PrismarineWall, 0.0f }, - { Material.PurpleCandle, 0.0f }, - { Material.PurpleCandleCake, 0.0f }, - { Material.PurpleShulkerBox, 0.0f }, - { Material.QuartzBricks, 0.0f }, - { Material.RedCandle, 0.0f }, - { Material.RedCandleCake, 0.0f }, + { Material.PowderSnow, 0.25f }, + { Material.PowderSnowCauldron, 2.0f }, + { Material.PoweredRail, 0.7f }, + { Material.Prismarine, 1.5f }, + { Material.PrismarineBrickSlab, 1.5f }, + { Material.PrismarineBrickStairs, 1.5f }, + { Material.PrismarineBricks, 1.5f }, + { Material.PrismarineSlab, 1.5f }, + { Material.PrismarineStairs, 1.5f }, + { Material.PrismarineWall, 1.5f }, + { Material.Pumpkin, 1.0f }, + { Material.PumpkinStem, 0.0f }, + { Material.PurpleBanner, 1.0f }, + { Material.PurpleBed, 0.2f }, + { Material.PurpleCandle, 0.1f }, + { Material.PurpleCandleCake, 0.5f }, + { Material.PurpleCarpet, 0.1f }, + { Material.PurpleConcrete, 1.8f }, + { Material.PurpleConcretePowder, 0.5f }, + { Material.PurpleGlazedTerracotta, 1.4f }, + { Material.PurpleShulkerBox, 2.0f }, + { Material.PurpleStainedGlass, 0.3f }, + { Material.PurpleStainedGlassPane, 0.3f }, + { Material.PurpleTerracotta, 1.25f }, + { Material.PurpleWallBanner, 1.0f }, + { Material.PurpleWool, 0.8f }, + { Material.PurpurBlock, 1.5f }, + { Material.PurpurPillar, 1.5f }, + { Material.PurpurSlab, 2.0f }, + { Material.PurpurStairs, 1.5f }, + { Material.QuartzBlock, 0.8f }, + { Material.QuartzBricks, 0.8f }, + { Material.QuartzPillar, 0.8f }, + { Material.QuartzSlab, 2.0f }, + { Material.QuartzStairs, 0.8f }, + { Material.Rail, 0.7f }, + { Material.RawCopperBlock, 5.0f }, + { Material.RawGoldBlock, 5.0f }, + { Material.RawIronBlock, 5.0f }, + { Material.RedBanner, 1.0f }, + { Material.RedBed, 0.2f }, + { Material.RedCandle, 0.1f }, + { Material.RedCandleCake, 0.5f }, + { Material.RedCarpet, 0.1f }, + { Material.RedConcrete, 1.8f }, + { Material.RedConcretePowder, 0.5f }, + { Material.RedGlazedTerracotta, 1.4f }, { Material.RedMushroom, 0.0f }, - { Material.RedNetherBrickSlab, 0.0f }, - { Material.RedNetherBrickWall, 0.0f }, - { Material.RedSandstoneWall, 0.0f }, - { Material.RedShulkerBox, 0.0f }, + { Material.RedMushroomBlock, 0.2f }, + { Material.RedNetherBrickSlab, 2.0f }, + { Material.RedNetherBrickStairs, 2.0f }, + { Material.RedNetherBrickWall, 2.0f }, + { Material.RedNetherBricks, 2.0f }, + { Material.RedSand, 0.5f }, + { Material.RedSandstone, 0.8f }, + { Material.RedSandstoneSlab, 2.0f }, + { Material.RedSandstoneStairs, 0.8f }, + { Material.RedSandstoneWall, 0.8f }, + { Material.RedShulkerBox, 2.0f }, + { Material.RedStainedGlass, 0.3f }, + { Material.RedStainedGlassPane, 0.3f }, + { Material.RedTerracotta, 1.25f }, { Material.RedTulip, 0.0f }, + { Material.RedWallBanner, 1.0f }, + { Material.RedWool, 0.8f }, + { Material.RedstoneBlock, 5.0f }, + { Material.RedstoneLamp, 0.3f }, + { Material.RedstoneOre, 3.0f }, { Material.RedstoneTorch, 0.0f }, { Material.RedstoneWallTorch, 0.0f }, { Material.RedstoneWire, 0.0f }, + { Material.ReinforcedDeepslate, 55.0f }, { Material.Repeater, 0.0f }, + { Material.RepeatingCommandBlock, -1.0f }, { Material.ResinBlock, 0.0f }, + { Material.ResinBrickSlab, 1.5f }, + { Material.ResinBrickStairs, 1.5f }, + { Material.ResinBrickWall, 1.5f }, + { Material.ResinBricks, 1.5f }, { Material.ResinClump, 0.0f }, + { Material.RespawnAnchor, 50.0f }, + { Material.RootedDirt, 0.5f }, { Material.RoseBush, 0.0f }, - { Material.SandstoneWall, 0.0f }, + { Material.Sand, 0.5f }, + { Material.Sandstone, 0.8f }, + { Material.SandstoneSlab, 2.0f }, + { Material.SandstoneStairs, 0.8f }, + { Material.SandstoneWall, 0.8f }, { Material.Scaffolding, 0.0f }, + { Material.Sculk, 0.2f }, + { Material.SculkCatalyst, 3.0f }, + { Material.SculkSensor, 1.5f }, + { Material.SculkShrieker, 3.0f }, + { Material.SculkVein, 0.2f }, + { Material.SeaLantern, 0.3f }, { Material.SeaPickle, 0.0f }, { Material.Seagrass, 0.0f }, { Material.ShortDryGrass, 0.0f }, { Material.ShortGrass, 0.0f }, - { Material.ShulkerBox, 0.0f }, + { Material.Shroomlight, 1.0f }, + { Material.ShulkerBox, 2.0f }, + { Material.SkeletonSkull, 1.0f }, + { Material.SkeletonWallSkull, 1.0f }, { Material.SlimeBlock, 0.0f }, - { Material.SmallAmethystBud, 0.0f }, + { Material.SmallAmethystBud, 1.5f }, { Material.SmallDripleaf, 0.0f }, - { Material.SmoothBasalt, 0.0f }, - { Material.SmoothQuartzSlab, 0.0f }, - { Material.SmoothRedSandstoneSlab, 0.0f }, - { Material.SmoothSandstoneSlab, 0.0f }, + { Material.SmithingTable, 2.5f }, + { Material.Smoker, 3.5f }, + { Material.SmoothBasalt, 1.25f }, + { Material.SmoothQuartz, 2.0f }, + { Material.SmoothQuartzSlab, 2.0f }, + { Material.SmoothQuartzStairs, 2.0f }, + { Material.SmoothRedSandstone, 2.0f }, + { Material.SmoothRedSandstoneSlab, 2.0f }, + { Material.SmoothRedSandstoneStairs, 2.0f }, + { Material.SmoothSandstone, 2.0f }, + { Material.SmoothSandstoneSlab, 2.0f }, + { Material.SmoothSandstoneStairs, 2.0f }, + { Material.SmoothStone, 2.0f }, + { Material.SmoothStoneSlab, 2.0f }, + { Material.SnifferEgg, 0.5f }, + { Material.Snow, 0.1f }, + { Material.SnowBlock, 0.2f }, + { Material.SoulCampfire, 2.0f }, { Material.SoulFire, 0.0f }, + { Material.SoulLantern, 3.5f }, + { Material.SoulSand, 0.5f }, + { Material.SoulSoil, 0.5f }, { Material.SoulTorch, 0.0f }, { Material.SoulWallTorch, 0.0f }, + { Material.Spawner, 5.0f }, + { Material.Sponge, 0.6f }, { Material.SporeBlossom, 0.0f }, - { Material.SpruceButton, 0.0f }, - { Material.SpruceLeaves, 0.0f }, - { Material.SpruceLog, 0.0f }, + { Material.SpruceButton, 0.5f }, + { Material.SpruceDoor, 3.0f }, + { Material.SpruceFence, 2.0f }, + { Material.SpruceFenceGate, 2.0f }, + { Material.SpruceHangingSign, 1.0f }, + { Material.SpruceLeaves, 0.2f }, + { Material.SpruceLog, 2.0f }, + { Material.SprucePlanks, 2.0f }, + { Material.SprucePressurePlate, 0.5f }, { Material.SpruceSapling, 0.0f }, + { Material.SpruceShelf, 2.0f }, + { Material.SpruceSign, 1.0f }, + { Material.SpruceSlab, 2.0f }, + { Material.SpruceStairs, 2.0f }, + { Material.SpruceTrapdoor, 3.0f }, + { Material.SpruceWallHangingSign, 1.0f }, + { Material.SpruceWallSign, 1.0f }, + { Material.SpruceWood, 2.0f }, { Material.StickyPiston, 0.0f }, - { Material.StoneBrickWall, 0.0f }, - { Material.StoneButton, 0.0f }, - { Material.StrippedAcaciaLog, 0.0f }, - { Material.StrippedBambooBlock, 0.0f }, - { Material.StrippedBirchLog, 0.0f }, - { Material.StrippedCherryLog, 0.0f }, - { Material.StrippedCrimsonStem, 0.0f }, - { Material.StrippedDarkOakLog, 0.0f }, - { Material.StrippedJungleLog, 0.0f }, - { Material.StrippedMangroveLog, 0.0f }, - { Material.StrippedMangroveWood, 0.0f }, - { Material.StrippedOakLog, 0.0f }, - { Material.StrippedPaleOakLog, 0.0f }, - { Material.StrippedSpruceLog, 0.0f }, - { Material.StrippedWarpedStem, 0.0f }, + { Material.Stone, 1.5f }, + { Material.StoneBrickSlab, 2.0f }, + { Material.StoneBrickStairs, 1.5f }, + { Material.StoneBrickWall, 1.5f }, + { Material.StoneBricks, 1.5f }, + { Material.StoneButton, 0.5f }, + { Material.StonePressurePlate, 0.5f }, + { Material.StoneSlab, 2.0f }, + { Material.StoneStairs, 1.5f }, + { Material.Stonecutter, 3.5f }, + { Material.StrippedAcaciaLog, 2.0f }, + { Material.StrippedAcaciaWood, 2.0f }, + { Material.StrippedBambooBlock, 2.0f }, + { Material.StrippedBirchLog, 2.0f }, + { Material.StrippedBirchWood, 2.0f }, + { Material.StrippedCherryLog, 2.0f }, + { Material.StrippedCherryWood, 2.0f }, + { Material.StrippedCrimsonHyphae, 2.0f }, + { Material.StrippedCrimsonStem, 2.0f }, + { Material.StrippedDarkOakLog, 2.0f }, + { Material.StrippedDarkOakWood, 2.0f }, + { Material.StrippedJungleLog, 2.0f }, + { Material.StrippedJungleWood, 2.0f }, + { Material.StrippedMangroveLog, 2.0f }, + { Material.StrippedMangroveWood, 2.0f }, + { Material.StrippedOakLog, 2.0f }, + { Material.StrippedOakWood, 2.0f }, + { Material.StrippedPaleOakLog, 2.0f }, + { Material.StrippedPaleOakWood, 2.0f }, + { Material.StrippedSpruceLog, 2.0f }, + { Material.StrippedSpruceWood, 2.0f }, + { Material.StrippedWarpedHyphae, 2.0f }, + { Material.StrippedWarpedStem, 2.0f }, + { Material.StructureBlock, -1.0f }, { Material.StructureVoid, 0.0f }, { Material.SugarCane, 0.0f }, { Material.Sunflower, 0.0f }, + { Material.SuspiciousGravel, 0.25f }, + { Material.SuspiciousSand, 0.25f }, { Material.SweetBerryBush, 0.0f }, { Material.TallDryGrass, 0.0f }, { Material.TallGrass, 0.0f }, { Material.TallSeagrass, 0.0f }, - { Material.TintedGlass, 0.0f }, + { Material.Target, 0.5f }, + { Material.Terracotta, 1.25f }, + { Material.TestBlock, -1.0f }, + { Material.TestInstanceBlock, -1.0f }, + { Material.TintedGlass, 0.3f }, { Material.Tnt, 0.0f }, { Material.Torch, 0.0f }, { Material.Torchflower, 0.0f }, { Material.TorchflowerCrop, 0.0f }, + { Material.TrappedChest, 2.5f }, + { Material.TrialSpawner, 50.0f }, { Material.Tripwire, 0.0f }, { Material.TripwireHook, 0.0f }, { Material.TubeCoral, 0.0f }, + { Material.TubeCoralBlock, 1.5f }, { Material.TubeCoralFan, 0.0f }, { Material.TubeCoralWallFan, 0.0f }, - { Material.TuffBrickSlab, 0.0f }, - { Material.TuffBrickStairs, 0.0f }, - { Material.TuffBrickWall, 0.0f }, - { Material.TuffBricks, 0.0f }, - { Material.TuffSlab, 0.0f }, - { Material.TuffStairs, 0.0f }, - { Material.TuffWall, 0.0f }, + { Material.Tuff, 1.5f }, + { Material.TuffBrickSlab, 1.5f }, + { Material.TuffBrickStairs, 1.5f }, + { Material.TuffBrickWall, 1.5f }, + { Material.TuffBricks, 1.5f }, + { Material.TuffSlab, 1.5f }, + { Material.TuffStairs, 1.5f }, + { Material.TuffWall, 1.5f }, + { Material.TurtleEgg, 0.5f }, { Material.TwistingVines, 0.0f }, { Material.TwistingVinesPlant, 0.0f }, + { Material.Vault, 50.0f }, + { Material.VerdantFroglight, 0.3f }, + { Material.Vine, 0.2f }, { Material.VoidAir, 0.0f }, { Material.WallTorch, 0.0f }, - { Material.WarpedButton, 0.0f }, + { Material.WarpedButton, 0.5f }, + { Material.WarpedDoor, 3.0f }, + { Material.WarpedFence, 2.0f }, + { Material.WarpedFenceGate, 2.0f }, { Material.WarpedFungus, 0.0f }, - { Material.WarpedRoots, 0.0f }, - { Material.WarpedStem, 0.0f }, - { Material.WaterCauldron, 0.0f }, - { Material.WaxedChiseledCopper, 0.0f }, - { Material.WaxedCopperBlock, 0.0f }, - { Material.WaxedCopperBulb, 0.0f }, - { Material.WaxedCopperChest, 0.0f }, - { Material.WaxedCopperDoor, 0.0f }, - { Material.WaxedCopperGolemStatue, 0.0f }, - { Material.WaxedCopperGrate, 0.0f }, - { Material.WaxedCopperTrapdoor, 0.0f }, - { Material.WaxedCutCopper, 0.0f }, - { Material.WaxedCutCopperSlab, 0.0f }, - { Material.WaxedExposedChiseledCopper, 0.0f }, - { Material.WaxedExposedCopper, 0.0f }, - { Material.WaxedExposedCopperBulb, 0.0f }, - { Material.WaxedExposedCopperChest, 0.0f }, - { Material.WaxedExposedCopperDoor, 0.0f }, - { Material.WaxedExposedCopperGolemStatue, 0.0f }, - { Material.WaxedExposedCopperGrate, 0.0f }, - { Material.WaxedExposedCopperTrapdoor, 0.0f }, - { Material.WaxedExposedCutCopper, 0.0f }, - { Material.WaxedExposedCutCopperSlab, 0.0f }, - { Material.WaxedExposedLightningRod, 0.0f }, - { Material.WaxedLightningRod, 0.0f }, - { Material.WaxedOxidizedChiseledCopper, 0.0f }, - { Material.WaxedOxidizedCopper, 0.0f }, - { Material.WaxedOxidizedCopperBulb, 0.0f }, - { Material.WaxedOxidizedCopperChest, 0.0f }, - { Material.WaxedOxidizedCopperDoor, 0.0f }, - { Material.WaxedOxidizedCopperGolemStatue, 0.0f }, - { Material.WaxedOxidizedCopperGrate, 0.0f }, - { Material.WaxedOxidizedCopperTrapdoor, 0.0f }, - { Material.WaxedOxidizedCutCopper, 0.0f }, - { Material.WaxedOxidizedCutCopperSlab, 0.0f }, - { Material.WaxedOxidizedLightningRod, 0.0f }, - { Material.WaxedWeatheredChiseledCopper, 0.0f }, - { Material.WaxedWeatheredCopper, 0.0f }, - { Material.WaxedWeatheredCopperBulb, 0.0f }, - { Material.WaxedWeatheredCopperChest, 0.0f }, - { Material.WaxedWeatheredCopperDoor, 0.0f }, - { Material.WaxedWeatheredCopperGolemStatue, 0.0f }, - { Material.WaxedWeatheredCopperGrate, 0.0f }, - { Material.WaxedWeatheredCopperTrapdoor, 0.0f }, - { Material.WaxedWeatheredCutCopper, 0.0f }, - { Material.WaxedWeatheredCutCopperSlab, 0.0f }, - { Material.WaxedWeatheredLightningRod, 0.0f }, - { Material.WeatheredChiseledCopper, 0.0f }, - { Material.WeatheredCopper, 0.0f }, - { Material.WeatheredCopperBulb, 0.0f }, - { Material.WeatheredCopperChest, 0.0f }, - { Material.WeatheredCopperDoor, 0.0f }, - { Material.WeatheredCopperGolemStatue, 0.0f }, - { Material.WeatheredCopperGrate, 0.0f }, - { Material.WeatheredCopperTrapdoor, 0.0f }, - { Material.WeatheredCutCopper, 0.0f }, - { Material.WeatheredCutCopperSlab, 0.0f }, - { Material.WeatheredCutCopperStairs, 0.0f }, - { Material.WeatheredLightningRod, 0.0f }, - { Material.WeepingVines, 0.0f }, - { Material.WeepingVinesPlant, 0.0f }, - { Material.Wheat, 0.0f }, - { Material.WhiteCandle, 0.0f }, - { Material.WhiteCandleCake, 0.0f }, - { Material.WhiteShulkerBox, 0.0f }, - { Material.WhiteTulip, 0.0f }, - { Material.Wildflowers, 0.0f }, - { Material.WitherRose, 0.0f }, - { Material.YellowCandle, 0.0f }, - { Material.YellowCandleCake, 0.0f }, - { Material.YellowShulkerBox, 0.0f }, - // Hardness 0.1: 23 blocks - { Material.BigDripleaf, 0.1f }, - { Material.BigDripleafStem, 0.1f }, - { Material.BlackCarpet, 0.1f }, - { Material.BlueCarpet, 0.1f }, - { Material.BrownCarpet, 0.1f }, - { Material.CyanCarpet, 0.1f }, - { Material.GrayCarpet, 0.1f }, - { Material.GreenCarpet, 0.1f }, - { Material.LightBlueCarpet, 0.1f }, - { Material.LightGrayCarpet, 0.1f }, - { Material.LimeCarpet, 0.1f }, - { Material.MagentaCarpet, 0.1f }, - { Material.MossBlock, 0.1f }, - { Material.MossCarpet, 0.1f }, - { Material.OrangeCarpet, 0.1f }, - { Material.PaleMossBlock, 0.1f }, - { Material.PaleMossCarpet, 0.1f }, - { Material.PinkCarpet, 0.1f }, - { Material.PurpleCarpet, 0.1f }, - { Material.RedCarpet, 0.1f }, - { Material.Snow, 0.1f }, - { Material.WhiteCarpet, 0.1f }, - { Material.YellowCarpet, 0.1f }, - // Hardness 0.2: 12 blocks - { Material.BrownMushroomBlock, 0.2f }, - { Material.CherryLeaves, 0.2f }, - { Material.Cocoa, 0.2f }, - { Material.DaylightDetector, 0.2f }, - { Material.GlowLichen, 0.2f }, - { Material.MushroomStem, 0.2f }, - { Material.PaleOakLeaves, 0.2f }, - { Material.RedMushroomBlock, 0.2f }, - { Material.Sculk, 0.2f }, - { Material.SculkVein, 0.2f }, - { Material.SnowBlock, 0.2f }, - { Material.Vine, 0.2f }, - { Material.PowderSnow, 0.25f }, - { Material.SuspiciousGravel, 0.25f }, - { Material.SuspiciousSand, 0.25f }, - // Hardness 0.3: 24 blocks - { Material.BeeNest, 0.3f }, - { Material.BlackStainedGlassPane, 0.3f }, - { Material.BlueStainedGlassPane, 0.3f }, - { Material.BrownStainedGlassPane, 0.3f }, - { Material.CyanStainedGlassPane, 0.3f }, - { Material.Glass, 0.3f }, - { Material.Glowstone, 0.3f }, - { Material.GrayStainedGlassPane, 0.3f }, - { Material.GreenStainedGlassPane, 0.3f }, - { Material.LightBlueStainedGlassPane, 0.3f }, - { Material.LightGrayStainedGlassPane, 0.3f }, - { Material.LimeStainedGlassPane, 0.3f }, - { Material.MagentaStainedGlassPane, 0.3f }, - { Material.OchreFroglight, 0.3f }, - { Material.OrangeStainedGlassPane, 0.3f }, - { Material.PearlescentFroglight, 0.3f }, - { Material.PinkStainedGlassPane, 0.3f }, - { Material.PurpleStainedGlassPane, 0.3f }, - { Material.RedStainedGlassPane, 0.3f }, - { Material.RedstoneLamp, 0.3f }, - { Material.SeaLantern, 0.3f }, - { Material.VerdantFroglight, 0.3f }, - { Material.WhiteStainedGlassPane, 0.3f }, - { Material.YellowStainedGlassPane, 0.3f }, - { Material.Cactus, 0.4f }, - { Material.ChorusFlower, 0.4f }, - { Material.ChorusPlant, 0.4f }, - { Material.CrimsonNylium, 0.4f }, - { Material.Ladder, 0.4f }, - { Material.Netherrack, 0.4f }, - { Material.WarpedNylium, 0.4f }, - // Hardness 0.5: 52 blocks - { Material.AcaciaPressurePlate, 0.5f }, - { Material.BambooPressurePlate, 0.5f }, - { Material.BirchPressurePlate, 0.5f }, - { Material.BlackConcretePowder, 0.5f }, - { Material.BlueConcretePowder, 0.5f }, - { Material.BrewingStand, 0.5f }, - { Material.BrownConcretePowder, 0.5f }, - { Material.Cake, 0.5f }, - { Material.CherryPressurePlate, 0.5f }, - { Material.CoarseDirt, 0.5f }, - { Material.CrimsonPressurePlate, 0.5f }, - { Material.CyanConcretePowder, 0.5f }, - { Material.DarkOakPressurePlate, 0.5f }, - { Material.Dirt, 0.5f }, - { Material.DriedKelpBlock, 0.5f }, - { Material.FrostedIce, 0.5f }, - { Material.GrayConcretePowder, 0.5f }, - { Material.GreenConcretePowder, 0.5f }, - { Material.HayBlock, 0.5f }, - { Material.HeavyWeightedPressurePlate, 0.5f }, - { Material.Ice, 0.5f }, - { Material.JunglePressurePlate, 0.5f }, - { Material.Lever, 0.5f }, - { Material.LightBlueConcretePowder, 0.5f }, - { Material.LightGrayConcretePowder, 0.5f }, - { Material.LightWeightedPressurePlate, 0.5f }, - { Material.LimeConcretePowder, 0.5f }, - { Material.MagentaConcretePowder, 0.5f }, - { Material.MagmaBlock, 0.5f }, - { Material.MangrovePressurePlate, 0.5f }, - { Material.OakPressurePlate, 0.5f }, - { Material.OrangeConcretePowder, 0.5f }, - { Material.PackedIce, 0.5f }, - { Material.PaleOakPressurePlate, 0.5f }, - { Material.PinkConcretePowder, 0.5f }, - { Material.Podzol, 0.5f }, - { Material.PolishedBlackstonePressurePlate, 0.5f }, - { Material.PurpleConcretePowder, 0.5f }, - { Material.RedConcretePowder, 0.5f }, - { Material.RedSand, 0.5f }, - { Material.RootedDirt, 0.5f }, - { Material.Sand, 0.5f }, - { Material.SnifferEgg, 0.5f }, - { Material.SoulSand, 0.5f }, - { Material.SoulSoil, 0.5f }, - { Material.SprucePressurePlate, 0.5f }, - { Material.StonePressurePlate, 0.5f }, - { Material.Target, 0.5f }, - { Material.TurtleEgg, 0.5f }, - { Material.WarpedPressurePlate, 0.5f }, - { Material.WhiteConcretePowder, 0.5f }, - { Material.YellowConcretePowder, 0.5f }, - // Hardness 0.6: 10 blocks - { Material.Beehive, 0.6f }, - { Material.Clay, 0.6f }, - { Material.Composter, 0.6f }, - { Material.Farmland, 0.6f }, - { Material.GrassBlock, 0.6f }, - { Material.Gravel, 0.6f }, - { Material.HoneycombBlock, 0.6f }, - { Material.Mycelium, 0.6f }, - { Material.Sponge, 0.6f }, - { Material.WetSponge, 0.6f }, - { Material.DirtPath, 0.65f }, - { Material.ActivatorRail, 0.7f }, - { Material.DetectorRail, 0.7f }, - { Material.MangroveRoots, 0.7f }, - { Material.MuddyMangroveRoots, 0.7f }, - { Material.PoweredRail, 0.7f }, - { Material.Rail, 0.7f }, - { Material.Calcite, 0.75f }, - // Hardness 0.8: 26 blocks - { Material.BlackWool, 0.8f }, - { Material.BlueWool, 0.8f }, - { Material.BrownWool, 0.8f }, - { Material.ChiseledQuartzBlock, 0.8f }, - { Material.ChiseledRedSandstone, 0.8f }, - { Material.ChiseledSandstone, 0.8f }, - { Material.CutRedSandstone, 0.8f }, - { Material.CutSandstone, 0.8f }, - { Material.CyanWool, 0.8f }, - { Material.GrayWool, 0.8f }, - { Material.GreenWool, 0.8f }, - { Material.LightBlueWool, 0.8f }, - { Material.LightGrayWool, 0.8f }, - { Material.LimeWool, 0.8f }, - { Material.MagentaWool, 0.8f }, - { Material.NoteBlock, 0.8f }, - { Material.OrangeWool, 0.8f }, - { Material.PinkWool, 0.8f }, - { Material.PurpleWool, 0.8f }, - { Material.QuartzBlock, 0.8f }, - { Material.QuartzPillar, 0.8f }, - { Material.RedSandstone, 0.8f }, - { Material.RedWool, 0.8f }, - { Material.Sandstone, 0.8f }, - { Material.WhiteWool, 0.8f }, - { Material.YellowWool, 0.8f }, - // Hardness 1.0: 100 blocks - { Material.AcaciaHangingSign, 1.0f }, - { Material.AcaciaSign, 1.0f }, - { Material.AcaciaWallHangingSign, 1.0f }, - { Material.AcaciaWallSign, 1.0f }, - { Material.BambooHangingSign, 1.0f }, - { Material.BambooSign, 1.0f }, - { Material.BambooWallHangingSign, 1.0f }, - { Material.BambooWallSign, 1.0f }, - { Material.BirchHangingSign, 1.0f }, - { Material.BirchSign, 1.0f }, - { Material.BirchWallHangingSign, 1.0f }, - { Material.BirchWallSign, 1.0f }, - { Material.BlackBanner, 1.0f }, - { Material.BlackWallBanner, 1.0f }, - { Material.BlueBanner, 1.0f }, - { Material.BlueWallBanner, 1.0f }, - { Material.BrownBanner, 1.0f }, - { Material.BrownWallBanner, 1.0f }, - { Material.CarvedPumpkin, 1.0f }, - { Material.CherryHangingSign, 1.0f }, - { Material.CherrySign, 1.0f }, - { Material.CherryWallHangingSign, 1.0f }, - { Material.CherryWallSign, 1.0f }, - { Material.CreeperHead, 1.0f }, - { Material.CreeperWallHead, 1.0f }, - { Material.CrimsonHangingSign, 1.0f }, - { Material.CrimsonSign, 1.0f }, - { Material.CrimsonWallHangingSign, 1.0f }, - { Material.CrimsonWallSign, 1.0f }, - { Material.CyanBanner, 1.0f }, - { Material.CyanWallBanner, 1.0f }, - { Material.DarkOakHangingSign, 1.0f }, - { Material.DarkOakSign, 1.0f }, - { Material.DarkOakWallHangingSign, 1.0f }, - { Material.DarkOakWallSign, 1.0f }, - { Material.DragonHead, 1.0f }, - { Material.DragonWallHead, 1.0f }, - { Material.GrayBanner, 1.0f }, - { Material.GrayWallBanner, 1.0f }, - { Material.GreenBanner, 1.0f }, - { Material.GreenWallBanner, 1.0f }, - { Material.JackOLantern, 1.0f }, - { Material.JungleHangingSign, 1.0f }, - { Material.JungleSign, 1.0f }, - { Material.JungleWallHangingSign, 1.0f }, - { Material.JungleWallSign, 1.0f }, - { Material.LightBlueBanner, 1.0f }, - { Material.LightBlueWallBanner, 1.0f }, - { Material.LightGrayBanner, 1.0f }, - { Material.LightGrayWallBanner, 1.0f }, - { Material.LimeBanner, 1.0f }, - { Material.LimeWallBanner, 1.0f }, - { Material.MagentaBanner, 1.0f }, - { Material.MagentaWallBanner, 1.0f }, - { Material.MangroveHangingSign, 1.0f }, - { Material.MangroveSign, 1.0f }, - { Material.MangroveWallHangingSign, 1.0f }, - { Material.MangroveWallSign, 1.0f }, - { Material.NetherWartBlock, 1.0f }, - { Material.OakHangingSign, 1.0f }, - { Material.OakSign, 1.0f }, - { Material.OakWallHangingSign, 1.0f }, - { Material.OakWallSign, 1.0f }, - { Material.OrangeBanner, 1.0f }, - { Material.OrangeWallBanner, 1.0f }, - { Material.PackedMud, 1.0f }, - { Material.PaleOakHangingSign, 1.0f }, - { Material.PaleOakSign, 1.0f }, - { Material.PaleOakWallHangingSign, 1.0f }, - { Material.PaleOakWallSign, 1.0f }, - { Material.PiglinHead, 1.0f }, - { Material.PiglinWallHead, 1.0f }, - { Material.PinkBanner, 1.0f }, - { Material.PinkWallBanner, 1.0f }, - { Material.PlayerHead, 1.0f }, - { Material.PlayerWallHead, 1.0f }, - { Material.PurpleBanner, 1.0f }, - { Material.PurpleWallBanner, 1.0f }, - { Material.RedBanner, 1.0f }, - { Material.RedWallBanner, 1.0f }, - { Material.Shroomlight, 1.0f }, - { Material.SkeletonSkull, 1.0f }, - { Material.SkeletonWallSkull, 1.0f }, - { Material.SpruceHangingSign, 1.0f }, - { Material.SpruceSign, 1.0f }, - { Material.SpruceWallHangingSign, 1.0f }, - { Material.SpruceWallSign, 1.0f }, { Material.WarpedHangingSign, 1.0f }, + { Material.WarpedHyphae, 2.0f }, + { Material.WarpedNylium, 0.4f }, + { Material.WarpedPlanks, 2.0f }, + { Material.WarpedPressurePlate, 0.5f }, + { Material.WarpedRoots, 0.0f }, + { Material.WarpedShelf, 2.0f }, { Material.WarpedSign, 1.0f }, + { Material.WarpedSlab, 2.0f }, + { Material.WarpedStairs, 2.0f }, + { Material.WarpedStem, 2.0f }, + { Material.WarpedTrapdoor, 3.0f }, { Material.WarpedWallHangingSign, 1.0f }, { Material.WarpedWallSign, 1.0f }, { Material.WarpedWartBlock, 1.0f }, + { Material.Water, 100.0f }, + { Material.WaterCauldron, 2.0f }, + { Material.WaxedChiseledCopper, 3.0f }, + { Material.WaxedCopperBlock, 3.0f }, + { Material.WaxedCopperBulb, 3.0f }, + { Material.WaxedCopperChest, 3.0f }, + { Material.WaxedCopperDoor, 3.0f }, + { Material.WaxedCopperGolemStatue, 3.0f }, + { Material.WaxedCopperGrate, 3.0f }, + { Material.WaxedCopperTrapdoor, 3.0f }, + { Material.WaxedCutCopper, 3.0f }, + { Material.WaxedCutCopperSlab, 3.0f }, + { Material.WaxedCutCopperStairs, 3.0f }, + { Material.WaxedExposedChiseledCopper, 3.0f }, + { Material.WaxedExposedCopper, 3.0f }, + { Material.WaxedExposedCopperBulb, 3.0f }, + { Material.WaxedExposedCopperChest, 3.0f }, + { Material.WaxedExposedCopperDoor, 3.0f }, + { Material.WaxedExposedCopperGolemStatue, 3.0f }, + { Material.WaxedExposedCopperGrate, 3.0f }, + { Material.WaxedExposedCopperTrapdoor, 3.0f }, + { Material.WaxedExposedCutCopper, 3.0f }, + { Material.WaxedExposedCutCopperSlab, 3.0f }, + { Material.WaxedExposedCutCopperStairs, 3.0f }, + { Material.WaxedExposedLightningRod, 3.0f }, + { Material.WaxedLightningRod, 3.0f }, + { Material.WaxedOxidizedChiseledCopper, 3.0f }, + { Material.WaxedOxidizedCopper, 3.0f }, + { Material.WaxedOxidizedCopperBulb, 3.0f }, + { Material.WaxedOxidizedCopperChest, 3.0f }, + { Material.WaxedOxidizedCopperDoor, 3.0f }, + { Material.WaxedOxidizedCopperGolemStatue, 3.0f }, + { Material.WaxedOxidizedCopperGrate, 3.0f }, + { Material.WaxedOxidizedCopperTrapdoor, 3.0f }, + { Material.WaxedOxidizedCutCopper, 3.0f }, + { Material.WaxedOxidizedCutCopperSlab, 3.0f }, + { Material.WaxedOxidizedCutCopperStairs, 3.0f }, + { Material.WaxedOxidizedLightningRod, 3.0f }, + { Material.WaxedWeatheredChiseledCopper, 3.0f }, + { Material.WaxedWeatheredCopper, 3.0f }, + { Material.WaxedWeatheredCopperBulb, 3.0f }, + { Material.WaxedWeatheredCopperChest, 3.0f }, + { Material.WaxedWeatheredCopperDoor, 3.0f }, + { Material.WaxedWeatheredCopperGolemStatue, 3.0f }, + { Material.WaxedWeatheredCopperGrate, 3.0f }, + { Material.WaxedWeatheredCopperTrapdoor, 3.0f }, + { Material.WaxedWeatheredCutCopper, 3.0f }, + { Material.WaxedWeatheredCutCopperSlab, 3.0f }, + { Material.WaxedWeatheredCutCopperStairs, 3.0f }, + { Material.WaxedWeatheredLightningRod, 3.0f }, + { Material.WeatheredChiseledCopper, 3.0f }, + { Material.WeatheredCopper, 3.0f }, + { Material.WeatheredCopperBulb, 3.0f }, + { Material.WeatheredCopperChest, 3.0f }, + { Material.WeatheredCopperDoor, 3.0f }, + { Material.WeatheredCopperGolemStatue, 3.0f }, + { Material.WeatheredCopperGrate, 3.0f }, + { Material.WeatheredCopperTrapdoor, 3.0f }, + { Material.WeatheredCutCopper, 3.0f }, + { Material.WeatheredCutCopperSlab, 3.0f }, + { Material.WeatheredCutCopperStairs, 3.0f }, + { Material.WeatheredLightningRod, 3.0f }, + { Material.WeepingVines, 0.0f }, + { Material.WeepingVinesPlant, 0.0f }, + { Material.WetSponge, 0.6f }, + { Material.Wheat, 0.0f }, { Material.WhiteBanner, 1.0f }, + { Material.WhiteBed, 0.2f }, + { Material.WhiteCandle, 0.1f }, + { Material.WhiteCandleCake, 0.5f }, + { Material.WhiteCarpet, 0.1f }, + { Material.WhiteConcrete, 1.8f }, + { Material.WhiteConcretePowder, 0.5f }, + { Material.WhiteGlazedTerracotta, 1.4f }, + { Material.WhiteShulkerBox, 2.0f }, + { Material.WhiteStainedGlass, 0.3f }, + { Material.WhiteStainedGlassPane, 0.3f }, + { Material.WhiteTerracotta, 1.25f }, + { Material.WhiteTulip, 0.0f }, { Material.WhiteWallBanner, 1.0f }, + { Material.WhiteWool, 0.8f }, + { Material.Wildflowers, 0.0f }, + { Material.WitherRose, 0.0f }, { Material.WitherSkeletonSkull, 1.0f }, { Material.WitherSkeletonWallSkull, 1.0f }, { Material.YellowBanner, 1.0f }, + { Material.YellowBed, 0.2f }, + { Material.YellowCandle, 0.1f }, + { Material.YellowCandleCake, 0.5f }, + { Material.YellowCarpet, 0.1f }, + { Material.YellowConcrete, 1.8f }, + { Material.YellowConcretePowder, 0.5f }, + { Material.YellowGlazedTerracotta, 1.4f }, + { Material.YellowShulkerBox, 2.0f }, + { Material.YellowStainedGlass, 0.3f }, + { Material.YellowStainedGlassPane, 0.3f }, + { Material.YellowTerracotta, 1.25f }, { Material.YellowWallBanner, 1.0f }, + { Material.YellowWool, 0.8f }, { Material.ZombieHead, 1.0f }, { Material.ZombieWallHead, 1.0f }, - // Hardness 1.25: 19 blocks - { Material.Basalt, 1.25f }, - { Material.BlackTerracotta, 1.25f }, - { Material.BlueTerracotta, 1.25f }, - { Material.BrownTerracotta, 1.25f }, - { Material.CyanTerracotta, 1.25f }, - { Material.GrayTerracotta, 1.25f }, - { Material.GreenTerracotta, 1.25f }, - { Material.LightBlueTerracotta, 1.25f }, - { Material.LightGrayTerracotta, 1.25f }, - { Material.LimeTerracotta, 1.25f }, - { Material.MagentaTerracotta, 1.25f }, - { Material.OrangeTerracotta, 1.25f }, - { Material.PinkTerracotta, 1.25f }, - { Material.PolishedBasalt, 1.25f }, - { Material.PurpleTerracotta, 1.25f }, - { Material.RedTerracotta, 1.25f }, - { Material.Terracotta, 1.25f }, - { Material.WhiteTerracotta, 1.25f }, - { Material.YellowTerracotta, 1.25f }, - // Hardness 1.4: 16 blocks - { Material.BlackGlazedTerracotta, 1.4f }, - { Material.BlueGlazedTerracotta, 1.4f }, - { Material.BrownGlazedTerracotta, 1.4f }, - { Material.CyanGlazedTerracotta, 1.4f }, - { Material.GrayGlazedTerracotta, 1.4f }, - { Material.GreenGlazedTerracotta, 1.4f }, - { Material.LightBlueGlazedTerracotta, 1.4f }, - { Material.LightGrayGlazedTerracotta, 1.4f }, - { Material.LimeGlazedTerracotta, 1.4f }, - { Material.MagentaGlazedTerracotta, 1.4f }, - { Material.OrangeGlazedTerracotta, 1.4f }, - { Material.PinkGlazedTerracotta, 1.4f }, - { Material.PurpleGlazedTerracotta, 1.4f }, - { Material.RedGlazedTerracotta, 1.4f }, - { Material.WhiteGlazedTerracotta, 1.4f }, - { Material.YellowGlazedTerracotta, 1.4f }, - // Hardness 1.5: 49 blocks - { Material.AmethystBlock, 1.5f }, - { Material.AmethystCluster, 1.5f }, - { Material.Andesite, 1.5f }, - { Material.Blackstone, 1.5f }, - { Material.Bookshelf, 1.5f }, - { Material.BrainCoralBlock, 1.5f }, - { Material.BubbleCoralBlock, 1.5f }, - { Material.BuddingAmethyst, 1.5f }, - { Material.ChiseledBookshelf, 1.5f }, - { Material.ChiseledPolishedBlackstone, 1.5f }, - { Material.ChiseledResinBricks, 1.5f }, - { Material.ChiseledStoneBricks, 1.5f }, - { Material.CrackedStoneBricks, 1.5f }, - { Material.Crafter, 1.5f }, - { Material.DarkPrismarine, 1.5f }, - { Material.DarkPrismarineSlab, 1.5f }, - { Material.DeadBrainCoralBlock, 1.5f }, - { Material.DeadBubbleCoralBlock, 1.5f }, - { Material.DeadFireCoralBlock, 1.5f }, - { Material.DeadHornCoralBlock, 1.5f }, - { Material.DeadTubeCoralBlock, 1.5f }, - { Material.Diorite, 1.5f }, - { Material.DripstoneBlock, 1.5f }, - { Material.FireCoralBlock, 1.5f }, - { Material.Granite, 1.5f }, - { Material.HornCoralBlock, 1.5f }, - { Material.MossyStoneBricks, 1.5f }, - { Material.MudBrickSlab, 1.5f }, - { Material.MudBricks, 1.5f }, - { Material.PistonHead, 1.5f }, - { Material.PointedDripstone, 1.5f }, - { Material.PolishedAndesite, 1.5f }, - { Material.PolishedBlackstoneBricks, 1.5f }, - { Material.PolishedDiorite, 1.5f }, - { Material.PolishedGranite, 1.5f }, - { Material.Prismarine, 1.5f }, - { Material.PrismarineBrickSlab, 1.5f }, - { Material.PrismarineBricks, 1.5f }, - { Material.PrismarineSlab, 1.5f }, - { Material.PurpurBlock, 1.5f }, - { Material.PurpurPillar, 1.5f }, - { Material.ResinBrickSlab, 1.5f }, - { Material.ResinBrickWall, 1.5f }, - { Material.ResinBricks, 1.5f }, - { Material.SculkSensor, 1.5f }, - { Material.Stone, 1.5f }, - { Material.StoneBricks, 1.5f }, - { Material.TubeCoralBlock, 1.5f }, - { Material.Tuff, 1.5f }, - // Hardness 1.8: 16 blocks - { Material.BlackConcrete, 1.8f }, - { Material.BlueConcrete, 1.8f }, - { Material.BrownConcrete, 1.8f }, - { Material.CyanConcrete, 1.8f }, - { Material.GrayConcrete, 1.8f }, - { Material.GreenConcrete, 1.8f }, - { Material.LightBlueConcrete, 1.8f }, - { Material.LightGrayConcrete, 1.8f }, - { Material.LimeConcrete, 1.8f }, - { Material.MagentaConcrete, 1.8f }, - { Material.OrangeConcrete, 1.8f }, - { Material.PinkConcrete, 1.8f }, - { Material.PurpleConcrete, 1.8f }, - { Material.RedConcrete, 1.8f }, - { Material.WhiteConcrete, 1.8f }, - { Material.YellowConcrete, 1.8f }, - // Hardness 2.0: 117 blocks - { Material.AcaciaFence, 2.0f }, - { Material.AcaciaFenceGate, 2.0f }, - { Material.AcaciaPlanks, 2.0f }, - { Material.AcaciaShelf, 2.0f }, - { Material.AcaciaSlab, 2.0f }, - { Material.AcaciaWood, 2.0f }, - { Material.BambooFence, 2.0f }, - { Material.BambooFenceGate, 2.0f }, - { Material.BambooMosaic, 2.0f }, - { Material.BambooMosaicSlab, 2.0f }, - { Material.BambooPlanks, 2.0f }, - { Material.BambooShelf, 2.0f }, - { Material.BambooSlab, 2.0f }, - { Material.BirchFence, 2.0f }, - { Material.BirchFenceGate, 2.0f }, - { Material.BirchPlanks, 2.0f }, - { Material.BirchShelf, 2.0f }, - { Material.BirchSlab, 2.0f }, - { Material.BirchWood, 2.0f }, - { Material.BlackstoneSlab, 2.0f }, - { Material.BoneBlock, 2.0f }, - { Material.BrickSlab, 2.0f }, - { Material.Bricks, 2.0f }, - { Material.Campfire, 2.0f }, - { Material.Cauldron, 2.0f }, - { Material.CherryFence, 2.0f }, - { Material.CherryFenceGate, 2.0f }, - { Material.CherryPlanks, 2.0f }, - { Material.CherryShelf, 2.0f }, - { Material.CherrySlab, 2.0f }, - { Material.CherryWood, 2.0f }, - { Material.ChiseledNetherBricks, 2.0f }, - { Material.Cobblestone, 2.0f }, - { Material.CobblestoneSlab, 2.0f }, - { Material.CrackedNetherBricks, 2.0f }, - { Material.CrimsonFence, 2.0f }, - { Material.CrimsonFenceGate, 2.0f }, - { Material.CrimsonHyphae, 2.0f }, - { Material.CrimsonPlanks, 2.0f }, - { Material.CrimsonShelf, 2.0f }, - { Material.CrimsonSlab, 2.0f }, - { Material.CutRedSandstoneSlab, 2.0f }, - { Material.CutSandstoneSlab, 2.0f }, - { Material.DarkOakFence, 2.0f }, - { Material.DarkOakFenceGate, 2.0f }, - { Material.DarkOakPlanks, 2.0f }, - { Material.DarkOakShelf, 2.0f }, - { Material.DarkOakSlab, 2.0f }, - { Material.DarkOakWood, 2.0f }, - { Material.Grindstone, 2.0f }, - { Material.Jukebox, 2.0f }, - { Material.JungleFence, 2.0f }, - { Material.JungleFenceGate, 2.0f }, - { Material.JunglePlanks, 2.0f }, - { Material.JungleShelf, 2.0f }, - { Material.JungleSlab, 2.0f }, - { Material.JungleWood, 2.0f }, - { Material.MangroveFence, 2.0f }, - { Material.MangroveFenceGate, 2.0f }, - { Material.MangrovePlanks, 2.0f }, - { Material.MangroveShelf, 2.0f }, - { Material.MangroveSlab, 2.0f }, - { Material.MangroveWood, 2.0f }, - { Material.MossyCobblestone, 2.0f }, - { Material.NetherBrickFence, 2.0f }, - { Material.NetherBrickSlab, 2.0f }, - { Material.NetherBricks, 2.0f }, - { Material.OakFence, 2.0f }, - { Material.OakFenceGate, 2.0f }, - { Material.OakPlanks, 2.0f }, - { Material.OakShelf, 2.0f }, - { Material.OakSlab, 2.0f }, - { Material.OakWood, 2.0f }, - { Material.PaleOakFence, 2.0f }, - { Material.PaleOakFenceGate, 2.0f }, - { Material.PaleOakPlanks, 2.0f }, - { Material.PaleOakShelf, 2.0f }, - { Material.PaleOakSlab, 2.0f }, - { Material.PaleOakWood, 2.0f }, - { Material.PetrifiedOakSlab, 2.0f }, - { Material.PolishedBlackstone, 2.0f }, - { Material.PolishedBlackstoneBrickSlab, 2.0f }, - { Material.PurpurSlab, 2.0f }, - { Material.QuartzSlab, 2.0f }, - { Material.RedNetherBricks, 2.0f }, - { Material.RedSandstoneSlab, 2.0f }, - { Material.SandstoneSlab, 2.0f }, - { Material.SmoothQuartz, 2.0f }, - { Material.SmoothRedSandstone, 2.0f }, - { Material.SmoothSandstone, 2.0f }, - { Material.SmoothStone, 2.0f }, - { Material.SmoothStoneSlab, 2.0f }, - { Material.SoulCampfire, 2.0f }, - { Material.SpruceFence, 2.0f }, - { Material.SpruceFenceGate, 2.0f }, - { Material.SprucePlanks, 2.0f }, - { Material.SpruceShelf, 2.0f }, - { Material.SpruceSlab, 2.0f }, - { Material.SpruceWood, 2.0f }, - { Material.StoneBrickSlab, 2.0f }, - { Material.StoneSlab, 2.0f }, - { Material.StrippedAcaciaWood, 2.0f }, - { Material.StrippedBirchWood, 2.0f }, - { Material.StrippedCherryWood, 2.0f }, - { Material.StrippedCrimsonHyphae, 2.0f }, - { Material.StrippedDarkOakWood, 2.0f }, - { Material.StrippedJungleWood, 2.0f }, - { Material.StrippedOakWood, 2.0f }, - { Material.StrippedPaleOakWood, 2.0f }, - { Material.StrippedSpruceWood, 2.0f }, - { Material.StrippedWarpedHyphae, 2.0f }, - { Material.WarpedFence, 2.0f }, - { Material.WarpedFenceGate, 2.0f }, - { Material.WarpedHyphae, 2.0f }, - { Material.WarpedPlanks, 2.0f }, - { Material.WarpedShelf, 2.0f }, - { Material.WarpedSlab, 2.0f }, - // Hardness 2.5: 9 blocks - { Material.Barrel, 2.5f }, - { Material.CartographyTable, 2.5f }, - { Material.Chest, 2.5f }, - { Material.CraftingTable, 2.5f }, - { Material.FletchingTable, 2.5f }, - { Material.Lectern, 2.5f }, - { Material.Loom, 2.5f }, - { Material.SmithingTable, 2.5f }, - { Material.TrappedChest, 2.5f }, - { Material.BlueIce, 2.8f }, - // Hardness 3.0: 53 blocks - { Material.AcaciaDoor, 3.0f }, - { Material.AcaciaTrapdoor, 3.0f }, - { Material.BambooDoor, 3.0f }, - { Material.BambooTrapdoor, 3.0f }, - { Material.Beacon, 3.0f }, - { Material.BirchDoor, 3.0f }, - { Material.BirchTrapdoor, 3.0f }, - { Material.CherryDoor, 3.0f }, - { Material.CherryTrapdoor, 3.0f }, - { Material.CoalOre, 3.0f }, - { Material.Conduit, 3.0f }, - { Material.CopperBlock, 3.0f }, - { Material.CopperBulb, 3.0f }, - { Material.CopperChest, 3.0f }, - { Material.CopperDoor, 3.0f }, - { Material.CopperGolemStatue, 3.0f }, - { Material.CopperGrate, 3.0f }, - { Material.CopperTrapdoor, 3.0f }, - { Material.CrimsonDoor, 3.0f }, - { Material.CrimsonTrapdoor, 3.0f }, - { Material.DarkOakDoor, 3.0f }, - { Material.DarkOakTrapdoor, 3.0f }, - { Material.Deepslate, 3.0f }, - { Material.DiamondOre, 3.0f }, - { Material.DragonEgg, 3.0f }, - { Material.EmeraldOre, 3.0f }, - { Material.EndStone, 3.0f }, - { Material.EndStoneBricks, 3.0f }, - { Material.GoldBlock, 3.0f }, - { Material.GoldOre, 3.0f }, - { Material.Hopper, 3.0f }, - { Material.IronOre, 3.0f }, - { Material.JungleDoor, 3.0f }, - { Material.JungleTrapdoor, 3.0f }, - { Material.LapisBlock, 3.0f }, - { Material.LapisOre, 3.0f }, - { Material.LightningRod, 3.0f }, - { Material.MangroveDoor, 3.0f }, - { Material.MangroveTrapdoor, 3.0f }, - { Material.NetherGoldOre, 3.0f }, - { Material.NetherQuartzOre, 3.0f }, - { Material.OakDoor, 3.0f }, - { Material.OakTrapdoor, 3.0f }, - { Material.Observer, 3.0f }, - { Material.PaleOakDoor, 3.0f }, - { Material.PaleOakTrapdoor, 3.0f }, - { Material.RedstoneOre, 3.0f }, - { Material.SculkCatalyst, 3.0f }, - { Material.SculkShrieker, 3.0f }, - { Material.SpruceDoor, 3.0f }, - { Material.SpruceTrapdoor, 3.0f }, - { Material.WarpedDoor, 3.0f }, - { Material.WarpedTrapdoor, 3.0f }, - // Hardness 3.5: 10 blocks - { Material.BlastFurnace, 3.5f }, - { Material.CobbledDeepslate, 3.5f }, - { Material.Dispenser, 3.5f }, - { Material.Dropper, 3.5f }, - { Material.Furnace, 3.5f }, - { Material.Lantern, 3.5f }, - { Material.Lodestone, 3.5f }, - { Material.Smoker, 3.5f }, - { Material.SoulLantern, 3.5f }, - { Material.Stonecutter, 3.5f }, - { Material.Cobweb, 4.0f }, - { Material.DeepslateCoalOre, 4.5f }, - { Material.DeepslateCopperOre, 4.5f }, - { Material.DeepslateDiamondOre, 4.5f }, - { Material.DeepslateEmeraldOre, 4.5f }, - { Material.DeepslateGoldOre, 4.5f }, - { Material.DeepslateIronOre, 4.5f }, - { Material.DeepslateLapisOre, 4.5f }, - { Material.DeepslateRedstoneOre, 4.5f }, - // Hardness 5.0: 18 blocks - { Material.Anvil, 5.0f }, - { Material.Bell, 5.0f }, - { Material.ChippedAnvil, 5.0f }, - { Material.CoalBlock, 5.0f }, - { Material.DamagedAnvil, 5.0f }, - { Material.DiamondBlock, 5.0f }, - { Material.EmeraldBlock, 5.0f }, - { Material.EnchantingTable, 5.0f }, - { Material.IronBars, 5.0f }, - { Material.IronBlock, 5.0f }, - { Material.IronChain, 5.0f }, - { Material.IronDoor, 5.0f }, - { Material.IronTrapdoor, 5.0f }, - { Material.RawCopperBlock, 5.0f }, - { Material.RawGoldBlock, 5.0f }, - { Material.RawIronBlock, 5.0f }, - { Material.RedstoneBlock, 5.0f }, - { Material.Spawner, 5.0f }, - { Material.CreakingHeart, 10.0f }, - { Material.HeavyCore, 10.0f }, - { Material.EnderChest, 22.5f }, - { Material.AncientDebris, 30.0f }, - { Material.CryingObsidian, 50.0f }, - { Material.NetheriteBlock, 50.0f }, - { Material.Obsidian, 50.0f }, - { Material.RespawnAnchor, 50.0f }, - { Material.TrialSpawner, 50.0f }, - { Material.Vault, 50.0f }, - { Material.ReinforcedDeepslate, 55.0f }, - { Material.Lava, 100.0f }, - { Material.Water, 100.0f }, }.ToFrozenDictionary(); private static readonly FrozenSet RequiresCorrectToolSet = new HashSet @@ -1114,12 +1185,18 @@ namespace MinecraftClient.Mapping Material.AmethystBlock, Material.AncientDebris, Material.Andesite, + Material.AndesiteSlab, + Material.AndesiteStairs, + Material.AndesiteWall, Material.Anvil, Material.Basalt, Material.BlackConcrete, Material.BlackGlazedTerracotta, Material.BlackTerracotta, Material.Blackstone, + Material.BlackstoneSlab, + Material.BlackstoneStairs, + Material.BlackstoneWall, Material.BlastFurnace, Material.BlueConcrete, Material.BlueGlazedTerracotta, @@ -1127,6 +1204,8 @@ namespace MinecraftClient.Mapping Material.BoneBlock, Material.BrainCoralBlock, Material.BrickSlab, + Material.BrickStairs, + Material.BrickWall, Material.Bricks, Material.BrownConcrete, Material.BrownGlazedTerracotta, @@ -1137,27 +1216,45 @@ namespace MinecraftClient.Mapping Material.Cauldron, Material.ChainCommandBlock, Material.ChippedAnvil, + Material.ChiseledCopper, + Material.ChiseledDeepslate, Material.ChiseledNetherBricks, + Material.ChiseledPolishedBlackstone, Material.ChiseledQuartzBlock, Material.ChiseledRedSandstone, Material.ChiseledResinBricks, Material.ChiseledSandstone, Material.ChiseledStoneBricks, + Material.ChiseledTuff, + Material.ChiseledTuffBricks, Material.CoalBlock, Material.CoalOre, + Material.CobbledDeepslate, + Material.CobbledDeepslateSlab, + Material.CobbledDeepslateStairs, + Material.CobbledDeepslateWall, Material.Cobblestone, Material.CobblestoneSlab, + Material.CobblestoneStairs, + Material.CobblestoneWall, Material.Cobweb, Material.CommandBlock, Material.CopperBlock, Material.CopperBulb, Material.CopperChest, Material.CopperGrate, + Material.CopperOre, Material.CopperTrapdoor, + Material.CrackedDeepslateBricks, + Material.CrackedDeepslateTiles, Material.CrackedNetherBricks, + Material.CrackedPolishedBlackstoneBricks, Material.CrackedStoneBricks, Material.CrimsonNylium, Material.CryingObsidian, + Material.CutCopper, + Material.CutCopperSlab, + Material.CutCopperStairs, Material.CutRedSandstone, Material.CutRedSandstoneSlab, Material.CutSandstone, @@ -1168,6 +1265,7 @@ namespace MinecraftClient.Mapping Material.DamagedAnvil, Material.DarkPrismarine, Material.DarkPrismarineSlab, + Material.DarkPrismarineStairs, Material.DeadBrainCoral, Material.DeadBrainCoralBlock, Material.DeadBrainCoralFan, @@ -1189,9 +1287,28 @@ namespace MinecraftClient.Mapping Material.DeadTubeCoralFan, Material.DeadTubeCoralWallFan, Material.Deepslate, + Material.DeepslateBrickSlab, + Material.DeepslateBrickStairs, + Material.DeepslateBrickWall, + Material.DeepslateBricks, + Material.DeepslateCoalOre, + Material.DeepslateCopperOre, + Material.DeepslateDiamondOre, + Material.DeepslateEmeraldOre, + Material.DeepslateGoldOre, + Material.DeepslateIronOre, + Material.DeepslateLapisOre, + Material.DeepslateRedstoneOre, + Material.DeepslateTileSlab, + Material.DeepslateTileStairs, + Material.DeepslateTileWall, + Material.DeepslateTiles, Material.DiamondBlock, Material.DiamondOre, Material.Diorite, + Material.DioriteSlab, + Material.DioriteStairs, + Material.DioriteWall, Material.Dispenser, Material.DripstoneBlock, Material.Dropper, @@ -1199,12 +1316,29 @@ namespace MinecraftClient.Mapping Material.EmeraldOre, Material.EnchantingTable, Material.EndStone, + Material.EndStoneBrickSlab, + Material.EndStoneBrickStairs, + Material.EndStoneBrickWall, Material.EndStoneBricks, + Material.ExposedChiseledCopper, + Material.ExposedCopper, + Material.ExposedCopperBulb, + Material.ExposedCopperChest, + Material.ExposedCopperGrate, + Material.ExposedCopperTrapdoor, + Material.ExposedCutCopper, + Material.ExposedCutCopperSlab, + Material.ExposedCutCopperStairs, + Material.ExposedLightningRod, Material.FireCoralBlock, Material.Furnace, + Material.GildedBlackstone, Material.GoldBlock, Material.GoldOre, Material.Granite, + Material.GraniteSlab, + Material.GraniteStairs, + Material.GraniteWall, Material.GrayConcrete, Material.GrayGlazedTerracotta, Material.GrayTerracotta, @@ -1222,6 +1356,7 @@ namespace MinecraftClient.Mapping Material.Jigsaw, Material.LapisBlock, Material.LapisOre, + Material.LavaCauldron, Material.LightBlueConcrete, Material.LightBlueGlazedTerracotta, Material.LightBlueTerracotta, @@ -1238,11 +1373,21 @@ namespace MinecraftClient.Mapping Material.MagentaTerracotta, Material.MagmaBlock, Material.MossyCobblestone, + Material.MossyCobblestoneSlab, + Material.MossyCobblestoneStairs, + Material.MossyCobblestoneWall, + Material.MossyStoneBrickSlab, + Material.MossyStoneBrickStairs, + Material.MossyStoneBrickWall, Material.MossyStoneBricks, Material.MudBrickSlab, + Material.MudBrickStairs, + Material.MudBrickWall, Material.MudBricks, Material.NetherBrickFence, Material.NetherBrickSlab, + Material.NetherBrickStairs, + Material.NetherBrickWall, Material.NetherBricks, Material.NetherGoldOre, Material.NetherQuartzOre, @@ -1253,49 +1398,103 @@ namespace MinecraftClient.Mapping Material.OrangeConcrete, Material.OrangeGlazedTerracotta, Material.OrangeTerracotta, + Material.OxidizedChiseledCopper, + Material.OxidizedCopper, + Material.OxidizedCopperBulb, + Material.OxidizedCopperChest, + Material.OxidizedCopperGrate, + Material.OxidizedCopperTrapdoor, + Material.OxidizedCutCopper, + Material.OxidizedCutCopperSlab, + Material.OxidizedCutCopperStairs, + Material.OxidizedLightningRod, Material.PetrifiedOakSlab, Material.PinkConcrete, Material.PinkGlazedTerracotta, Material.PinkTerracotta, Material.PolishedAndesite, + Material.PolishedAndesiteSlab, + Material.PolishedAndesiteStairs, Material.PolishedBasalt, + Material.PolishedBlackstone, + Material.PolishedBlackstoneBrickSlab, + Material.PolishedBlackstoneBrickStairs, + Material.PolishedBlackstoneBrickWall, + Material.PolishedBlackstoneBricks, + Material.PolishedBlackstoneSlab, + Material.PolishedBlackstoneStairs, + Material.PolishedBlackstoneWall, + Material.PolishedDeepslate, + Material.PolishedDeepslateSlab, + Material.PolishedDeepslateStairs, + Material.PolishedDeepslateWall, Material.PolishedDiorite, + Material.PolishedDioriteSlab, + Material.PolishedDioriteStairs, Material.PolishedGranite, + Material.PolishedGraniteSlab, + Material.PolishedGraniteStairs, + Material.PolishedTuff, + Material.PolishedTuffSlab, + Material.PolishedTuffStairs, + Material.PolishedTuffWall, + Material.PowderSnowCauldron, Material.Prismarine, Material.PrismarineBrickSlab, + Material.PrismarineBrickStairs, Material.PrismarineBricks, Material.PrismarineSlab, + Material.PrismarineStairs, + Material.PrismarineWall, Material.PurpleConcrete, Material.PurpleGlazedTerracotta, Material.PurpleTerracotta, Material.PurpurBlock, Material.PurpurPillar, Material.PurpurSlab, + Material.PurpurStairs, Material.QuartzBlock, + Material.QuartzBricks, Material.QuartzPillar, Material.QuartzSlab, + Material.QuartzStairs, Material.RawCopperBlock, Material.RawGoldBlock, Material.RawIronBlock, Material.RedConcrete, Material.RedGlazedTerracotta, + Material.RedNetherBrickSlab, + Material.RedNetherBrickStairs, + Material.RedNetherBrickWall, Material.RedNetherBricks, Material.RedSandstone, Material.RedSandstoneSlab, + Material.RedSandstoneStairs, + Material.RedSandstoneWall, Material.RedTerracotta, Material.RedstoneBlock, Material.RedstoneOre, Material.RepeatingCommandBlock, Material.ResinBrickSlab, + Material.ResinBrickStairs, Material.ResinBrickWall, Material.ResinBricks, Material.RespawnAnchor, Material.Sandstone, Material.SandstoneSlab, + Material.SandstoneStairs, + Material.SandstoneWall, 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.Snow, @@ -1303,18 +1502,75 @@ namespace MinecraftClient.Mapping Material.Spawner, Material.Stone, Material.StoneBrickSlab, + Material.StoneBrickStairs, + Material.StoneBrickWall, Material.StoneBricks, Material.StoneSlab, + Material.StoneStairs, Material.Stonecutter, Material.StructureBlock, Material.Terracotta, Material.TubeCoralBlock, Material.Tuff, + Material.TuffBrickSlab, + Material.TuffBrickStairs, + Material.TuffBrickWall, + Material.TuffBricks, + Material.TuffSlab, + Material.TuffStairs, + Material.TuffWall, Material.WarpedNylium, + Material.WaterCauldron, + Material.WaxedChiseledCopper, + Material.WaxedCopperBlock, + Material.WaxedCopperBulb, + Material.WaxedCopperChest, + Material.WaxedCopperGrate, + Material.WaxedCopperTrapdoor, + Material.WaxedCutCopper, Material.WaxedCutCopperSlab, + Material.WaxedCutCopperStairs, + Material.WaxedExposedChiseledCopper, + Material.WaxedExposedCopper, + Material.WaxedExposedCopperBulb, + Material.WaxedExposedCopperChest, + Material.WaxedExposedCopperGrate, + Material.WaxedExposedCopperTrapdoor, + Material.WaxedExposedCutCopper, Material.WaxedExposedCutCopperSlab, + Material.WaxedExposedCutCopperStairs, + Material.WaxedExposedLightningRod, + Material.WaxedLightningRod, + Material.WaxedOxidizedChiseledCopper, + Material.WaxedOxidizedCopper, + Material.WaxedOxidizedCopperBulb, + Material.WaxedOxidizedCopperChest, + Material.WaxedOxidizedCopperGrate, + Material.WaxedOxidizedCopperTrapdoor, + Material.WaxedOxidizedCutCopper, Material.WaxedOxidizedCutCopperSlab, + Material.WaxedOxidizedCutCopperStairs, + Material.WaxedOxidizedLightningRod, + Material.WaxedWeatheredChiseledCopper, + Material.WaxedWeatheredCopper, + Material.WaxedWeatheredCopperBulb, + Material.WaxedWeatheredCopperChest, + Material.WaxedWeatheredCopperGrate, + Material.WaxedWeatheredCopperTrapdoor, + Material.WaxedWeatheredCutCopper, Material.WaxedWeatheredCutCopperSlab, + Material.WaxedWeatheredCutCopperStairs, + Material.WaxedWeatheredLightningRod, + Material.WeatheredChiseledCopper, + Material.WeatheredCopper, + Material.WeatheredCopperBulb, + Material.WeatheredCopperChest, + Material.WeatheredCopperGrate, + Material.WeatheredCopperTrapdoor, + Material.WeatheredCutCopper, + Material.WeatheredCutCopperSlab, + Material.WeatheredCutCopperStairs, + Material.WeatheredLightningRod, Material.WhiteConcrete, Material.WhiteGlazedTerracotta, Material.WhiteTerracotta, diff --git a/MinecraftClient/Mapping/MiningCalculator.cs b/MinecraftClient/Mapping/MiningCalculator.cs index 6f49fd4a..458057f2 100644 --- a/MinecraftClient/Mapping/MiningCalculator.cs +++ b/MinecraftClient/Mapping/MiningCalculator.cs @@ -16,6 +16,15 @@ namespace MinecraftClient.Mapping /// public static class MiningCalculator { + public sealed class MiningOptions + { + public static readonly MiningOptions Vanilla = new(); + + public bool ApplyEfficiencyEnchantments { get; init; } = true; + + public bool ApplyHasteEffects { get; init; } = true; + } + /// /// Compute the number of ticks required to break a block in survival mode. /// Returns 0 for instant-break blocks, -1 for unbreakable blocks. @@ -37,8 +46,10 @@ namespace MinecraftClient.Mapping Dictionary playerAttributes, bool isUnderwater, bool isOnGround, - int protocolVersion) + int protocolVersion, + MiningOptions? options = null) { + options ??= MiningOptions.Vanilla; float hardness = BlockHardness.GetHardness(blockMaterial); if (hardness < 0) @@ -49,7 +60,7 @@ namespace MinecraftClient.Mapping float destroySpeed = GetDestroySpeed( blockMaterial, heldItem, helmetItem, effects, playerAttributes, - isUnderwater, isOnGround, protocolVersion); + isUnderwater, isOnGround, protocolVersion, options); bool correctTool = HasCorrectToolForDrops(blockMaterial, heldItem, protocolVersion); int divisor = correctTool ? 30 : 100; @@ -73,18 +84,22 @@ namespace MinecraftClient.Mapping Dictionary playerAttributes, bool isUnderwater, bool isOnGround, - int protocolVersion) + int protocolVersion, + MiningOptions options) { float speed = GetToolSpeed(blockMaterial, heldItem, protocolVersion); - if (speed > 1.0f) + if (speed > 1.0f && options.ApplyEfficiencyEnchantments) { speed += GetEfficiencyBonus(heldItem, playerAttributes, protocolVersion); } - int digSpeedAmplifier = GetDigSpeedAmplifier(effects); - if (digSpeedAmplifier >= 0) - speed *= 1.0f + (digSpeedAmplifier + 1) * 0.2f; + if (options.ApplyHasteEffects) + { + int digSpeedAmplifier = GetDigSpeedAmplifier(effects); + if (digSpeedAmplifier >= 0) + speed *= 1.0f + (digSpeedAmplifier + 1) * 0.2f; + } // Mining Fatigue if (effects.TryGetValue(Effects.MiningFatigue, out var fatigueData)) diff --git a/MinecraftClient/McClient.cs b/MinecraftClient/McClient.cs index 6d89f219..cde3ad55 100644 --- a/MinecraftClient/McClient.cs +++ b/MinecraftClient/McClient.cs @@ -2875,7 +2875,8 @@ namespace MinecraftClient /// Location of block to dig /// Also perform the "arm swing" animation /// Also look at the block before digging - public bool DigBlock(Location location, Direction blockFace, bool swingArms = true, bool lookAtBlock = true, double duration = 0) + public bool DigBlock(Location location, Direction blockFace, bool swingArms = true, bool lookAtBlock = true, + double duration = 0, MiningCalculator.MiningOptions? miningOptions = null) { // TODO select best face from current player location @@ -2883,7 +2884,8 @@ namespace MinecraftClient return false; if (InvokeRequired) - return InvokeOnMainThread(() => DigBlock(location, blockFace, swingArms, lookAtBlock, duration)); + return InvokeOnMainThread(() => DigBlock(location, blockFace, swingArms, lookAtBlock, duration, + miningOptions)); lock (DigLock) { @@ -2898,10 +2900,12 @@ namespace MinecraftClient UpdateLocation(GetCurrentLocation(), location); // Auto-compute dig duration for survival/adventure mode when not explicitly supplied + bool autoComputedDuration = false; if (duration <= 0 && protocolversion >= Protocol18Handler.MC_1_8_Version && gamemode is 0 or 2) // Survival or Adventure { - duration = ComputeAutoDigDuration(location); + autoComputedDuration = true; + duration = ComputeAutoDigDuration(location, miningOptions); } // Send dig start and dig end, will need to wait for server response to know dig result @@ -2909,6 +2913,9 @@ namespace MinecraftClient bool result = handler.SendPlayerDigging(0, location, blockFace, sequenceId++) && (!swingArms || DoAnimation((int)Hand.MainHand)); + if (autoComputedDuration && duration <= 0) + return result; + if (duration <= 0) result &= handler.SendPlayerDigging(2, location, blockFace, sequenceId++); else @@ -2926,7 +2933,7 @@ namespace MinecraftClient /// enchantments, effects, attributes, and player state. /// Returns 0 for instant-break blocks. /// - private double ComputeAutoDigDuration(Location location) + private double ComputeAutoDigDuration(Location location, MiningCalculator.MiningOptions? miningOptions = null) { try { @@ -2954,16 +2961,49 @@ namespace MinecraftClient playerAttributes, playerPhysics.InWater, playerPhysics.OnGround, - protocolversion); + protocolversion, + miningOptions); - if (ticks <= 0) + if (ticks < 0) + return -1; + + if (ticks == 0) return 0; return (double)ticks / Settings.ClientTicksPerSecond; } catch { - return 0; + return ComputeConservativeAutoDigDuration(location); + } + } + + private double ComputeConservativeAutoDigDuration(Location location) + { + try + { + Block block = world.GetBlock(location); + if (block.Type == Material.Air) + return 0; + + int ticks = MiningCalculator.ComputeDigTicks( + blockMaterial: block.Type, + heldItem: null, + helmetItem: null, + effects: new(), + playerAttributes: new(), + isUnderwater: playerPhysics.InWater, + isOnGround: playerPhysics.OnGround, + protocolVersion: protocolversion); + + if (ticks < 0) + return -1; + + return ticks == 0 ? 1.0 : (double)ticks / Settings.ClientTicksPerSecond; + } + catch + { + return 1.0; } } diff --git a/MinecraftClient/Resources/ConfigComments/ConfigComments.Designer.cs b/MinecraftClient/Resources/ConfigComments/ConfigComments.Designer.cs index fe4b188b..64f83f4a 100644 --- a/MinecraftClient/Resources/ConfigComments/ConfigComments.Designer.cs +++ b/MinecraftClient/Resources/ConfigComments/ConfigComments.Designer.cs @@ -394,6 +394,24 @@ namespace MinecraftClient { } } + /// + /// Looks up a localized string similar to Apply Efficiency enchantment speed when AutoDig computes mining time. Disable this for strict anti-cheat compatibility.. + /// + internal static string ChatBot_AutoDig_Apply_Efficiency_Enchantments { + get { + return ResourceManager.GetString("ChatBot.AutoDig.Apply_Efficiency_Enchantments", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Apply Haste and Conduit Power speed effects when AutoDig computes mining time. Disable this for strict anti-cheat compatibility.. + /// + internal static string ChatBot_AutoDig_Apply_Haste_Effects { + get { + return ResourceManager.GetString("ChatBot.AutoDig.Apply_Haste_Effects", resourceCulture); + } + } + /// /// Looks up a localized string similar to Mining a block for more than "Dig_Timeout" seconds will be considered a timeout.. /// diff --git a/MinecraftClient/Resources/ConfigComments/ConfigComments.resx b/MinecraftClient/Resources/ConfigComments/ConfigComments.resx index d18c32be..75879f54 100644 --- a/MinecraftClient/Resources/ConfigComments/ConfigComments.resx +++ b/MinecraftClient/Resources/ConfigComments/ConfigComments.resx @@ -242,6 +242,12 @@ For the naming of the block, please see https://mccteam.github.io/r/block/#L15 Automatically switch to the appropriate tool. + + Apply Efficiency enchantment speed when AutoDig computes mining time. Disable this for strict anti-cheat compatibility. + + + Apply Haste and Conduit Power speed effects when AutoDig computes mining time. Disable this for strict anti-cheat compatibility. + Mining a block for more than "Dig_Timeout" seconds will be considered a timeout. diff --git a/MinecraftClient/Scripting/ChatBot.cs b/MinecraftClient/Scripting/ChatBot.cs index c8d20edb..83824281 100644 --- a/MinecraftClient/Scripting/ChatBot.cs +++ b/MinecraftClient/Scripting/ChatBot.cs @@ -1154,9 +1154,10 @@ namespace MinecraftClient.Scripting /// Also perform the "arm swing" animation /// Also look at the block before digging /// Dig duration in seconds. 0 = auto-compute for survival, or instant for creative - protected bool DigBlock(Location location, Direction direction, bool swingArms = true, bool lookAtBlock = true, double duration = 0) + protected bool DigBlock(Location location, Direction direction, bool swingArms = true, bool lookAtBlock = true, + double duration = 0, MiningCalculator.MiningOptions? miningOptions = null) { - return Handler.DigBlock(location, direction, swingArms, lookAtBlock, duration); + return Handler.DigBlock(location, direction, swingArms, lookAtBlock, duration, miningOptions); } /// diff --git a/docs/guide/chat-bots.md b/docs/guide/chat-bots.md index 1baceafe..b094018a 100644 --- a/docs/guide/chat-bots.md +++ b/docs/guide/chat-bots.md @@ -763,6 +763,34 @@ redirectFrom: - **Default:** `false` + #### `Apply_Efficiency_Enchantments` + + - **Description:** + + Include Efficiency enchantments when Auto Dig calculates how long it should wait before finishing a block break. + + Disable this if a server's anti-cheat expects slower mining timing. This only changes MCC's timing calculation; it does not remove the enchantment from your tool. + + - **Available values:** `true` and `false` + + - **Type:** `boolean` + + - **Default:** `true` + + #### `Apply_Haste_Effects` + + - **Description:** + + Include Haste and Conduit Power effects when Auto Dig calculates how long it should wait before finishing a block break. + + Disable this if a server's anti-cheat does not allow the faster timing. This only changes MCC's timing calculation; it does not remove the effect from your player. + + - **Available values:** `true` and `false` + + - **Type:** `boolean` + + - **Default:** `true` + #### `Durability_Limit` - **Description:** diff --git a/tools/verify_mining_data.py b/tools/verify_mining_data.py new file mode 100644 index 00000000..ce2ad6bc --- /dev/null +++ b/tools/verify_mining_data.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +"""Verify representative mining hardness and tool-requirement data.""" + +from __future__ import annotations + +import re +from pathlib import Path + + +REPO_ROOT = Path(__file__).resolve().parents[1] +BLOCK_HARDNESS = REPO_ROOT / "MinecraftClient" / "Mapping" / "BlockHardness.cs" + +EXPECTED_HARDNESS = { + "AcaciaLog": 2.0, + "Bedrock": -1.0, + "Cobblestone": 2.0, + "CopperOre": 3.0, + "CutCopper": 3.0, + "DeepslateBricks": 3.5, + "Stone": 1.5, + "StoneButton": 0.5, + "Torch": 0.0, + "WaxedCutCopperStairs": 3.0, +} + +EXPECTED_REQUIRES_TOOL = { + "AcaciaLog": False, + "CopperOre": True, + "CutCopper": True, + "DeepslateBricks": True, + "Stone": True, + "StoneButton": False, + "WaxedCutCopperStairs": True, +} + + +def parse_hardness(source: str) -> dict[str, float]: + return { + material: float(value) + for material, value in re.findall( + r"\{\s*Material\.([A-Za-z0-9_]+),\s*(-?[0-9]+(?:\.[0-9]+)?)f\s*\}", + source, + ) + } + + +def parse_requires_tool(source: str) -> set[str]: + set_match = re.search( + r"RequiresCorrectToolSet\s*=\s*new HashSet\s*\{(?P.*?)\}\.ToFrozenSet\(\)", + source, + re.S, + ) + if set_match is None: + raise AssertionError("Could not find RequiresCorrectToolSet") + + return set(re.findall(r"Material\.([A-Za-z0-9_]+)", set_match.group("body"))) + + +def main() -> int: + source = BLOCK_HARDNESS.read_text() + hardness = parse_hardness(source) + requires_tool = parse_requires_tool(source) + + failures: list[str] = [] + + for material, expected in EXPECTED_HARDNESS.items(): + actual = hardness.get(material) + if actual != expected: + failures.append(f"{material} hardness: expected {expected}, got {actual}") + + for material, expected in EXPECTED_REQUIRES_TOOL.items(): + actual = material in requires_tool + if actual != expected: + failures.append(f"{material} requires tool: expected {expected}, got {actual}") + + if failures: + print("Mining data verification failed:") + for failure in failures: + print(f" - {failure}") + return 1 + + print("Mining data verification passed.") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())