Module:LootChest
Revision as of 04:04, 12 April 2021 by Planks>Underfell Flowey
Documentation for this module may be created at Module:LootChest/doc
local p = { calc_average_amount_this_item_per_pool = function( min_stacksize, max_stacksize, min_pool_rolls, max_pool_rolls, item_weight, pool_total_item_weight ) local avg_stacksize = ( min_stacksize + max_stacksize ) / 2 local avg_rolls = ( min_pool_rolls + max_pool_rolls ) / 2 return avg_stacksize * avg_rolls * item_weight / pool_total_item_weight end, calc_chance_any_of_this_item_per_pool = function( min_pool_rolls, max_pool_rolls, item_weight, pool_total_item_weight ) local inverse_result = 0 -- 1 - inverse_result = return value local inverse_item_weight = pool_total_item_weight - item_weight -- will be used for the division in the for loop to avoid the slightly -- less performant math.pow(). The divisor already includes the probability -- of picking any specific number of rolls. local cur_dividend = inverse_item_weight local cur_divisor = pool_total_item_weight * (max_pool_rolls - min_pool_rolls + 1) for i = 1, max_pool_rolls do if i >= min_pool_rolls then inverse_result = inverse_result + cur_dividend / cur_divisor end cur_dividend = cur_dividend * inverse_item_weight -- simulate pow cur_divisor = cur_divisor * pool_total_item_weight -- simulate pow end return 1 - inverse_result end, java = "''[[Java Edition]]''[[Category:Java Edition specific information]]", ['java-upcoming'] = "[[Java Edition 1.17]]<sup>[''[[Planned versions#Java Edition|upcoming]]'']</sup>[[Category:Java Edition specific information]]", bedrock = "[[Bedrock Edition]][[Category:Bedrock Edition specific information]]", ['bedrock-upcoming'] = "[[Bedrock Edition 1.17.0]]<sup>[''[[Planned versions#Bedrock Edition|upcoming]]'']</sup>[[Category:Bedrock Edition specific information]]", -- These 'items' define which sprite, label and link to use in the table. -- Properties 'cannot_stack', 'preserve_case', and 'plural' describe how to display the single-item summary in p.base2. -- Order within this 'items' list doesn't matter. items = { ["acacia-log"] = { "block", link="Log" }, ["acacia-sapling"] = { "block", link="Sapling" }, ["activator-rail"] = { "block" }, ["ancient-debris"] = { "block", plural=false }, ["apple"] = { "item" }, ["arrow"] = { "item" }, ["bamboo"] = { "item", plural=false }, ["barrel"] = { "block" }, ["basalt"] = { "block", plural=false }, ["beetroot"] = { "item" }, ["beetroot-seeds"] = { "item", plural=false }, ["beetroot-soup"] = { "item", plural=false, cannot_stack=true }, ["bell"] = { "block" }, ["birch-log"] = { "block", link="Log" }, ["birch-sapling"] = { "block", link="Sapling" }, ["black-wool"] = { "block", link="Wool", plural=false }, ["block-of-gold"] = { "block", plural="blocks of gold" }, ["block-of-iron"] = { "block", plural="blocks of iron" }, ["blue-ice"] = { "block", plural=false }, ["bone"] = { "item" }, ["bone-block"] = { "block" }, ["book"] = { "item" }, ["book-and-quill"] = { "item", plural=false, title="Book and Quill" }, ["bottle-o'-enchanting"] = { "item", title="Bottle o' Enchanting", plural="bottles o' enchanting" }, ["bread"] = { "item", plural=false }, ["brown-mushroom"] = { "block", link="Mushroom" }, ["brown-wool"] = { "block", link="Wool", plural=false }, ["bucket"] = { "item" }, ["buried-treasure-map"] = { "item", link="Explorer Map" }, ["cactus"] = { "block", plural=false }, ["cake"] = { "block", plural=false }, ["carrot"] = { "item" }, ["chain"] = { "block" }, ["chainmail-boots"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["chainmail-chestplate"] = { "item", link="Armor", cannot_stack=true }, ["chainmail-helmet"] = { "item", link="Armor", cannot_stack=true }, ["chainmail-leggings"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["clay"] = { "item", link="Clay (ball)", plural=false }, ["clock"] = { "item" }, ["coal"] = { "item", plural=false }, ["cocoa-beans"] = { "item", plural=false }, ["cooked-cod"] = { "item", plural=false}, ["cooked-porkchop"] = { "item" }, ["cooked-salmon"] = { "item", plural=false}, ["compass"] = { "item" }, ["crimson-fungus"] = { "block", link="Fungus", plural= "crimson fungi" }, ["crimson-nylium"] = { "block", link="Nylium", plural=false}, ["crimson-roots"] = { "block", link="Roots", plural=false}, ["crossbow"] = { "item", cannot_stack=true }, ["crying-obsidian"] = { "block" }, ["dandelion"] = { "block", link="Flower" }, ["dark-oak-log"] = { "block", link="Log" }, ["dark-oak-sapling"] = { "block", link="Sapling" }, ["dead-bush"] = { "block", link="Dead Bush" }, ["detector-rail"] = { "block" }, ["diamond"] = { "item" }, ["diamond-boots"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["diamond-chestplate"] = { "item", link="Armor", cannot_stack=true }, ["diamond-helmet"] = { "item", link="Armor", cannot_stack=true }, ["diamond-hoe"] = { "item", link="Hoe", cannot_stack=true }, ["diamond-horse-armor"] = { "item", link="Horse Armor", cannot_stack=true, plural=false }, ["diamond-leggings"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["diamond-shovel"] = { "item", link="Shovel", cannot_stack=true }, ["diamond-sword"] = { "item", link="Sword", cannot_stack=true }, ["disc-13"] = { "item", id='music-disc-13', title="Music Disc (13)", link="Music Disc", cannot_stack=true, plural=false }, ["disc-cat"] = { "item", id='music-disc-cat',title="Music Disc (Cat)", link="Music Disc", cannot_stack=true, plural=false }, ["disc-mellohi"] = { "item", id='music-disc-mellohi',title="Music Disc (Mellohi)", link="Music Disc", cannot_stack=true, plural=false }, ["disc-pigstep"] = { "item", id='music-disc-pigstep', title = "Music Disc (Pigstep)", link="Music Disc", cannot_stack=true, plural=false }, ["disc-wait"] = { "item", id='music-disc-wait',title="Music Disc (Wait)", link="Music Disc", cannot_stack=true, plural=false }, ["egg"] = { "item" }, ["emerald"] = { "item" }, ["empty-map"] = { "item", link="Map", title="Empty Map" }, ["enchanted-book"] = { "item", id='enchanted-book', title="Enchanted Book", link="Enchanted Book", cannot_stack=true, note="enchant-with-levels-30" }, ["enchanted-book-rnd"] = { "item", id='enchanted-book', title="Enchanted Book", link="Enchanted Book", cannot_stack=true, note="enchant-randomly" }, ["enchanted-book-rnd-soul-speed"] = { "item", id='enchanted-book', title="Enchanted Book", link="Enchanted Book", cannot_stack=true, note="enchant-randomly-soul-speed" }, ["enchanted-fishing-rod"] = { "item", id="fishing-rod", link="Fishing Rod", cannot_stack=true, note="enchant-randomly" }, ["enchanted-golden-apple"] = { "item" }, ["ender-pearl"] = { "item" }, ["feather"] = { "item" }, ["fern"] = { "block", link="Grass" }, ["fire-charge"] = { "item" }, ["flint"] = { "item", plural=false }, ["flint-and-steel"] = { "item", cannot_stack=true, plural=false }, ["flower-pot"] = { "item" }, ["furnace"] = { "block" }, ["gilded-blackstone"] = { "block", plural=false }, ["glistering-melon-slice"] = { "item" }, ["glowstone"] = { "block" }, ["glow-berries"] = { "item", plural=false }, ["golden-apple"] = { "item" }, ["golden-boots"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["golden-carrot"] = { "item" }, ["golden-chestplate"] = { "item", link="Armor", cannot_stack=true }, ["golden-helmet"] = { "item", link="Armor", cannot_stack=true }, ["golden-hoe"] = { "item", link="Hoe", cannot_stack=true }, ["golden-horse-armor"] = { "item", link="Horse Armor", cannot_stack=true, plural=false }, ["golden-leggings"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["golden-sword"] = { "item", link="Sword", cannot_stack=true }, ["gold-ingot"] = { "item" }, ["gold-nugget"] = { "item" }, ["grass"] = { "block", link="Grass", plural=false }, ["gray-wool"] = { "block", link="Wool", plural=false }, ["green-dye"] = { "item", link="Dye", plural=false }, ["gunpowder"] = { "item", plural=false }, ["heart-of-the-sea"] = { "item", plural=false, link="Heart of the Sea" }, ["ink-sac"] = { "item" }, ["iron-boots"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["iron-chestplate"] = { "item", link="Armor", cannot_stack=true }, ["iron-helmet"] = { "item", link="Armor", cannot_stack=true }, ["iron-horse-armor"] = { "item", link="Horse Armor", cannot_stack=true, plural=false }, ["iron-ingot"] = { "item" }, ["iron-leggings"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["iron-nugget"] = { "item" }, ["iron-pickaxe"] = { "item", link="Pickaxe", cannot_stack=true }, ["iron-shovel"] = { "item", link="Shovel", cannot_stack=true }, ["iron-sword"] = { "item", link="Sword", cannot_stack=true }, ["jungle-log"] = { "block", link="Log" }, ["jungle-sapling"] = { "block", link="Sapling" }, ["lapis-lazuli"] = { "item", plural=false }, ["large-fern"] = { "block", link="Grass" }, ["lead"] = { "item" }, ["leather"] = { "item", plural=false }, ["leather-boots"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["leather-cap"] = { "item", link="Armor", cannot_stack=true }, ["leather-pants"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["leather-tunic"] = { "item", link="Armor", cannot_stack=true }, ["light-gray-wool"] = { "block", link="Wool", plural=false }, ["light-weighted-pressure-plate"] = { "block", link="Pressure Plate" }, ["lodestone"] = { "block" }, ["melon-seeds"] = { "item", plural=false }, ["magma-cream"] = { "item", plural=false }, ["magma-block"] = { "block" }, ["moss-block"] = { "block" }, ["name-tag"] = { "item" }, ["netherite-boots"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["netherite-chestplate"] = { "item", link="Armor", cannot_stack=true }, ["netherite-helmet"] = { "item", link="Armor", cannot_stack=true }, ["netherite-ingot"] = { "item" }, ["netherite-leggings"] = { "item", link="Armor", cannot_stack=true, plural=false }, ["netherite-scrap"] = { "item" }, ["nether-wart"] = { "item", plural=false }, ["nether-quartz"] = { "item", plural=false }, ["oak-log"] = { "block", link="Log" }, ["oak-planks"] = { "block", link="Planks", id="oak-wood-planks", plural=false }, ["oak-sapling"] = { "block", link="Sapling" }, ["oak-sign"] = { "item", link="Sign" }, ["obsidian"] = { "block", plural=false }, ["paper"] = { "item", plural=false }, ["poisonous-potato"] = { "item", plural="poisonous potatoes" }, ["polished-basalt"] = { "block", plural=false }, ["poppy"] = { "block", link="Flower", plural="poppies" }, ["potato"] = { "item", plural="potatoes" }, ["potion-of-regeneration"] = { "item", link="Potion", title="Potion of Regeneration", plural=false, preserve_case=true }, ["potion-of-water-breathing"] = { "item", link="Potion", title="Potion of Water Breathing", plural=false, preserve_case=true }, ["powered-rail"] = { "block", title="Powered Rail", plural=false }, ["prismarine-crystals"] = { "item", plural=false }, ["pumpkin"] = { "block" }, ["pumpkin-pie"] = { "item", plural=false }, ["pumpkin-seeds"] = { "item", plural=false }, ["rail"] = { "block", title="Rails", plural=false }, ["raw-beef"] = { "item", link="Raw Beef", plural=false }, ["raw-cod"] = { "item", link="Raw Cod", plural=false }, ["raw-mutton"] = { "item", link="Raw Mutton", plural=false }, ["raw-porkchop"] = { "item", link="Raw Porkchop" }, ["raw-salmon"] = { "item", link="Raw Salmon", plural=false }, ["redstone"] = { "item", id="redstone-dust", title="Redstone Dust", plural=false }, ["rotten-flesh"] = { "item", plural=false }, ["saddle"] = { "item", cannot_stack=true }, ["sand"] = { "block", plural=false }, ["shears"] = { "item", plural=false, cannot_stack=true }, ["smooth-stone"] = { "block", plural=false }, ["snowball"] = { "item", link="Snowball" }, ["snow-block"] = { "block", link="Snow Block" }, ["snout-banner-pattern"] = { "item", id="banner-pattern", link="Banner Pattern", cannot_stack=true }, ["soul-sand"] = { "block" }, ["spectral-arrow"] = { "item" }, ["spider-eye"] = { "item" }, ["spruce-log"] = { "block", link="Log" }, ["spruce-sapling"] = { "block", link="Sapling" }, ["spruce-sign"] = { "item", link="Sign" }, ["stick"] = { "item" }, ["stone"] = { "block", plural=false }, ["stone-axe"] = { "item", link="Axe", cannot_stack=true }, ["stone-bricks"] = { "block", plural=false }, ["stone-pickaxe"] = { "item", link="Pickaxe", cannot_stack=true }, ["string"] = { "item", plural=false }, ["suspicious-stew"] = { "item", plural=false, note="suspicious-stew" }, ["sweet-berries"] = { "item", plural=false }, ["tall-grass"] = { "block", plural=false, link="Grass" }, ["tnt"] = { "block", title="TNT", plural=false, preserve_case=true }, ["torch"] = { "block" }, ["tripwire-hook"] = { "block" }, ["water-bucket"] = { "item", cannot_stack=true }, ["wheat"] = { "item", plural=false }, ["wheat-seeds"] = { "item", plural=false }, ["white-wool"] = { "block", link="Wool", plural=false }, ["wooden-axe"] = { "item", link="Axe", cannot_stack=true }, ["wooden-hoe"] = { "item", link="Hoe", cannot_stack=true }, ["wooden-pickaxe"] = { "item", link="Pickaxe", cannot_stack=true }, ["yellow-dye"] = { "item", link="Dye", plural=false }, ["map"] = { "item", link="Map", note="map" }, ["damaged-random-enchanted-netherite-axe"] = { "item", id="netherite-axe", title="Damaged Enchanted Netherite Axe", link="Axe", note="enchant-randomly", note1="damaged-0.15-0.85", cannot_stack=true }, ["damaged-netherite-boots"] = { "item", id="netherite-boots", link="Armor", note="damaged-0.2-0.65", cannot_stack=true, plural=false}, ["damaged-level-enchanted-netherite-boots"] = { "item", id="netherite-boots", title="Damaged Enchanted Netherite Boots", link="Armor", note="enchant-with-levels-5-20", note1="damaged-0.2-0.65", cannot_stack=true, plural=false }, ["damaged-random-enchanted-netherite-boots"] = { "item", id="netherite-boots", title="Damaged Enchanted Netherite Boots", link="Armor", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true, plural=false }, ["damaged-netherite-chestplate"] = { "item", id="netherite-chestplate", link="Armor", note="damaged-0.2-0.65", cannot_stack=true}, ["damaged-level-enchanted-netherite-chestplate"] = { "item", id="netherite-chestplate", title="Damaged Enchanted Netherite Chestplate", link="Armor", note="enchant-with-levels-5-20", note1="damaged-0.2-0.65", cannot_stack=true }, ["damaged-random-enchanted-netherite-chestplate"] = { "item", id="netherite-chestplate", title="Damaged Enchanted Netherite Chestplate", link="Armor", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true }, ["damaged-netherite-helmet"] = { "item", id="netherite-helmet", link="Armor", note="damaged-0.2-0.65", cannot_stack=true}, ["damaged-random-enchanted-netherite-hoe"] = { "item", id="netherite-hoe", title="Damaged Enchanted Netherite Hoe", link="Hoe", note="enchant-randomly", note1="damaged-0.1-0.95", cannot_stack=true }, ["damaged-level-enchanted-netherite-helmet"] = { "item", id="netherite-helmet", title="Damaged Enchanted Netherite Helmet", link="Armor", note="enchant-with-levels-5-20", note1="damaged-0.2-0.65", cannot_stack=true }, ["damaged-random-enchanted-netherite-helmet"] = { "item", id="netherite-helmet", title="Damaged Enchanted Netherite Helmet", link="Armor", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true }, ["damaged-netherite-leggings"] = { "item", id="netherite-leggings", link="Armor", note="damaged-0.2-0.65", cannot_stack=true, plural=false}, ["damaged-level-enchanted-netherite-leggings"] = { "item", id="netherite-leggings", title="Damaged Enchanted Netherite Leggings", link="Armor", note="enchant-with-levels-5-20", note1="damaged-0.2-0.65", cannot_stack=true, plural=false }, ["damaged-random-enchanted-netherite-leggings"] = { "item", id="netherite-leggings", title="Damaged Enchanted Netherite Leggings", link="Armor", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true, plural=false }, ["damaged-random-enchanted-netherite-pickaxe"] = { "item", id="netherite-pickaxe", title="Damaged Enchanted Netherite Pickaxe", link="Pickaxe", note="enchant-randomly", note1="damaged-0.1-0.95", cannot_stack=true }, ["damaged-random-enchanted-netherite-shovel"] = { "item", id="netherite-shovel", title="Damaged Enchanted Netherite Shovel", link="Shovel", note="enchant-randomly", note1="damaged-0.15-0.45", cannot_stack=true}, ["damaged-netherite-sword"] = { "item", id="netherite-sword", link="Sword", note="damaged-0.2-0.65", cannot_stack=true}, ["damaged-level-enchanted-netherite-sword"] = { "item", id="netherite-sword", title="Damaged Enchanted Netherite Sword", link="Sword", note="enchant-with-levels-5-20", note1="damaged-0.2-0.65", cannot_stack=true }, ["damaged-random-enchanted-netherite-sword"] = { "item", id="netherite-sword", title="Damaged Enchanted Netherite Sword", link="Sword", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true }, ["damaged-diamond-boots"] = { "item", id="diamond-boots", link="Armor", note="damaged-0.2-0.65", cannot_stack=true, plural=false}, ["level-enchanted-diamond-boots"] = { "item", id="diamond-boots", title="Enchanted Diamond Boots", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true, plural=false }, ["damaged-random-enchanted-diamond-boots"] = { "item", id="diamond-boots", title="Damaged Enchanted Diamond Boots", link="Armor", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true, plural=false }, ["damaged-random-enchanted-diamond-boots-2"] = { "item", id="diamond-boots", title="Damaged Enchanted Diamond Boots", link="Armor", note="enchant-randomly", note1="damaged-0.8-1.0", cannot_stack=true, plural=false }, ["damaged-diamond-chestplate"] = { "item", id="diamond-chestplate", link="Armor", note="damaged-0.2-0.65", cannot_stack=true}, ["level-enchanted-diamond-chestplate"] = { "item", id="diamond-chestplate", title="Enchanted Diamond Chestplate", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true }, ["damaged-random-enchanted-diamond-chestplate"] = { "item", id="diamond-chestplate", title="Damaged Enchanted Diamond Chestplate", link="Armor", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true }, ["damaged-random-enchanted-diamond-chestplate-2"] = { "item", id="diamond-chestplate", title="Damaged Enchanted Diamond Chestplate", link="Armor", note="enchant-randomly", note1="damaged-0.8-1.0", cannot_stack=true }, ["damaged-diamond-helmet"] = { "item", id="diamond-helmet", link="Armor", note="damaged-0.2-0.65", cannot_stack=true}, ["level-enchanted-diamond-helmet"] = { "item", id="diamond-helmet", title="Enchanted Diamond Helmet", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true }, ["damaged-random-enchanted-diamond-helmet"] = { "item", id="diamond-helmet", title="Damaged Enchanted Diamond Helmet", link="Armor", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true }, ["damaged-random-enchanted-diamond-helmet-2"] = { "item", id="diamond-helmet", title="Damaged Enchanted Diamond Helmet", link="Armor", note="enchant-randomly", note1="damaged-0.8-1.0", cannot_stack=true }, ["damaged-diamond-leggings"] = { "item", id="diamond-leggings", link="Armor", note="damaged-0.2-0.65", cannot_stack=true, plural=false}, ["level-enchanted-diamond-leggings"] = { "item", id="diamond-leggings", title="Enchanted Diamond Leggings", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true, plural=false }, ["damaged-random-enchanted-diamond-leggings"] = { "item", id="diamond-leggings", title="Damaged Enchanted Diamond Leggings", link="Armor", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true, plural=false }, ["damaged-random-enchanted-diamond-leggings-2"] = { "item", id="diamond-leggings", title="Damaged Enchanted Diamond Leggings", link="Armor", note="enchant-randomly", note1="damaged-0.8-1.0", cannot_stack=true, plural=false }, ["level-enchanted-diamond-pickaxe"] = { "item", id="diamond-pickaxe", title="Enchanted Diamond Pickaxe", link="Pickaxe", note="enchant-with-levels-20-39", cannot_stack=true }, ["random-enchanted-diamond-pickaxe"] = { "item", id="diamond-pickaxe", title="Enchanted Diamond Pickaxe", link="Pickaxe", note="enchant-randomly", cannot_stack=true, }, ["damaged-random-enchanted-diamond-pickaxe"] = { "item", id="diamond-pickaxe", title="Enchanted Diamond Pickaxe", link="Pickaxe", note="enchant-randomly", note1="damaged-0.15-0.95", cannot_stack=true }, ["level-enchanted-diamond-shovel"] = { "item", id="diamond-shovel", title="Enchanted Diamond Shovel", link="Shovel", note="enchant-with-levels-20-39", cannot_stack=true }, ["damaged-random-enchanted-diamond-shovel"] = { "item", id="diamond-shovel", title="Damaged Enchanted Diamond Shovel", link="Shovel", note="enchant-randomly", note1="damaged-0.15-0.45", cannot_stack=true}, ["damaged-random-enchanted-diamond-shovel-2"] = { "item", id="diamond-shovel", title="Damaged Enchanted Diamond Shovel", link="Shovel", note="enchant-randomly", note1="damaged-0.15-0.8", cannot_stack=true}, ["damaged-diamond-sword"] = { "item", id="diamond-sword", link="Sword", note="damaged-0.2-0.65", cannot_stack=true}, ["level-enchanted-diamond-sword"] = { "item", id="diamond-sword", title="Enchanted Diamond Sword", link="Sword", note="enchant-with-levels-20-39", cannot_stack=true }, ["damaged-random-enchanted-diamond-sword"] = { "item", id="diamond-sword", title="Damaged Enchanted Diamond Sword", link="Sword", note="enchant-randomly", note1="damaged-0.2-0.65", cannot_stack=true }, ["damaged-random-enchanted-diamond-sword-2"] = { "item", id="diamond-sword", title="Damaged Enchanted Diamond Sword", link="Sword", note="enchant-randomly", note1="damaged-0.8-1.0", cannot_stack=true }, ["level-enchanted-iron-boots"] = { "item", id="iron-boots", title="Enchanted Iron Boots", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true, plural=false }, ["level-enchanted-iron-chestplate"] = { "item", id="iron-chestplate", title="Enchanted Iron Chestplate", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true }, ["level-enchanted-iron-helmet"] = { "item", id="iron-helmet", title="Enchanted Iron Helmet", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true }, ["level-enchanted-iron-leggings"] = { "item", id="iron-leggings", title="Enchanted Iron Leggings", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true, plural=false }, ["level-enchanted-iron-pickaxe"] = { "item", id="iron-pickaxe", title="Enchanted Iron Pickaxe", link="Pickaxe", note="enchant-with-levels-20-39", cannot_stack=true }, ["level-enchanted-iron-shovel"] = { "item", id="iron-shovel", title="Enchanted Iron Shovel", link="Shovel", note="enchant-with-levels-20-39", cannot_stack=true }, ["level-enchanted-iron-sword"] = { "item", id="iron-sword", title="Enchanted Iron Sword", link="Sword", note="enchant-with-levels-20-39", cannot_stack=true }, ["damaged-random-enchanted-iron-sword"] = { "item", id="iron-sword", title="Damaged Enchanted Iron Sword", link="Sword", note="enchant-randomly", note1="damaged-0.1-0.9", cannot_stack=true }, ["random-enchanted-golden-axe"] = { "item", id="golden-axe", title="Enchanted Golden Axe", link="Axe", note="enchant-randomly", cannot_stack=true }, ["level-enchanted-golden-boots"] = { "item", id="golden-boots", title="Enchanted Golden Boots", link="Armor", note="enchant-with-levels-5-15", cannot_stack=true, plural=false }, ["random-enchanted-golden-boots"] = { "item", id="golden-boots", title="Enchanted Golden Boots", link="Armor", note="enchant-randomly", cannot_stack=true, plural=false }, ["soul-speed-enchanted-golden-boots"] = { "item", id="golden-boots", title="Enchanted Golden Boots with Soul Speed", link="Armor", note="enchant-randomly-soul-speed", cannot_stack=true, plural=false }, ["level-enchanted-golden-chestplate"] = { "item", id="golden-chestplate", title="Enchanted Golden Chestplate", link="Armor", note="enchant-with-levels-5-15", cannot_stack=true }, ["random-enchanted-golden-chestplate"] = { "item", id="golden-chestplate", title="Enchanted Golden Chestplate", link="Armor", note="enchant-randomly", cannot_stack=true }, ["level-enchanted-golden-helmet"] = { "item", id="golden-helmet", title="Enchanted Golden Helmet", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true }, ["random-enchanted-golden-helmet"] = { "item", id="golden-helmet", title="Enchanted Golden Helmet", link="Armor", note="enchant-randomly", cannot_stack=true }, ["level-enchanted-golden-hoe"] = { "item", id="golden-hoe", title="Enchanted Golden Hoe", link="Hoe", note="enchant-with-levels-20-39", cannot_stack=true }, ["random-enchanted-golden-hoe"] = { "item", id="golden-hoe", title="Enchanted Golden Hoe", link="Hoe", note="enchant-randomly", cannot_stack=true }, ["level-enchanted-golden-leggings"] = { "item", id="golden-leggings", title="Enchanted Golden Leggings", link="Armor", note="enchant-with-levels-20-39", cannot_stack=true, plural=false }, ["random-enchanted-golden-leggings"] = { "item", id="golden-leggings", title="Enchanted Golden Leggings", link="Armor", note="enchant-randomly", cannot_stack=true, plural=false }, ["random-enchanted-golden-pickaxe"] = { "item", id="golden-pickaxe", title="Enchanted Golden Pickaxe", link="Pickaxe", note="enchant-randomly", cannot_stack=true }, ["random-enchanted-golden-shovel"] = { "item", id="golden-shovel", title="Enchanted Golden Shovel", link="Shovel", note="enchant-randomly", cannot_stack=true }, ["random-enchanted-golden-sword"] = { "item", id="golden-sword", title="Enchanted Golden Sword", link="Sword", note="enchant-randomly", cannot_stack=true }, ["random-enchanted-leather-boots"] = { "item", id="leather-boots", title="Enchanted Leather Boots", link="Armor", note="enchant-randomly", cannot_stack=true, plural=false }, ["random-enchanted-leather-cap"] = { "item", id="leather-cap", title="Enchanted Leather Cap", link="Armor", note="enchant-randomly", cannot_stack=true }, ["random-enchanted-leather-pants"] = { "item", id="leather-pants", title="Enchanted Leather Pants", link="Armor", note="enchant-randomly", cannot_stack=true, plural=false }, ["random-enchanted-leather-tunic"] = { "item", id="leather-tunic", title="Enchanted Leather Tunic", link="Armor", note="enchant-randomly", cannot_stack=true }, ["damaged-level-enchanted-crossbow"] = { "item", id="crossbow", title="Damaged Enchanted Crossbow", link="Crossbow", note="enchant-with-levels-20-25", note1="damaged-0.05-0.15", cannot_stack=true }, ["damaged-random-enchanted-crossbow"] = { "item", id="crossbow", title="Damaged Enchanted Crossbow", link="Crossbow", note="enchant-randomly", note1="damaged-0.1-0.5", cannot_stack=true }, ["damaged-random-enchanted-crossbow-2"] = { "item", id="crossbow", title="Damaged Enchanted Crossbow", link="Crossbow", note="enchant-randomly", note1="damaged-0.1-0.9", cannot_stack=true }, ["empty"] = { "block", id="air", link='', title='Nothing', plural=false, note="nothing" }, -- Items for bonus-barrel from Java Edition 3D Shareware v1.34 ["level-enchanted-bow"] = { "item", id="bow", title="Enchanted Bow", link="Bow", note="enchant-with-levels-1-30-no-treasure", cannot_stack=true }, ["random-effect-arrow"] = { "item", id="bow", title="Arrow", link="Arrow", note="random-effect-arrow" }, ["random-effect-tipped-arrow"] = { "item", id="tipped-arrow", title="Random Tipped Arrow", link="Arrow", note="random-effect" }, ["random-effect-potion"] = { "item", id="potion", title="Random Potion", link="Arrow", note="random-effect" }, ["random-effect-splash-potion"] = { "item", id="splash-potion", title="Random Splash Potion", link="Arrow", note="random-effect" }, ["random-effect-lingering-potion"] = { "item", id="lingering-potion", title="Random Lingering Potion", link="Arrow", note="random-effect" }, ["level-enchanted-leather-tunic"] = { "item", id="leather-tunic", title="Enchanted Leather Tunic", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-leather-boots"] = { "item", id="leather-boots", title="Enchanted Leather Boots", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-leather-cap"] = { "item", id="leather-cap", title="Enchanted Leather Cap", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-leather-pants"] = { "item", id="leather-pants", title="Enchanted Leather Pants", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-iron-chestplate-2"] = { "item", id="iron-chestplate", title="Enchanted Iron Chestplate", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-iron-boots-2"] = { "item", id="iron-boots", title="Enchanted Iron Boots", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-iron-helmet-2"] = { "item", id="iron-helmet", title="Enchanted Iron Helmet", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-iron-leggings-2"] = { "item", id="iron-leggings", title="Enchanted Iron Leggings", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-diamond-chestplate-2"] = { "item", id="diamond-chestplate", title="Enchanted Diamond Chestplate", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-diamond-boots-2"] = { "item", id="diamond-boots", title="Enchanted Diamond Boots", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-diamond-helmet-2"] = { "item", id="diamond-helmet", title="Enchanted Diamond Helmet", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-diamond-leggings-2"] = { "item", id="diamond-leggings", title="Enchanted Diamond Leggings", link="Armor", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-stone-sword"] = { "item", id="stone-sword", title="Enchanted Stone Sword", link="Sword", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-iron-sword-2"] = { "item", id="iron-sword", title="Enchanted Iron Sword", link="Sword", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["level-enchanted-diamond-sword-2"] = { "item", id="diamond-sword", title="Enchanted Diamond Sword", link="Sword", note="enchant-with-levels-5-10-no-treasure", cannot_stack=true }, ["random-enchanted-crossbow"] = { "item", id="crossbow", title="BFC9000", link="Crossbow", note="enchant-randomly-multishot", cannot_stack=true }, ["blue-key"] = { "item" }, ["yellow-key"] = { "item" }, ["red-key"] = { "item" }, }, notes = { ["enchant-randomly"] = "All enchantments are equally probable, ''including'' [[treasure enchantment]]s (except [[Soul Speed]]), and any level of the enchantment is equally probable.", ["enchant-randomly-soul-speed"] = "Enchanted with a random level of [[Soul Speed]].", ["enchant-with-levels-5-15"] = "Enchantment probabilities are the same as a level-5 to level-15 [[enchantment mechanics|enchantment]] would be on an [[enchantment table]] that was able to apply [[treasure enchantment]]s (except [[Soul Speed]]), and where the chance of multiple enchantments is not reduced.", ["enchant-with-levels-5-20"] = "Enchantment probabilities are the same as a level-5 to level-20 [[enchantment mechanics|enchantment]] would be on an [[enchantment table]] that was able to apply [[treasure enchantment]]s (except [[Soul Speed]]), and where the chance of multiple enchantments is not reduced.", ["enchant-with-levels-20-25"] = "Enchantment probabilities are the same as a level-20 to level-25 [[enchantment mechanics|enchantment]] would be on an [[enchantment table]] that was able to apply [[treasure enchantment]]s (except [[Soul Speed]]), and where the chance of multiple enchantments is not reduced.", ["enchant-with-levels-20-25"] = "Enchantment probabilities are the same as a level-20 to level-25 [[enchantment mechanics|enchantment]] would be on an [[enchantment table]] that was able to apply [[treasure enchantment]]s (except [[Soul Speed]]), and where the chance of multiple enchantments is not reduced.", ["enchant-with-levels-20-39"] = "Enchantment probabilities are the same as a level-20 to level-39 [[enchantment mechanics|enchantment]] would be on an [[enchantment table]] that had no cap at level 30, and that was able to apply [[treasure enchantment]]s (except [[Soul Speed]]), and where the chance of multiple enchantments is not reduced.", ["enchant-with-levels-30"] = "Enchantment probabilities are the same as a level-30 enchantment on an [[enchantment table]] that was able to apply [[treasure enchantment]]s (except [[Soul Speed]]), and where the chance of multiple enchantments is not reduced.", ["damaged-0.05-0.15"] = "The item has between 5% and 15% of its total durability.", ["damaged-0.1-0.5"] = "The item has between 10% and 50% of its total durability.", ["damaged-0.1-0.9"] = "The item has between 10% and 90% of its total durability.", ["damaged-0.1-0.95"] = "The item has between 10% and 95% of its total durability.", ["damaged-0.15-0.45"] = "The item has between 15% and 45% of its total durability.", ["damaged-0.15-0.8"] = "The item has between 15% and 80% of its total durability.", ["damaged-0.15-0.85"] = "The item has between 15% and 85% of its total durability.", ["damaged-0.15-0.95"] = "The item has between 15% and 95% of its total durability.", ["damaged-0.2-0.65"] = "The item has between 20% and 65% of its total durability.", ["damaged-0.8-1.0"] = "The item has between 80% and 100% of its total durability.", ["nothing"] = "'Nothing' does not refer to the chance of an empty chest. Instead, it refers to the chance that the random loot generator does not add any loot ''on a single roll''.", ["suspicious-stew"] = "The stew grants one of the following effects: 5–7 seconds of [[Blindness]], 7–10 seconds of [[Jump Boost]], 7-10 seconds of [[Night Vision]], 10–20 seconds of [[Poison]], 0.3-0.35 seconds of [[Saturation]], or 6–8 seconds of [[Weakness]].", ["map"] = "Named unknown map, but changed to map 0, the scale level is 1:4, Maps from the same stack are stackable, but maps that are not stacked are unstackable despite looking identical.", -- Notes for bonus-barrel from Java Edition 3D Shareware v1.34 ["enchant-with-levels-5-10-no-treasure"] = "Enchantment probabilities are the same as a level-5 to level-10 [[enchantment mechanics|enchantment]] would be on an [[enchantment table]] where the chance of multiple enchantments is not reduced.", ["enchant-with-levels-10-20-no-treasure"] = "Enchantment probabilities are the same as a level-10 to level-20 [[enchantment mechanics|enchantment]] would be on an [[enchantment table]] where the chance of multiple enchantments is not reduced.", ["enchant-with-levels-1-30-no-treasure"] = "Enchantment probabilities are the same as a level-1 to level-30 [[enchantment mechanics|enchantment]] would be on an [[enchantment table]] where the chance of multiple enchantments is not reduced.", ["random-effect"] = "The item has a random [[effect]] applied, including empty (uncraftable), water, mundane, thick, or awkward.", ["random-effect-arrow"] = "The arrow has an ineffective hidden [[effect]] applied, including empty, water, mundane, thick, or awkward. As it is not a tipped arrow, this has no effect except make it unstackable with arrows that do not match the hidden effect. The effect applied can be seen with {{cmd|data get entity @s}}.", ["enchant-randomly-multishot"] = "Any level between 1 and 12 of [[Multishot]] is equally probable.", }, -- <ref group='FN' name='enchant-randomly'> -- NOTE: order here doesn't matter. -- * in the table, chests are sorted in alphabetical order -- * in the table, items are sorted by chance, then by avg#, then alphabetically. -- * If poolsJavaUpcoming is omitted, poolsJava is used. To omit a pool entirely, set it to {}. -- * If the loot is the same on both editions, use the same loot table twice. chests = { ["shipwreck-map"] = { -- shipwreck_map.json in Java and shipwreck.json in Bedrock header = "Map", superheader = "[[Shipwreck]]", link = "[[shipwreck]] map", structure = "Shipwreck", container = "Map chest", structID = "shipwreck", poolsJava = { { rolls = {1,1}, items = { ["buried-treasure-map"] = {1,1,1}, } }, { rolls = {3,3}, items = { ["compass"] = {1,1,1}, ["empty-map"] = {1,1,1}, ["clock"] = {1,1,1}, ["paper"] = {1,10,20}, ["feather"] = {1,5,10}, ["book"] = {1,5,5}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,1}, items = { ["buried-treasure-map"] = {1,1,1}, } }, { rolls = {3,3}, items = { ["compass"] = {1,1,1}, ["map"] = {1,1,1}, ["clock"] = {1,1,1}, ["paper"] = {1,10,20}, ["feather"] = {1,5,10}, ["book"] = {1,5,5}, } }, }, poolsBedrockUpcoming = {} }, ["shipwreck-supply"] = { -- shipwreck_supply.json in Java and shipwrecksupply.json in Bedrock header = "Supply", superheader = "[[Shipwreck]]", link = "[[shipwreck]] supply", structure = "Shipwreck", container = "Supply chest", structID = "shipwreck", poolsJava = { { rolls = {3,10}, items = { ["paper"] = {1,12,8}, ["potato"] = {2,6,7}, ["poisonous-potato"] = {2,6,7}, ["carrot"] = {4,8,7}, ["wheat"] = {8,21,7}, ["coal"] = {2,8,6}, ["rotten-flesh"] = {5,24,5}, ["bamboo"] = {1,3,2}, ["suspicious-stew"] = {1,1,10}, ["pumpkin"] = {1,3,2}, ["gunpowder"] = {1,5,3}, ["tnt"] = {1,2,1}, ["random-enchanted-leather-cap"] = {1,1,3}, ["random-enchanted-leather-tunic"] = {1,1,3}, ["random-enchanted-leather-pants"] = {1,1,3}, ["random-enchanted-leather-boots"] = {1,1,3}, } }, }, poolsJavaUpcoming = { { rolls = {3,10}, items = { ["paper"] = {1,12,8}, ["potato"] = {2,6,7}, ["moss-block"] = {1,4,7}, ["poisonous-potato"] = {2,6,7}, ["carrot"] = {4,8,7}, ["wheat"] = {8,21,7}, ["coal"] = {2,8,6}, ["rotten-flesh"] = {5,24,5}, ["bamboo"] = {1,3,2}, ["suspicious-stew"] = {1,1,10}, ["pumpkin"] = {1,3,2}, ["gunpowder"] = {1,5,3}, ["tnt"] = {1,2,1}, ["random-enchanted-leather-cap"] = {1,1,3}, ["random-enchanted-leather-tunic"] = {1,1,3}, ["random-enchanted-leather-pants"] = {1,1,3}, ["random-enchanted-leather-boots"] = {1,1,3}, } }, }, poolsBedrock = { { rolls = {3,10}, items = { ["paper"] = {1,12,8}, ["potato"] = {2,6,7}, ["poisonous-potato"] = {2,6,7}, ["carrot"] = {4,8,7}, ["wheat"] = {8,21,7}, ["coal"] = {2,8,6}, ["rotten-flesh"] = {5,24,5}, ["bamboo"] = {1,3,2}, ["suspicious-stew"] = {1,1,10}, ["pumpkin"] = {1,3,2}, ["gunpowder"] = {1,5,3}, ["tnt"] = {1,2,1}, ["random-enchanted-leather-cap"] = {1,1,3}, ["random-enchanted-leather-tunic"] = {1,1,3}, ["random-enchanted-leather-pants"] = {1,1,3}, ["random-enchanted-leather-boots"] = {1,1,3}, } }, }, poolsBedrockUpcoming = { { rolls = {3,10}, items = { ["paper"] = {1,12,8}, ["potato"] = {2,6,7}, ["poisonous-potato"] = {2,6,7}, ["moss-block"] = {1,4,7}, ["carrot"] = {4,8,7}, ["wheat"] = {8,21,7}, ["coal"] = {2,8,6}, ["rotten-flesh"] = {5,24,5}, ["bamboo"] = {1,3,2}, ["suspicious-stew"] = {1,1,10}, ["pumpkin"] = {1,3,2}, ["gunpowder"] = {1,5,3}, ["tnt"] = {1,2,1}, ["random-enchanted-leather-cap"] = {1,1,3}, ["random-enchanted-leather-tunic"] = {1,1,3}, ["random-enchanted-leather-pants"] = {1,1,3}, ["random-enchanted-leather-boots"] = {1,1,3}, } }, }, }, ["shipwreck-treasure"] = { -- shipwreck_treasure.json in Java and shipwrecktreasure.json in Bedrock header = "Treasure", superheader = "[[Shipwreck]]", link = "[[shipwreck]] treasure", structure = "Shipwreck", container = "Treasure chest", structID = "shipwreck", poolsJava = { { rolls = {3,6}, items = { ["iron-ingot"] = {1,5,90}, ["gold-ingot"] = {1,5,10}, ["emerald"] = {1,5,40}, ["diamond"] = {1,1,5}, ["bottle-o'-enchanting"] = {1,1,5}, } }, { rolls = {2,5}, items = { ["iron-nugget"] = {1,10,50}, ["gold-nugget"] = {1,10,10}, ["lapis-lazuli"] = {1,10,20}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {3,6}, items = { ["iron-ingot"] = {1,5,90}, ["gold-ingot"] = {1,5,10}, ["emerald"] = {1,5,40}, ["diamond"] = {1,1,5}, ["bottle-o'-enchanting"] = {1,1,5}, } }, { rolls = {2,5}, items = { ["iron-nugget"] = {1,10,50}, ["gold-nugget"] = {1,10,10}, ["lapis-lazuli"] = {1,10,20}, } }, }, poolsBedrockUpcoming = {} }, ["buried-treasure"] = { -- buried_treasure.json in Java and buriedtreasure.json in Bedrock header = "[[Buried treasure]]", link = "[[buried treasure]]", structure = "Buried treasure", container = "", structID = "buried-treasure", poolsJava = { { rolls = {1,1}, items = { ["heart-of-the-sea"] = {1,1,1}, } }, { rolls = {5,8}, items = { ["iron-ingot"] = {1,4,20}, ["gold-ingot"] = {1,4,10}, ["tnt"] = {1,2,5}, } }, { rolls = {1,4}, items = { ["emerald"] = {4,8,5}, ["diamond"] = {1,2,5}, ["prismarine-crystals"] = {1,5,5}, } }, { rolls = {0,1}, items = { ["leather-tunic"] = {1,1,1}, ["iron-sword"] = {1,1,1}, } }, { rolls = {2,2}, items = { ["cooked-cod"] = {2,4,1}, ["cooked-salmon"] = {2,4,1}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,1}, items = { ["heart-of-the-sea"] = {1,1,1}, } }, { rolls = {5,12}, items = { ["prismarine-crystals"] = {1,5,5}, ["iron-ingot"] = {3,5,20}, ["gold-ingot"] = {1,5,10}, ["tnt"] = {1,2,10}, ["diamond"] = {1,1,15}, ["disc-wait"] = {1,1,5}, ["disc-mellohi"] = {1,1,5}, ["name-tag"] = {1,1,10}, ["chainmail-chestplate"] = {1,1,20}, ["chainmail-helmet"] = {1,1,20}, ["chainmail-leggings"] = {1,1,20}, ["chainmail-boots"] = {1,1,20}, ["book-and-quill"] = {1,2,5}, ["lead"] = {1,3,10}, ["bottle-o'-enchanting"] = {1,1,3}, ["potion-of-water-breathing"] = {1,1,15}, ["potion-of-regeneration"] = {1,1,10}, ["cake"] = {1,1,1}, } }, }, poolsBedrockUpcoming = {} }, ["underwater-ruin-big"] = { -- underwater_ruin_big.json header = "Big", superheader = "[[Underwater ruins]]", link = "big [[underwater ruins]]", structure = "Underwater ruins", container = "Big ruins chest", structID = "underwater-ruins", poolsJava = { { rolls = {2,8}, items = { ["coal"] = {1,4,10}, ["gold-nugget"] = {1,3,10}, ["emerald"] = {1,1,1}, ["wheat"] = {2,3,10}, } }, { rolls = {1,1}, items = { ["golden-apple"] = {1,1,1}, ["enchanted-book-rnd"] = {1,1,5}, ["leather-tunic"] = {1,1,1}, ["golden-helmet"] = {1,1,1}, ["enchanted-fishing-rod"] = {1,1,5}, ["buried-treasure-map"] = {1,1,10}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,8}, items = { ["coal"] = {1,4,10}, ["gold-nugget"] = {1,3,10}, ["emerald"] = {1,1,1}, ["wheat"] = {2,3,10}, } }, { rolls = {1,1}, items = { ["golden-apple"] = {1,1,1}, ["enchanted-book-rnd"] = {1,1,5}, ["leather-tunic"] = {1,1,1}, ["golden-helmet"] = {1,1,1}, ["enchanted-fishing-rod"] = {1,1,5}, ["buried-treasure-map"] = {1,1,10}, } }, }, poolsBedrockUpcoming = {} }, ["underwater-ruin-small"] = { -- underwater_ruin_small.json header = "Small", superheader = "[[Underwater ruins]]", link = "small [[underwater ruins]]", structure = "Underwater ruins", container = "Small ruins chest", structID = "underwater-ruins", poolsJava = { { rolls = {2,8}, items = { ["coal"] = {1,4,10}, ["stone-axe"] = {1,1,2}, ["rotten-flesh"] = {1,1,5}, ["emerald"] = {1,1,1}, ["wheat"] = {2,3,10}, } }, { rolls = {1,1}, items = { ["leather-tunic"] = {1,1,1}, ["golden-helmet"] = {1,1,1}, ["enchanted-fishing-rod"] = {1,1,5}, ["buried-treasure-map"] = {1,1,5}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,8}, items = { ["coal"] = {1,4,10}, ["stone-axe"] = {1,1,2}, ["rotten-flesh"] = {1,1,5}, ["emerald"] = {1,1,1}, ["wheat"] = {2,3,10}, } }, { rolls = {1,1}, items = { ["leather-tunic"] = {1,1,1}, ["golden-helmet"] = {1,1,1}, ["enchanted-fishing-rod"] = {1,1,5}, ["buried-treasure-map"] = {1,1,5}, } }, }, poolsBedrockUpcoming = {} }, ["village-armorer"] = { -- village\village_armorer.json header = "Armorer", superheader = "[[Village]]", link = "[[village]] armorer", structure = "Village", container = "Armorer's chest", structID = "village", poolsJava = { { rolls = {1,5}, items = { ["iron-ingot"] = {1,3,2}, ["bread"] = {1,4,4}, ["iron-helmet"] = {1,1,1}, ["emerald"] = {1,1,1} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,5}, items = { ["iron-ingot"] = {1,3,2}, ["bread"] = {1,4,4}, ["iron-helmet"] = {1,1,1}, ["emerald"] = {1,1,1} } }, }, poolsBedrockUpcoming = {} }, ["village-butcher"] = { -- village\village_butcher.json header = "Butcher", superheader = "[[Village]]", link = "[[village]] butcher", structure = "Village", container = "Butcher's chest", structID = "village", poolsJava = { { rolls = {1,5}, items = { ["emerald"] = {1,1,1}, ["raw-porkchop"] = {1,3,6}, ["wheat"] = {1,3,6}, ["raw-beef"] = {1,3,6}, ["raw-mutton"] = {1,3,6}, ["coal"] = {1,3,3} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,5}, items = { ["emerald"] = {1,1,1}, ["raw-porkchop"] = {1,3,6}, ["wheat"] = {1,3,6}, ["raw-beef"] = {1,3,6}, ["raw-mutton"] = {1,3,6}, ["coal"] = {1,3,3} } }, }, poolsBedrockUpcoming = {} }, ["village-cartographer"] = { -- village\village_cartographer.json header = "Cartographer", superheader = "[[Village]]", link = "[[village]] cartographer", structure = "Village", container = "Cartographer's chest", structID = "village", poolsJava = { { rolls = {1,5}, items = { ["empty-map"] = {1,3,10}, ["paper"] = {1,5,15}, ["compass"] = {1,1,5}, ["bread"] = {1,4,15}, ["stick"] = {1,2,5} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,5}, items = { ["map"] = {1,3,10}, ["paper"] = {1,5,15}, ["compass"] = {1,1,5}, ["bread"] = {1,4,15}, ["oak-sapling"] = {1,2,5} } }, }, poolsBedrockUpcoming = {} }, ["village-fisherman"] = { -- village\village_fisher.json, Java-exclusive as of Java 1.14 / Bedrock 1.12 header = "Fisherman", superheader = "[[Village]]", link = "[[village]] fisherman", structure = "Village", container = "Fisherman's chest", structID = "village", poolsJava = { { rolls = {1,5}, items = { ["emerald"] = {1,1,1}, ["raw-cod"] = {1,3,2}, ["raw-salmon"] = {1,3,1}, ["water-bucket"] = {1,3,1}, ["barrel"] = {1,3,1}, ["wheat-seeds"] = {1,3,3}, ["coal"] = {1,3,2} } }, }, poolsJavaUpcoming = {}, poolsBedrock = {}, poolsBedrockUpcoming = {} }, ["village-fletcher"] = { -- village\village_fletcher.json header = "Fletcher", superheader = "[[Village]]", link = "[[village]] fletcher", structure = "Village", container = "Fletcher's chest", structID = "village", poolsJava = { { rolls = {1,5}, items = { ["emerald"] = {1,1,1}, ["arrow"] = {1,3,2}, ["feather"] = {1,3,6}, ["egg"] = {1,3,2}, ["flint"] = {1,3,6}, ["stick"] = {1,3,6} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,5}, items = { ["emerald"] = {1,1,1}, ["arrow"] = {1,3,2}, ["feather"] = {1,3,6}, ["egg"] = {1,3,2}, ["flint"] = {1,3,6}, ["stick"] = {1,3,6} } }, }, poolsBedrockUpcoming = {} }, ["village-mason"] = { -- village\village_mason.json header = "Mason", superheader = "[[Village]]", link = "[[village]] mason", structure = "Village", container = "Mason's chest", structID = "village", poolsJava = { { rolls = {1,5}, items = { ["clay"] = {1,3,1}, ["flower-pot"] = {1,1,1}, ["stone"] = {1,1,2}, ["stone-bricks"] = {1,1,2}, ["bread"] = {1,4,4}, ["yellow-dye"] = {1,1,1}, ["smooth-stone"] = {1,1,1}, ["emerald"] = {1,1,1} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,5}, items = { ["clay"] = {1,3,1}, ["flower-pot"] = {1,1,1}, ["stone"] = {1,1,2}, ["stone-bricks"] = {1,1,2}, ["bread"] = {1,4,4}, ["yellow-dye"] = {1,1,1}, ["smooth-stone"] = {1,1,1}, ["emerald"] = {1,1,1} } }, }, poolsBedrockUpcoming = {} }, ["village-shepherd"] = { -- village\village_shepherd.json header = "Shepherd", superheader = "[[Village]]", link = "[[village]] shepherd", structure = "Village", container = "Shepherd's chest", structID = "village", poolsJava = { { rolls = {1,5}, items = { ["white-wool"] = {1,8,6}, ["black-wool"] = {1,3,3}, ["gray-wool"] = {1,3,2}, ["brown-wool"] = {1,3,2}, ["light-gray-wool"] = {1,3,2}, ["emerald"] = {1,1,1}, ["shears"] = {1,1,1}, ["wheat"] = {1,6,6} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,5}, items = { ["white-wool"] = {1,8,6}, ["black-wool"] = {1,3,3}, ["gray-wool"] = {1,3,2}, ["brown-wool"] = {1,3,2}, ["light-gray-wool"] = {1,3,2}, ["emerald"] = {1,1,1}, ["shears"] = {1,1,1}, ["wheat"] = {1,6,6} } }, }, poolsBedrockUpcoming = {} }, ["village-tannery"] = { -- village\village_tannery.json header = "Tannery", superheader = "[[Village]]", link = "[[village]] tannery", structure = "Village", container = "Tanner's chest", structID = "village", poolsJava = { { rolls = {1,5}, items = { ["leather"] = {1,3,1}, ["leather-tunic"] = {1,1,2}, ["leather-boots"] = {1,1,2}, ["leather-cap"] = {1,1,2}, ["bread"] = {1,4,5}, ["leather-pants"] = {1,1,2}, ["saddle"] = {1,1,1}, ["emerald"] = {1,4,1} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,5}, items = { ["leather"] = {1,3,1}, ["leather-tunic"] = {1,1,2}, ["leather-boots"] = {1,1,2}, ["leather-cap"] = {1,1,2}, ["bread"] = {1,4,5}, ["leather-pants"] = {1,1,2}, ["saddle"] = {1,1,1}, ["emerald"] = {1,4,1} } }, }, poolsBedrockUpcoming = {} }, ["village-temple"] = { -- village\village_temple.json header = "Temple", superheader = "[[Village]]", link = "[[village]] temple", structure = "Village", container = "Temple chest", structID = "village", poolsJava = { { rolls = {3,8}, items = { ["redstone"] = {1,4,2}, ["bread"] = {1,4,7}, ["rotten-flesh"] = {1,4,7}, ["lapis-lazuli"] = {1,4,1}, ["gold-ingot"] = {1,4,1}, ["emerald"] = {1,4,1} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {3,8}, items = { ["redstone"] = {1,4,2}, ["bread"] = {1,4,7}, ["rotten-flesh"] = {1,4,7}, ["lapis-lazuli"] = {1,4,1}, ["gold-ingot"] = {1,4,1}, ["emerald"] = {1,4,1} } }, }, poolsBedrockUpcoming = {} }, ["village-toolsmith"] = { -- village\village_toolsmith.json header = "Toolsmith", superheader = "[[Village]]", link = "[[village]] toolsmith", structure = "Village", container = "Toolsmith's chest", structID = "village", poolsJava = { { rolls = {3,8}, items = { ["diamond"] = {1,3,1}, ["iron-ingot"] = {1,5,5}, ["gold-ingot"] = {1,3,1}, ["bread"] = {1,3,15}, ["iron-pickaxe"] = {1,1,5}, ["coal"] = {1,3,1}, ["stick"] = {1,3,20}, ["iron-shovel"] = {1,1,5} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {3,8}, items = { ["diamond"] = {1,3,1}, ["iron-ingot"] = {1,5,5}, ["gold-ingot"] = {1,3,1}, ["bread"] = {1,3,15}, ["iron-pickaxe"] = {1,1,5}, ["coal"] = {1,3,1}, ["stick"] = {1,3,20}, ["iron-shovel"] = {1,1,5} } }, }, poolsBedrockUpcoming = {} }, ["village-weaponsmith"] = { -- village\village_weaponsmith.json header = "Weaponsmith", superheader = "[[Village]]", link = "[[village]] weaponsmith", structure = "Village", container = "Weaponsmith's chest", structID = "village", poolsJava = { { rolls = {3,8}, items = { ["diamond"] = {1,3,3}, ["iron-ingot"] = {1,5,10}, ["gold-ingot"] = {1,3,5}, ["bread"] = {1,3,15}, ["apple"] = {1,3,15}, ["iron-pickaxe"] = {1,1,5}, ["iron-sword"] = {1,1,5}, ["iron-chestplate"] = {1,1,5}, ["iron-helmet"] = {1,1,5}, ["iron-leggings"] = {1,1,5}, ["iron-boots"] = {1,1,5}, ["obsidian"] = {3,7,5}, ["oak-sapling"] = {3,7,5}, ["saddle"] = {1,1,3}, ["iron-horse-armor"] = {1,1,1}, ["golden-horse-armor"] = {1,1,1}, ["diamond-horse-armor"] = {1,1,1} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {3,8}, items = { ["diamond"] = {1,3,3}, ["iron-ingot"] = {1,5,10}, ["gold-ingot"] = {1,3,5}, ["bread"] = {1,3,15}, ["apple"] = {1,3,15}, ["iron-pickaxe"] = {1,1,5}, ["iron-sword"] = {1,1,5}, ["iron-chestplate"] = {1,1,5}, ["iron-helmet"] = {1,1,5}, ["iron-leggings"] = {1,1,5}, ["iron-boots"] = {1,1,5}, ["obsidian"] = {3,7,5}, ["oak-sapling"] = {3,7,5}, ["saddle"] = {1,1,3}, ["iron-horse-armor"] = {1,1,1}, ["golden-horse-armor"] = {1,1,1}, ["diamond-horse-armor"] = {1,1,1} } }, }, poolsBedrockUpcoming = {} }, ["village-desert-house"] = { -- village\village_desert_house.json header = "Desert House", superheader = "[[Village]]", link = "desert [[village]] house", structure = "Village", container = "Desert house chest", structID = "village", poolsJava = { { rolls = {3,8}, items = { ["clay"] = {1,1,1}, ["green-dye"] = {1,1,1}, ["cactus"] = {1,4,10}, ["wheat"] = {1,7,10}, ["bread"] = {1,4,10}, ["book"] = {1,1,1}, ["dead-bush"] = {1,3,2}, ["emerald"] = {1,3,1} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {3,8}, items = { ["clay"] = {1,1,1}, ["green-dye"] = {1,1,1}, ["cactus"] = {1,4,10}, ["wheat"] = {1,7,10}, ["bread"] = {1,4,10}, ["book"] = {1,1,1}, ["dead-bush"] = {1,3,2}, ["emerald"] = {1,3,1} } }, }, poolsBedrockUpcoming = {} }, ["village-plains-house"] = { -- village\village_plains_house.json header = "Plains house", superheader = "[[Village]]", link = "plains [[village]] house", structure = "Village", container = "Plains house chest", structID = "village", poolsJava = { { rolls = {3,8}, items = { ["gold-nugget"] = {1,3,1}, ["dandelion"] = {1,1,2}, ["poppy"] = {1,1,1}, ["potato"] = {1,7,10}, ["bread"] = {1,4,10}, ["apple"] = {1,5,10}, ["book"] = {1,1,1}, ["feather"] = {1,1,1}, ["emerald"] = {1,4,2}, ["oak-sapling"] = {1,2,5} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {3,8}, items = { ["gold-nugget"] = {1,3,1}, ["dandelion"] = {1,1,2}, ["poppy"] = {1,1,1}, ["potato"] = {1,7,10}, ["bread"] = {1,4,10}, ["apple"] = {1,5,10}, ["book"] = {1,1,1}, ["feather"] = {1,1,1}, ["emerald"] = {1,4,2}, ["oak-sapling"] = {1,2,5} } }, }, poolsBedrockUpcoming = {} }, ["village-savanna-house"] = { -- village\village_savanna_house.json header = "Savanna house", superheader = "[[Village]]", link = "savanna [[village]] house", structure = "Village", container = "Savanna house chest", structID = "village", poolsJava = { { rolls = {3,8}, items = { ["gold-nugget"] = {1,3,1}, ["grass"] = {1,1,5}, ["tall-grass"] = {1,1,5}, ["bread"] = {1,4,10}, ["wheat-seeds"] = {1,5,10}, ["emerald"] = {1,4,2}, ["acacia-sapling"] = {1,2,10}, ["saddle"] = {1,1,1}, ["torch"] = {1,2,1}, ["bucket"] = {1,1,1} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {3,8}, items = { ["gold-nugget"] = {1,3,1}, ["grass"] = {1,1,5}, ["tall-grass"] = {1,1,5}, ["bread"] = {1,4,10}, ["wheat-seeds"] = {1,5,10}, ["emerald"] = {1,4,2}, ["acacia-sapling"] = {1,2,10}, ["saddle"] = {1,1,1}, ["torch"] = {1,2,1}, ["bucket"] = {1,1,1} } }, }, poolsBedrockUpcoming = {} }, ["village-snowy-house"] = { -- village\village_snowy_house.json header = "Snowy house", superheader = "[[Village]]", link = "snowy [[village]] house", structure = "Village", container = "Snowy house chest", structID = "village", poolsJava = { { rolls = {3,8}, items = { ["blue-ice"] = {1,1,1}, ["snow-block"] = {1,1,4}, ["potato"] = {1,7,10}, ["bread"] = {1,4,10}, ["beetroot-seeds"] = {1,5,10}, ["beetroot-soup"] = {1,1,1}, ["furnace"] = {1,1,1}, ["emerald"] = {1,4,1}, ["snowball"] = {1,7,10}, ["coal"] = {1,4,5} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {3,8}, items = { ["blue-ice"] = {1,1,1}, ["snow-block"] = {1,1,4}, ["potato"] = {1,7,10}, ["bread"] = {1,4,10}, ["beetroot-seeds"] = {1,5,10}, ["beetroot-soup"] = {1,1,1}, ["furnace"] = {1,1,1}, ["emerald"] = {1,4,1}, ["snowball"] = {1,7,10}, ["coal"] = {1,4,5} } }, }, poolsBedrockUpcoming = {} }, ["village-taiga-house"] = { -- village\village_taiga_house.json header = "Taiga house", superheader = "[[Village]]", link = "taiga [[village]] house", structure = "Village", container = "Taiga house chest", structID = "village", poolsJava = { { rolls = {3,8}, items = { ["iron-nugget"] = {1,5,1}, ["fern"] = {1,1,2}, ["large-fern"] = {1,1,2}, ["potato"] = {1,7,10}, ["sweet-berries"] = {1,7,5}, ["bread"] = {1,4,10}, ["pumpkin-seeds"] = {1,5,5}, ["pumpkin-pie"] = {1,1,1}, ["emerald"] = {1,4,2}, ["spruce-sapling"] = {1,5,5}, ["spruce-sign"] = {1,1,1}, ["spruce-log"] = {1,5,10} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {3,8}, items = { ["iron-nugget"] = {1,5,1}, ["fern"] = {1,1,2}, ["large-fern"] = {1,1,2}, ["potato"] = {1,7,10}, ["bread"] = {1,4,10}, ["pumpkin-seeds"] = {1,5,5}, ["pumpkin-pie"] = {1,1,1}, ["emerald"] = {1,4,2}, ["spruce-sapling"] = {1,5,5}, ["oak-sign"] = {1,1,1}, ["spruce-log"] = {1,5,10} } }, }, poolsBedrockUpcoming = {} }, ["stronghold-altar"] = { -- stronghold_corridor.json header = "Altar", superheader = "[[Stronghold]]", link = "[[stronghold]] altar", structure = "Stronghold", container = "Altar chest", structID = "stronghold", poolsJava = { { rolls = {2,3}, items = { ["ender-pearl"] = {1,1,10}, ["diamond"] = {1,3,3}, ["iron-ingot"] = {1,5,10}, ["gold-ingot"] = {1,3,5}, ["redstone"] = {4,9,5}, ["bread"] = {1,3,15}, ["apple"] = {1,3,15}, ["iron-pickaxe"] = {1,1,5}, ["iron-sword"] = {1,1,5}, ["iron-chestplate"] = {1,1,5}, ["iron-helmet"] = {1,1,5}, ["iron-leggings"] = {1,1,5}, ["iron-boots"] = {1,1,5}, ["golden-apple"] = {1,1,1}, ["saddle"] = {1,1,1}, ["iron-horse-armor"] = {1,1,1}, ["golden-horse-armor"] = {1,1,1}, ["diamond-horse-armor"] = {1,1,1}, ["enchanted-book"] = {1,1,1}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,3}, items = { ["ender-pearl"] = {1,1,50}, ["emerald"] = {1,3,15}, ["diamond"] = {1,3,15}, ["iron-ingot"] = {1,5,50}, ["gold-ingot"] = {1,3,25}, ["redstone"] = {4,9,25}, ["bread"] = {1,3,75}, ["apple"] = {1,3,75}, ["iron-pickaxe"] = {1,1,25}, ["iron-sword"] = {1,1,25}, ["iron-chestplate"] = {1,1,25}, ["iron-helmet"] = {1,1,25}, ["iron-leggings"] = {1,1,25}, ["iron-boots"] = {1,1,25}, ["golden-apple"] = {1,1,5}, ["saddle"] = {1,1,5}, ["iron-horse-armor"] = {1,1,5}, ["golden-horse-armor"] = {1,1,5}, ["diamond-horse-armor"] = {1,1,5}, ["enchanted-book"] = {1,1,6}, } }, }, poolsBedrockUpcoming = {} }, ["stronghold-library"] = { -- stronghold_library.json header = "Library", superheader = "[[Stronghold]]", link = "[[stronghold]] library", structure = "Stronghold", container = "Library chest", structID = "stronghold", poolsJava = { { rolls = {2,10}, items = { ["book"] = {1,3,20}, ["paper"] = {2,7,20}, ["empty-map"] = {1,1,1}, ["compass"] = {1,1,1}, ["enchanted-book"] = {1,1,10}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,10}, items = { ["book"] = {1,3,100}, ["paper"] = {2,7,100}, ["map"] = {1,1,5}, ["compass"] = {1,1,5}, ["enchanted-book"] = {1,1,60}, } }, }, poolsBedrockUpcoming = {} }, ["stronghold-storeroom"] = { -- stronghold_crossing.json header = "Storeroom", superheader = "[[Stronghold]]", link = "[[stronghold]] storeroom", structure = "Stronghold", container = "Storeroom chest", structID = "stronghold", poolsJava = { { rolls = {1,4}, items = { ["iron-ingot"] = {1,5,10}, ["gold-ingot"] = {1,3,5}, ["redstone"] = {4,9,5}, ["coal"] = {3,8,10}, ["bread"] = {1,3,15}, ["apple"] = {1,3,15}, ["iron-pickaxe"] = {1,1,1}, ["enchanted-book"] = {1,1,1}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,4}, items = { ["iron-ingot"] = {1,5,50}, ["gold-ingot"] = {1,3,25}, ["redstone"] = {4,9,25}, ["coal"] = {3,8,50}, ["bread"] = {1,3,75}, ["apple"] = {1,3,75}, ["iron-pickaxe"] = {1,1,5}, ["enchanted-book"] = {1,1,6}, ["ink-sac"] = {1,3,75}, } }, }, poolsBedrockUpcoming = {} }, ["bonus"] = { -- spawn_bonus_chest.json header = "[[Chest#Bonus chest|Bonus]]", link = "[[Chest#Bonus chest|bonus]]", structure = "Bonus chest", container = "", structID = "day", poolsJava = { { rolls = {1,1}, items = { ["stone-axe"] = {1,1,1}, ["wooden-axe"] = {1,1,3}, } }, { rolls = {1,1}, items = { ["stone-pickaxe"] = {1,1,1}, ["wooden-pickaxe"] = {1,1,3} } }, { rolls = {3,3}, items = { ["apple"] = {1,2,5}, ["bread"] = {1,2,3}, ["raw-salmon"] = {1,2,3}, } }, { rolls = {4,4}, items = { ["stick"] = {1,12,10}, ["oak-planks"] = {1,12,10}, ["oak-log"] = {1,3,3}, ["spruce-log"] = {1,3,3}, ["birch-log"] = {1,3,3}, ["jungle-log"] = {1,3,3}, ["acacia-log"] = {1,3,3}, ["dark-oak-log"] = {1,3,3}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,1}, items = { ["stone-axe"] = {1,1,1}, ["wooden-axe"] = {1,1,3}, } }, { rolls = {1,1}, items = { ["stone-pickaxe"] = {1,1,1}, ["wooden-pickaxe"] = {1,1,3} } }, { rolls = {1,1}, items = { ["apple"] = {1,2,1} } }, { rolls = {1,1}, items = { ["bread"] = {1,2,1} } }, { rolls = {1,1}, items = { ["raw-salmon"] = {1,2,1} } }, { rolls = {1,1}, items = { ["stick"] = {1,12,1} } }, { rolls = {1,1}, items = { ["oak-planks"] = {1,12,1} } }, { rolls = {1,1}, items = { ["dark-oak-log"] = {1,3,1}, ["acacia-log"] = {1,3,1}, } }, { rolls = {1,1}, items = { ["oak-log"] = {1,3,1}, ["spruce-log"] = {1,3,1}, ["birch-log"] = {1,3,1}, ["jungle-log"] = {1,3,1}, } }, { rolls = {1,1}, items = { ["potato"] = {1,2,3}, ["carrot"] = {1,2,3}, } }, { rolls = {1,1}, items = { ["oak-sapling"] = {4,4,2}, ["spruce-sapling"] = {4,4,2}, ["birch-sapling"] = {4,4,2}, ["jungle-sapling"] = {4,4,4}, ["dark-oak-sapling"] = {4,4,2}, ["acacia-sapling"] = {4,4,2}, } }, { rolls = {1,1}, items = { ["melon-seeds"] = {1,2,3}, ["pumpkin-seeds"] = {1,2,3}, ["beetroot-seeds"] = {1,2,3}, } }, { rolls = {1,1}, items = { ["cactus"] = {1,2,3}, ["cocoa-beans"] = {1,2,2}, } }, { rolls = {1,1}, items = { ["brown-mushroom"] = {1,2,2}, } }, }, poolsBedrockUpcoming = {} }, ["dungeon"] = { -- simple_dungeon.json header = "[[Dungeon]]", link = "[[dungeon]]", structure = "Dungeon", container = "", structID = "Dungeon", poolsJava = { { rolls = {1,3}, items = { ["saddle"] = {1,1,20}, ["golden-apple"] = {1,1,15}, ["enchanted-golden-apple"] = {1,1,2}, ["disc-13"] = {1,1,15}, ["disc-cat"] = {1,1,15}, ["name-tag"] = {1,1,20}, ["golden-horse-armor"] = {1,1,10}, ["iron-horse-armor"] = {1,1,15}, ["diamond-horse-armor"] = {1,1,5}, ["enchanted-book-rnd"] = {1,1,10}, } }, { rolls = {1,4}, items = { ["iron-ingot"] = {1,4,10}, ["gold-ingot"] = {1,4,5}, ["bread"] = {1,1,20}, ["wheat"] = {1,4,20}, ["bucket"] = {1,1,10}, ["redstone"] = {1,4,15}, ["coal"] = {1,4,15}, ["melon-seeds"] = {2,4,10}, ["pumpkin-seeds"] = {2,4,10}, ["beetroot-seeds"] = {2,4,10}, } }, { rolls = {3,3}, items = { ["bone"] = {1,8,10}, ["gunpowder"] = {1,8,10}, ["rotten-flesh"] = {1,8,10}, ["string"] = {1,8,10}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,3}, items = { ["saddle"] = {1,1,20}, ["golden-apple"] = {1,1,15}, ["enchanted-golden-apple"] = {1,1,2}, ["disc-13"] = {1,1,15}, ["disc-cat"] = {1,1,15}, ["name-tag"] = {1,1,20}, ["golden-horse-armor"] = {1,1,10}, ["iron-horse-armor"] = {1,1,15}, ["diamond-horse-armor"] = {1,1,5}, ["enchanted-book-rnd"] = {1,1,10}, } }, { rolls = {1,4}, items = { ["iron-ingot"] = {1,4,10}, ["gold-ingot"] = {1,4,5}, ["bread"] = {1,1,20}, ["wheat"] = {1,4,20}, ["bucket"] = {1,1,10}, ["redstone"] = {1,4,15}, ["coal"] = {1,4,15}, ["melon-seeds"] = {2,4,10}, ["pumpkin-seeds"] = {2,4,10}, ["beetroot-seeds"] = {2,4,10}, } }, { rolls = {3,3}, items = { ["bone"] = {1,8,10}, ["gunpowder"] = {1,8,10}, ["rotten-flesh"] = {1,8,10}, ["string"] = {1,8,10}, } }, }, poolsBedrockUpcoming = {} }, ["mineshaft"] = { -- abandoned_mineshaft.json chest_type = "minecart with chest", header = "[[Mineshaft]]", link = "[[Mineshaft]]s", structure = "Mineshaft", container = "", structID = "abandoned-mineshaft", poolsJava = { { rolls = {1,1}, items = { ["golden-apple"] = {1,1,20}, ["enchanted-golden-apple"] = {1,1,1}, ["name-tag"] = {1,1,30}, ["enchanted-book-rnd"] = {1,1,10}, ["iron-pickaxe"] = {1,1,5}, ["empty"] = {1,1,5}, } }, { rolls = {2,4}, items = { ["iron-ingot"] = {1,5,10}, ["gold-ingot"] = {1,3,5}, ["redstone"] = {4,9,5}, ["lapis-lazuli"] = {4,9,5}, ["diamond"] = {1,2,3}, ["coal"] = {3,8,10}, ["bread"] = {1,3,15}, ["melon-seeds"] = {2,4,10}, ["pumpkin-seeds"] = {2,4,10}, ["beetroot-seeds"] = {2,4,10}, } }, { rolls = {3,3}, items = { ["rail"] = {4,8,20}, ["powered-rail"] = {1,4,5}, ["detector-rail"] = {1,4,5}, ["activator-rail"] = {1,4,5}, ["torch"] = {1,16,15}, } }, }, poolsJavaUpcoming = { { rolls = {1,1}, items = { ["golden-apple"] = {1,1,20}, ["enchanted-golden-apple"] = {1,1,1}, ["name-tag"] = {1,1,30}, ["enchanted-book-rnd"] = {1,1,10}, ["iron-pickaxe"] = {1,1,5}, ["empty"] = {1,1,5}, } }, { rolls = {2,4}, items = { ["iron-ingot"] = {1,5,10}, ["gold-ingot"] = {1,3,5}, ["redstone"] = {4,9,5}, ["lapis-lazuli"] = {4,9,5}, ["diamond"] = {1,2,3}, ["coal"] = {3,8,10}, ["bread"] = {1,3,15}, ["glow-berries"] = {3,6,15}, ["melon-seeds"] = {2,4,10}, ["pumpkin-seeds"] = {2,4,10}, ["beetroot-seeds"] = {2,4,10}, } }, { rolls = {3,3}, items = { ["rail"] = {4,8,20}, ["powered-rail"] = {1,4,5}, ["detector-rail"] = {1,4,5}, ["activator-rail"] = {1,4,5}, ["torch"] = {1,16,15}, } }, }, poolsBedrock = { { rolls = {1,1}, items = { ["golden-apple"] = {1,1,20}, ["enchanted-golden-apple"] = {1,1,1}, ["name-tag"] = {1,1,30}, ["enchanted-book-rnd"] = {1,1,10}, ["iron-pickaxe"] = {1,1,5}, ["empty"] = {1,1,5}, } }, { rolls = {2,4}, items = { ["iron-ingot"] = {1,5,10}, ["gold-ingot"] = {1,3,5}, ["redstone"] = {4,9,5}, ["lapis-lazuli"] = {4,9,5}, ["diamond"] = {1,2,3}, ["coal"] = {3,8,10}, ["bread"] = {1,3,15}, ["melon-seeds"] = {2,4,10}, ["pumpkin-seeds"] = {2,4,10}, ["beetroot-seeds"] = {2,4,10}, } }, { rolls = {3,3}, items = { ["rail"] = {4,8,20}, ["powered-rail"] = {1,4,5}, ["detector-rail"] = {1,4,5}, ["activator-rail"] = {1,4,5}, ["torch"] = {1,16,15}, } }, }, poolsBedrockUpcoming = { { rolls = {1,1}, items = { ["golden-apple"] = {1,1,20}, ["enchanted-golden-apple"] = {1,1,1}, ["name-tag"] = {1,1,30}, ["enchanted-book-rnd"] = {1,1,10}, ["iron-pickaxe"] = {1,1,5}, ["empty"] = {1,1,5}, } }, { rolls = {2,4}, items = { ["iron-ingot"] = {1,5,10}, ["gold-ingot"] = {1,3,5}, ["redstone"] = {4,9,5}, ["lapis-lazuli"] = {4,9,5}, ["diamond"] = {1,2,3}, ["coal"] = {3,8,10}, ["bread"] = {1,3,15}, ["melon-seeds"] = {2,4,10}, ["pumpkin-seeds"] = {2,4,10}, ["beetroot-seeds"] = {2,4,10}, ["glow-berries"] = {3,6,15}, } }, { rolls = {3,3}, items = { ["rail"] = {4,8,20}, ["powered-rail"] = {1,4,5}, ["detector-rail"] = {1,4,5}, ["activator-rail"] = {1,4,5}, ["torch"] = {1,16,15}, } }, } }, ["nether-fortress"] = { -- nether_bridge.json header = "[[nether fortress]]", link = "[[nether fortress]]", structure = "Nether fortress", container = "", structID = "nether-fortress", poolsJava = { { rolls = {2,4}, items = { ["diamond"] = {1,3,5}, ["iron-ingot"] = {1,5,5}, ["gold-ingot"] = {1,3,15}, ["golden-sword"] = {1,1,5}, ["golden-chestplate"] = {1,1,5}, ["flint-and-steel"] = {1,1,5}, ["nether-wart"] = {3,7,5}, ["saddle"] = {1,1,10}, ["golden-horse-armor"] = {1,1,8}, ["iron-horse-armor"] = {1,1,5}, ["diamond-horse-armor"] = {1,1,3}, ["obsidian"] = {2,4,2}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,4}, items = { ["diamond"] = {1,3,5}, ["iron-ingot"] = {1,5,5}, ["gold-ingot"] = {1,3,15}, ["golden-sword"] = {1,1,5}, ["golden-chestplate"] = {1,1,5}, ["flint-and-steel"] = {1,1,5}, ["nether-wart"] = {3,7,5}, ["saddle"] = {1,1,10}, ["golden-horse-armor"] = {1,1,8}, ["iron-horse-armor"] = {1,1,5}, ["diamond-horse-armor"] = {1,1,3}, ["obsidian"] = {2,4,2}, } }, }, poolsBedrockUpcoming = {} }, ["desert-temple"] = { -- desert_pyramid.json header = "[[Desert temple]]", link = "[[desert temple]]", structure = "Desert temple", container = "", structID = "desert-temple", poolsJava = { { rolls = {2,4}, items = { ["diamond"] = {1,3,5}, ["iron-ingot"] = {1,5,15}, ["gold-ingot"] = {2,7,15}, ["emerald"] = {1,3,15}, ["bone"] = {4,6,25}, ["spider-eye"] = {1,3,25}, ["rotten-flesh"] = {3,7,25}, ["saddle"] = {1,1,20}, ["iron-horse-armor"] = {1,1,15}, ["golden-horse-armor"] = {1,1,10}, ["diamond-horse-armor"] = {1,1,5}, ["enchanted-book-rnd"] = {1,1,20}, ["golden-apple"] = {1,1,20}, ["enchanted-golden-apple"] = {1,1,2}, ["empty"] = {1,1,15}, } }, { rolls = {4,4}, items = { ["bone"] = {1,8,10}, ["gunpowder"] = {1,8,10}, ["rotten-flesh"] = {1,8,10}, ["string"] = {1,8,10}, ["sand"] = {1,8,10}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,4}, items = { ["diamond"] = {1,3,5}, ["iron-ingot"] = {1,5,15}, ["gold-ingot"] = {2,7,15}, ["emerald"] = {1,3,15}, ["bone"] = {4,6,25}, ["spider-eye"] = {1,3,25}, ["rotten-flesh"] = {3,7,25}, ["saddle"] = {1,1,20}, ["iron-horse-armor"] = {1,1,15}, ["golden-horse-armor"] = {1,1,10}, ["diamond-horse-armor"] = {1,1,5}, ["enchanted-book-rnd"] = {1,1,20}, ["golden-apple"] = {1,1,20}, ["enchanted-golden-apple"] = {1,1,2}, ["empty"] = {1,1,15}, } }, { rolls = {4,4}, items = { ["bone"] = {1,8,10}, ["gunpowder"] = {1,8,10}, ["rotten-flesh"] = {1,8,10}, ["string"] = {1,8,10}, ["sand"] = {1,8,10}, } }, }, poolsBedrockUpcoming = {} }, ["jungle-temple"] = { -- jungle_temple.json header = "[[Jungle temple]]", link = "[[jungle temple]]", structure = "Jungle temple", container = "Chest", structID = "jungle-temple", poolsJava = { { rolls = {2,6}, items = { ["diamond"] = {1,3,3}, ["iron-ingot"] = {1,5,10}, ["gold-ingot"] = {2,7,15}, ["emerald"] = {1,3,2}, ["bone"] = {4,6,20}, ["bamboo"] = {1,3,15}, ["rotten-flesh"] = {3,7,16}, ["saddle"] = {1,1,3}, ["iron-horse-armor"] = {1,1,1}, ["golden-horse-armor"] = {1,1,1}, ["diamond-horse-armor"] = {1,1,1}, ["enchanted-book"] = {1,1,1} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,6}, items = { ["diamond"] = {1,3,15}, ["iron-ingot"] = {1,5,50}, ["gold-ingot"] = {2,7,75}, ["emerald"] = {1,3,10}, ["bone"] = {4,6,100}, ["rotten-flesh"] = {3,7,80}, ["bamboo"] = {1,3,75}, ["saddle"] = {1,1,15}, ["iron-horse-armor"] = {1,1,5}, ["golden-horse-armor"] = {1,1,5}, ["diamond-horse-armor"] = {1,1,5}, ["enchanted-book"] = {1,1,6} } }, }, poolsBedrockUpcoming = {}, }, ["jungle-temple-dispenser"] = { -- jungle_temple_dispenser.json in Java and dispenser_trap.json in Bedrock chest_type = "dispenser", link = "[[jungle temple]]s", structure = "Jungle temple", container = "Dispenser", structID = "jungle-temple", poolsJava = { { rolls = {1,2}, items = { ["arrow"] = {2,7,30} } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,2}, items = { ["arrow"] = {2,7,30} } }, }, poolsBedrockUpcoming = {} }, ["end-city"] = { -- end_city_treasure.json header = "[[End city]]", link = "[[End city]]", structure = "End city", container = "", structID = "end-city", poolsJava = { { rolls = {2,6}, items = { ["diamond"] = {2,7,5}, ["iron-ingot"] = {4,8,10}, ["gold-ingot"] = {2,7,15}, ["emerald"] = {2,6,2}, ["beetroot-seeds"] = {1,10,5}, ["saddle"] = {1,1,3}, ["iron-horse-armor"] = {1,1,1}, ["golden-horse-armor"] = {1,1,1}, ["diamond-horse-armor"] = {1,1,1}, ["level-enchanted-diamond-sword"] = {1,1,3}, ["level-enchanted-diamond-boots"] = {1,1,3}, ["level-enchanted-diamond-chestplate"] = {1,1,3}, ["level-enchanted-diamond-leggings"] = {1,1,3}, ["level-enchanted-diamond-helmet"] = {1,1,3}, ["level-enchanted-diamond-pickaxe"] = {1,1,3}, ["level-enchanted-diamond-shovel"] = {1,1,3}, ["level-enchanted-iron-sword"] = {1,1,3}, ["level-enchanted-iron-boots"] = {1,1,3}, ["level-enchanted-iron-chestplate"] = {1,1,3}, ["level-enchanted-iron-leggings"] = {1,1,3}, ["level-enchanted-iron-helmet"] = {1,1,3}, ["level-enchanted-iron-pickaxe"] = {1,1,3}, ["level-enchanted-iron-shovel"] = {1,1,3}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,6}, items = { ["diamond"] = {2,7,5}, ["iron-ingot"] = {4,8,10}, ["gold-ingot"] = {2,7,15}, ["emerald"] = {2,6,2}, ["beetroot-seeds"] = {1,10,5}, ["saddle"] = {1,1,3}, ["iron-horse-armor"] = {1,1,1}, ["golden-horse-armor"] = {1,1,1}, ["diamond-horse-armor"] = {1,1,1}, ["level-enchanted-diamond-sword"] = {1,1,3}, ["level-enchanted-diamond-boots"] = {1,1,3}, ["level-enchanted-diamond-chestplate"] = {1,1,3}, ["level-enchanted-diamond-leggings"] = {1,1,3}, ["level-enchanted-diamond-helmet"] = {1,1,3}, ["level-enchanted-diamond-pickaxe"] = {1,1,3}, ["level-enchanted-diamond-shovel"] = {1,1,3}, ["level-enchanted-iron-sword"] = {1,1,3}, ["level-enchanted-iron-boots"] = {1,1,3}, ["level-enchanted-iron-chestplate"] = {1,1,3}, ["level-enchanted-iron-leggings"] = {1,1,3}, ["level-enchanted-iron-helmet"] = {1,1,3}, ["level-enchanted-iron-pickaxe"] = {1,1,3}, ["level-enchanted-iron-shovel"] = {1,1,3}, } }, }, poolsBedrockUpcoming = {} }, ["igloo"] = { -- igloo_chest.json header = "[[Igloo]]", link = "[[igloo]]", structure = "Igloo", container = "", structID = "igloo", poolsJava = { { rolls = {2,8}, items = { ["apple"] = {1,3,15}, ["coal"] = {1,4,15}, ["gold-nugget"] = {1,3,10}, ["stone-axe"] = {1,1,2}, ["rotten-flesh"] = {1,1,10}, ["emerald"] = {1,1,1}, ["wheat"] = {2,3,10} } }, { rolls = {1,1}, items = { ["golden-apple"] = {1,1,1}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {2,8}, items = { ["apple"] = {1,3,15}, ["coal"] = {1,4,15}, ["gold-nugget"] = {1,3,10}, ["stone-axe"] = {1,1,2}, ["rotten-flesh"] = {1,1,10}, ["emerald"] = {1,1,1}, ["wheat"] = {2,3,10} } }, { rolls = {1,1}, items = { ["golden-apple"] = {1,1,1}, } }, }, poolsBedrockUpcoming = {} }, ["pillager-outpost"] = { header = "[[Pillager outpost]]", link = "[[pillager outpost]]", structure = "Pillager Outpost", container = "", structID = "pillager-outpost", poolsJava = { { rolls = {0,1}, items = { ["crossbow"] = {1,1,1}, } }, { rolls = {2,3}, items = { ["wheat"] = {3,5,7}, ["potato"] = {2,5,5}, ["carrot"] = {3,5,5} } }, { rolls = {1,3}, items = { ["dark-oak-log"] = {2,3,1} } }, { rolls = {2,3}, items = { ["bottle-o'-enchanting"] = {1,1,7}, ["string"] = {1,6,4}, ["arrow"] = {2,7,4}, ["tripwire-hook"] = {1,3,3}, ["iron-ingot"] = {1,3,3}, ["enchanted-book-rnd"] = {1,1,1} } } }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {0,1}, items = { ["crossbow"] = {1,1,1}, } }, { rolls = {2,3}, items = { ["wheat"] = {3,5,7}, ["potato"] = {2,5,5}, ["carrot"] = {3,5,5} } }, { rolls = {1,3}, items = { ["dark-oak-log"] = {2,3,1} } }, { rolls = {2,3}, items = { ["bottle-o'-enchanting"] = {1,1,7}, ["string"] = {1,6,4}, ["arrow"] = {2,7,4}, ["tripwire-hook"] = {1,3,3}, ["iron-ingot"] = {1,3,3}, ["enchanted-book-rnd"] = {1,1,1} } } }, poolsBedrockUpcoming = {} }, ["bastion-bridge"] = { -- bastion_bridge.json header = "[[Bastion]] bridge", link = "[[bastion remnant|bastion remnant bridge]]", structure = "Bastion remnant", container = "Bridge chest", structID = "bastion-remnant", poolsJava = { { rolls = {1,1}, items = { ["lodestone"] = {1,1,1}, } }, { rolls = {1,2}, items = { ["damaged-random-enchanted-crossbow"] = {1,1,1}, ["spectral-arrow"] = {10,28,1}, ["gilded-blackstone"] = {8,12,1}, ["crying-obsidian"] = {3,8,1}, ["block-of-gold"] = {1,1,1}, ["gold-ingot"] = {4,9,1}, ["iron-ingot"] = {4,9,1}, ["golden-sword"] = {1,1,1}, ["random-enchanted-golden-chestplate"] = {1,1,1}, ["random-enchanted-golden-helmet"] = {1,1,1}, ["random-enchanted-golden-leggings"] = {1,1,1}, ["random-enchanted-golden-boots"] = {1,1,1}, ["random-enchanted-golden-axe"] = {1,1,1}, } }, { rolls = {2,4}, items = { ["string"] = {1,6,1}, ["leather"] = {1,3,1}, ["arrow"] = {5,17,1}, ["iron-nugget"] = {2,6,1}, ["gold-nugget"] = {2,6,1}, } } }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,1}, items = { ["lodestone"] = {1,1,1}, } }, { rolls = {1,2}, items = { ["damaged-random-enchanted-crossbow"] = {1,1,1}, ["arrow"] = {2,12,1}, ["gilded-blackstone"] = {5,8,1}, ["crying-obsidian"] = {3,8,1}, ["block-of-gold"] = {1,1,1}, ["gold-ingot"] = {2,8,1}, ["iron-ingot"] = {2,8,1}, ["golden-sword"] = {1,1,1}, ["random-enchanted-golden-chestplate"] = {1,1,1}, ["random-enchanted-golden-helmet"] = {1,1,1}, ["random-enchanted-golden-leggings"] = {1,1,1}, ["random-enchanted-golden-boots"] = {1,1,1}, } }, { rolls = {2,4}, items = { ["string"] = {1,6,1}, ["leather"] = {1,3,1}, ["arrow"] = {5,17,1}, ["iron-nugget"] = {2,6,1}, ["gold-nugget"] = {2,6,1} } } }, poolsBedrockUpcoming = {} }, ["bastion-hoglin-stable"] = { -- bastion_hoglin_stable.json header = "[[Bastion]] hoglin stable", link = "[[bastion remnant|bastion remnant hoglin stable]]", structure = "Bastion remnant", container = "Hoglin stable chest", structID = "bastion-remnant", poolsJava = { { rolls = {1,1}, items = { ["damaged-random-enchanted-diamond-shovel-2"] = {1,1,15}, ["damaged-random-enchanted-diamond-pickaxe"] = {1,1,12}, ["netherite-scrap"] = {1,1,8}, ["ancient-debris"] = {1,1,12}, ["ancient-debris"] = {2,2,5}, ["saddle"] = {1,1,12}, ["block-of-gold"] = {2,4,16}, ["golden-carrot"] = {8,17,10}, ["golden-apple"] = {1,1,10}, } }, { rolls = {3,4}, items = { ["random-enchanted-golden-axe"] = {1,1,1}, ["crying-obsidian"] = {1,5,1}, ["glowstone"] = {3,6,1}, ["gilded-blackstone"] = {2,5,1}, ["soul-sand"] = {2,7,1}, ["crimson-nylium"] = {2,7,1}, ["gold-nugget"] = {2,8,1}, ["leather"] = {1,3,1}, ["arrow"] = {5,17,1}, ["string"] = {3,8,1}, ["raw-porkchop"] = {2,5,1}, ["cooked-porkchop"] = {2,5,1}, ["crimson-fungus"] = {2,7,1}, ["crimson-roots"] = {2,7,1}, } } }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,1}, items = { ["damaged-random-enchanted-diamond-shovel"] = {1,1,5}, ["netherite-scrap"] = {1,1,2}, ["ancient-debris"] = {1,1,3}, ["saddle"] = {1,1,10}, ["block-of-gold"] = {2,4,25}, ["random-enchanted-golden-hoe"] = {1,1,15}, ["empty"] = {1,1,45} } }, { rolls = {3,4}, items = { ["glowstone"] = {1,5,1}, ["gilded-blackstone"] = {1,5,1}, ["soul-sand"] = {2,7,1}, ["crimson-nylium"] = {2,7,1}, ["gold-nugget"] = {2,8,1}, ["leather"] = {1,3,1}, ["arrow"] = {5,17,1}, ["string"] = {3,8,1}, ["raw-porkchop"] = {2,5,1}, ["cooked-porkchop"] = {2,5,1}, ["crimson-fungus"] = {2,7,1}, ["crimson-roots"] = {2,7,1} } } }, poolsBedrockUpcoming = {} }, ["bastion-generic"] = { -- bastion_other.json header = "[[Bastion]]", link = "[[bastion remnant|bastion remnant]]", structure = "Bastion remnant", container = "Generic chest", structID = "bastion-remnant", poolsJava = { { rolls = {1,1}, items = { ["random-enchanted-diamond-pickaxe"] = {1,1,6}, ["diamond-shovel"] = {1,1,6}, ["damaged-random-enchanted-crossbow-2"] = {1,1,6}, ["ancient-debris"] = {1,1,12}, ["netherite-scrap"] = {1,1,4}, ["spectral-arrow"] = {10,22,10}, ["snout-banner-pattern"] = {1,1,9}, ["disc-pigstep"] = {1,1,5}, ["golden-carrot"] = {6,17,12}, ["golden-apple"] = {1,1,9}, ["enchanted-book-rnd-soul-speed"] = {1,1,10}, } }, { rolls = {2,2}, items = { ["damaged-random-enchanted-iron-sword"] = {1,1,2}, ["block-of-iron"] = {1,1,2}, ["soul-speed-enchanted-golden-boots"] = {1,1,1}, ["random-enchanted-golden-axe"] = {1,1,1}, ["block-of-gold"] = {1,1,2}, ["crossbow"] = {1,1,1}, ["gold-ingot"] = {1,6,2}, ["iron-ingot"] = {1,6,2}, ["golden-sword"] = {1,1,1}, ["golden-chestplate"] = {1,1,1}, ["golden-helmet"] = {1,1,1}, ["golden-leggings"] = {1,1,1}, ["golden-boots"] = {1,1,1}, ["crying-obsidian"] = {1,5,2}, } }, { rolls = {3,4}, items = { ["gilded-blackstone"] = {1,5,2}, ["chain"] = {2,10,1}, ["magma-cream"] = {2,6,2}, ["bone-block"] = {3,6,1}, ["iron-nugget"] = {2,8,1}, ["obsidian"] = {4,6,1}, ["gold-nugget"] = {2,8,1}, ["string"] = {4,6,1}, ["arrow"] = {5,17,2}, ["cooked-porkchop"] = {1,1,1}, } } }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,1}, items = { ["damaged-random-enchanted-crossbow"] = {1,1,12}, ["ancient-debris"] = {1,1,2}, ["netherite-scrap"] = {1,1,2}, ["arrow"] = {2,15,16}, ["snout-banner-pattern"] = {1,1,5}, ["disc-pigstep"] = {1,1,3}, ["enchanted-book-rnd-soul-speed"] = {1,1,10}, ["empty"] = {1,1,50}, } }, { rolls = {2,2}, items = { ["soul-speed-enchanted-golden-boots"] = {1,1,1}, ["block-of-gold"] = {1,1,1}, ["crossbow"] = {1,1,1}, ["gold-ingot"] = {1,6,1}, ["iron-ingot"] = {1,6,1}, ["golden-sword"] = {1,1,1}, ["golden-chestplate"] = {1,1,1}, ["golden-helmet"] = {1,1,1}, ["golden-leggings"] = {1,1,1}, ["golden-boots"] = {1,1,1}, ["empty"] = {1,1,2}, } }, { rolls = {3,5}, items = { ["crying-obsidian"] = {1,5,1}, ["gilded-blackstone"] = {1,5,1}, ["chain"] = {2,10,1}, ["magma-cream"] = {2,6,1}, ["bone-block"] = {3,6,1}, ["iron-nugget"] = {2,8,1}, ["obsidian"] = {4,6,1}, ["gold-nugget"] = {2,8,1}, ["string"] = {4,6,1}, ["arrow"] = {5,17,2}, } } }, poolsBedrockUpcoming = {} }, ["bastion-treasure"] = { -- bastion_treasure.json header = "[[Bastion]] treasure", link = "[[bastion remnant|bastion remnant treasure]]", structure = "Bastion remnant", container = "Treasure chest", structID = "bastion-remnant", poolsJava = { { rolls = {3,3}, items = { ["netherite-ingot"] = {1,1,15}, ["ancient-debris"] = {1,1,10}, ["netherite-scrap"] = {1,1,8}, ["ancient-debris"] = {2,2,4}, ["damaged-random-enchanted-diamond-sword-2"] = {1,1,6}, ["damaged-random-enchanted-diamond-chestplate-2"] = {1,1,6}, ["damaged-random-enchanted-diamond-helmet-2"] = {1,1,6}, ["damaged-random-enchanted-diamond-leggings-2"] = {1,1,6}, ["damaged-random-enchanted-diamond-boots-2"] = {1,1,6}, ["diamond-sword"] = {1,1,6}, ["diamond-chestplate"] = {1,1,5}, ["diamond-helmet"] = {1,1,5}, ["diamond-leggings"] = {1,1,5}, ["diamond-boots"] = {1,1,5}, ["diamond"] = {2,6,5}, ["enchanted-golden-apple"] = {1,1,2}, } }, { rolls = {3,4}, items = { ["spectral-arrow"] = {12,25,1}, ["block-of-gold"] = {2,5,1}, ["block-of-iron"] = {2,5,1}, ["gold-ingot"] = {3,9,1}, ["iron-ingot"] = {3,9,1}, ["crying-obsidian"] = {3,5,1}, ["nether-quartz"] = {8,23,1}, ["gilded-blackstone"] = {5,15,1}, ["magma-cream"] = {3,8,1}, } } }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,2}, items = { ["netherite-ingot"] = {1,1,10}, ["ancient-debris"] = {1,1,14}, ["netherite-scrap"] = {1,1,10}, ["ancient-debris"] = {2,2,1}, ["damaged-random-enchanted-diamond-sword"] = {1,1,10}, ["damaged-random-enchanted-diamond-chestplate"] = {1,1,6}, ["damaged-random-enchanted-diamond-helmet"] = {1,1,6}, ["damaged-random-enchanted-diamond-leggings"] = {1,1,6}, ["damaged-random-enchanted-diamond-boots"] = {1,1,6}, ["damaged-diamond-sword"] = {1,1,6}, ["damaged-diamond-chestplate"] = {1,1,5}, ["damaged-diamond-helmet"] = {1,1,5}, ["damaged-diamond-boots"] = {1,1,5}, ["damaged-diamond-leggings"] = {1,1,5}, ["diamond"] = {1,3,5}, } }, { rolls = {2,4}, items = { ["arrow"] = {5,21,1}, ["block-of-gold"] = {2,5,1}, ["gold-ingot"] = {3,9,1}, ["iron-ingot"] = {3,9,1}, ["crying-obsidian"] = {1,5,1}, ["nether-quartz"] = {8,23,1}, ["gilded-blackstone"] = {1,5,1}, ["magma-cream"] = {2,8,1}, ["iron-nugget"] = {8,16,1}, } } }, poolsBedrockUpcoming = {} }, ["ruined-portal"] = { --ruined_portal.json header = "[[Ruined Portal]]", link = "[[ruined portal]]", structure = "Ruined portal", container = "", structID = "ruined-portal", poolsJava = { { rolls = {4,8}, items = { ["obsidian"] = {1,2,40}, ["flint"] = {1,4,40}, ["iron-nugget"] = {9,18,40}, ["flint-and-steel"] = {1,1,40}, ["fire-charge"] = {1,1,40}, ["golden-apple"] = {1,1,15}, ["gold-nugget"] = {4,24,15}, ["random-enchanted-golden-sword"] = {1,1,15}, ["random-enchanted-golden-axe"] = {1,1,15}, ["random-enchanted-golden-hoe"] = {1,1,15}, ["random-enchanted-golden-pickaxe"] = {1,1,15}, ["random-enchanted-golden-shovel"] = {1,1,15}, ["random-enchanted-golden-helmet"] = {1,1,15}, ["random-enchanted-golden-chestplate"] = {1,1,15}, ["random-enchanted-golden-leggings"] = {1,1,15}, ["random-enchanted-golden-boots"] = {1,1,15}, ["glistering-melon-slice"] = {4,12,5}, ["golden-horse-armor"] = {1,1,5}, ["light-weighted-pressure-plate"] = {1,1,5}, ["golden-carrot"] = {4,12,5}, ["clock"] = {1,1,5}, ["gold-ingot"] = {2,8,5}, ["bell"] = {1,1,1}, ["enchanted-golden-apple"] = {1,1,1}, ["block-of-gold"] = {1,2,1}, } } }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {4,8}, items = { ["obsidian"] = {1,2,40}, ["flint"] = {1,4,40}, ["iron-nugget"] = {9,18,40}, ["flint-and-steel"] = {1,1,40}, ["fire-charge"] = {1,1,40}, ["golden-apple"] = {1,1,15}, ["gold-nugget"] = {4,24,15}, ["random-enchanted-golden-sword"] = {1,1,15}, ["random-enchanted-golden-axe"] = {1,1,15}, ["random-enchanted-golden-hoe"] = {1,1,15}, ["random-enchanted-golden-shovel"] = {1,1,15}, ["random-enchanted-golden-pickaxe"] = {1,1,15}, ["random-enchanted-golden-boots"] = {1,1,15}, ["random-enchanted-golden-chestplate"] = {1,1,15}, ["random-enchanted-golden-helmet"] = {1,1,15}, ["random-enchanted-golden-leggings"] = {1,1,15}, ["glistering-melon-slice"] = {4,12,5}, ["golden-horse-armor"] = {1,1,5}, ["light-weighted-pressure-plate"] = {1,1,5}, ["golden-carrot"] = {4,12,5}, ["clock"] = {1,1,5}, ["gold-ingot"] = {2,8,5}, ["bell"] = {1,1,1}, ["enchanted-golden-apple"] = {1,1,1}, ["block-of-gold"] = {1,2,1}, } } }, poolsBedrockUpcoming = {} }, ["woodland-mansion"] = { -- woodland_mansion.json header = "[[Woodland Mansion]]", link = "[[woodland mansion]]", structure = "Woodland mansion", container = "", structID = "woodland-mansion", poolsJava = { { rolls = {1,3}, items = { ["lead"] = {1,1,20}, ["golden-apple"] = {1,1,15}, ["enchanted-golden-apple"] = {1,1,2}, ["disc-13"] = {1,1,15}, ["disc-cat"] = {1,1,15}, ["name-tag"] = {1,1,20}, ["chainmail-chestplate"] = {1,1,10}, ["diamond-hoe"] = {1,1,15}, ["diamond-chestplate"] = {1,1,5}, ["enchanted-book-rnd"] = {1,1,10}, } }, { rolls = {1,4}, items = { ["iron-ingot"] = {1,4,10}, ["gold-ingot"] = {1,4,5}, ["bread"] = {1,1,20}, ["wheat"] = {1,4,20}, ["bucket"] = {1,1,10}, ["redstone"] = {1,4,15}, ["coal"] = {1,4,15}, ["melon-seeds"] = {2,4,10}, ["pumpkin-seeds"] = {2,4,10}, ["beetroot-seeds"] = {2,4,10}, } }, { rolls = {3,3}, items = { ["bone"] = {1,8,10}, ["gunpowder"] = {1,8,10}, ["rotten-flesh"] = {1,8,10}, ["string"] = {1,8,10}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = { { rolls = {1,3}, items = { ["lead"] = {1,1,100}, ["golden-apple"] = {1,1,75}, ["enchanted-golden-apple"] = {1,1,10}, ["disc-13"] = {1,1,75}, ["disc-cat"] = {1,1,75}, ["name-tag"] = {1,1,100}, ["chainmail-chestplate"] = {1,1,50}, ["diamond-hoe"] = {1,1,75}, ["diamond-chestplate"] = {1,1,25}, ["enchanted-book-rnd"] = {1,1,60}, } }, { rolls = {1,4}, items = { ["iron-ingot"] = {1,4,50}, ["gold-ingot"] = {1,4,25}, ["bread"] = {1,1,100}, ["wheat"] = {1,4,100}, ["bucket"] = {1,1,50}, ["redstone"] = {1,4,75}, ["coal"] = {1,4,75}, ["melon-seeds"] = {2,4,50}, ["pumpkin-seeds"] = {2,4,50}, ["beetroot-seeds"] = {2,4,50}, } }, { rolls = {3,3}, items = { ["bone"] = {1,8,50}, ["gunpowder"] = {1,8,50}, ["rotten-flesh"] = {1,8,50}, ["string"] = {1,8,50}, } }, }, poolsBedrockUpcoming = {} }, ["bonus-barrel"] = { -- bonus_barrel.json from Java Edition 3D Shareware v1.34 header = "[[Java Edition 3D Shareware v1.34#Blocks|Bonus barrel]]", link = "[[Java Edition 3D Shareware v1.34#Blocks|bonus barrel]]", structure = "Bonus barrel", container = "", structID = "day", poolsJava = { { rolls = {1,4}, items = { ["level-enchanted-bow"] = {1,1,1}, ["random-effect-arrow"] = {1,20,1}, ["random-effect-tipped-arrow"] = {1,20,1}, ["random-effect-potion"] = {1,1,1}, ["random-effect-splash-potion"] = {1,1,1}, ["random-effect-lingering-potion"] = {1,1,1}, ["level-enchanted-leather-tunic"] = {1,1,1}, ["level-enchanted-leather-boots"] = {1,1,1}, ["level-enchanted-leather-cap"] = {1,1,1}, ["level-enchanted-leather-pants"] = {1,1,1}, ["level-enchanted-iron-chestplate-2"] = {1,1,1}, ["level-enchanted-iron-boots-2"] = {1,1,1}, ["level-enchanted-iron-helmet-2"] = {1,1,1}, ["level-enchanted-iron-leggings-2"] = {1,1,1}, ["level-enchanted-diamond-chestplate-2"] = {1,1,1}, ["level-enchanted-diamond-boots-2"] = {1,1,1}, ["level-enchanted-diamond-helmet-2"] = {1,1,1}, ["level-enchanted-diamond-leggings-2"] = {1,1,1}, ["level-enchanted-stone-sword"] = {1,1,1}, ["level-enchanted-iron-sword-2"] = {1,1,1}, ["level-enchanted-diamond-sword-2"] = {1,1,1}, ["random-enchanted-crossbow"] = {1,1,1}, } }, { rolls = {1,1}, items = { ["blue-key"] = {1,1,1}, ["yellow-key"] = {1,1,2}, ["red-key"] = {1,1,5}, ["empty"] = {1,1,16}, } }, }, poolsJavaUpcoming = {}, poolsBedrock = {}, poolsBedrockUpcoming = {} }, }, -- these values are used: -- * in place of the keys, when the key is used as a parameter -- chest-param -> internally-valid-chest-param synonyms = { ["desert"] = "desert-temple", ["jungle"] = "jungle-temple", ["nether"] = "nether-fortress", ["nether-fortress"] = "nether-fortress", ["armorer"] = "village-armorer", ["butcher"] = "village-butcher", ["cartographer"] = "village-cartographer", ["fisherman"] = "village-fisherman", ["fletcher"] = "village-fletcher", ["mason"] = "village-mason", ["shepherd"] = "village-shepherd", ["tannery"] = "village-tannery", ["temple"] = "village-temple", ["toolsmith"] = "village-toolsmith", ["weaponsmith"] = "village-weaponsmith", ["desert-house"] = "village-desert-house", ["plains-house"] = "village-plains-house", ["savanna-house"] = "village-savanna-house", ["snowy-house"] = "village-snowy-house", ["taiga-house"] = "village-taiga-house", ["altar"] = "stronghold-altar", ["storeroom"] = "stronghold-storeroom", ["library"] = "stronghold-library", ["outpost"] = "pillager-outpost", ["mansion"] = "woodland-mansion" }, -- these values are used: -- * in the header-description of a table showing only a single chest -- * if the key is not here, but it is a valid chest parameter, -- that header-description defaults to use the key string from p.chests, -- e.g. "nether-fortress" -- chest-param -> description-string display_names = { ["nether-fortress"] = "Nether Fortress", ["nether"] = "nether fortress", ["fortress"] = "nether fortress", ["desert"] = "desert pyramid", ["jungle"] = "jungle pyramid", ["desert-temple"] = "desert pyramid", ["jungle-temple"] = "jungle pyramid" }, -- these descriptions are used: -- * in column <abbr> titles, -- * and above the table when only a single column-type is chosen columns = { ["stacksize"] = 'The size of stacks (or for unstackable items, number) of this item on any given roll.', ["weight"] = 'The weight of this item relative to other items in the pool.', ["chance"] = 'The odds of finding any of this item in a single chest.', ["items"] = 'The number of items expected per chest, averaged over a large number of chests.', ["chests"] = 'The average number of chests the player should expect to search to find any of this item.' }, current_frame = nil } p.base = function( ... ) p.current_frame = mw.getCurrentFrame() local args = { ... } if args[1] == p.current_frame then args = require( 'Module:ProcessArgs' ).merge( true ) else args = args[1] end -- transform args into usable list local chests, columns = q.massage_args( args ) if #chests == 0 then return "<span style='font-style:italic; color:red;'>Module:LootChest: no valid arguments</span>" end q.fill_in_chest_derivative_data( chests ) -- construct an ordered list dictating the order of the rows local ordered_item_rows_java = {} local ordered_item_rows_java_upcoming = {} local ordered_item_rows_bedrock = {} local ordered_item_rows_bedrock_upcoming = {} local ret = {} local java_specified = args.java and args.java ~= '0'; local java_upcoming_specified = args['java-upcoming'] and args['java-upcoming'] ~= '0'; local bedrock_specified = args.bedrock and args.bedrock ~= '0'; local bedrock_upcoming_specified = args['bedrock-upcoming'] and args['bedrock-upcoming'] ~= '0'; local any_specified = java_specified or java_upcoming_specified or bedrock_specified or bedrock_upcoming_specified if any_specified then if java_specified then ordered_item_rows_java = q.construct_ordered_item_rows( chests, 'Java' ) end if java_upcoming_specified then ordered_item_rows_java_upcoming = q.construct_ordered_item_rows( chests, 'JavaUpcoming' ) end if bedrock_specified then ordered_item_rows_bedrock = q.construct_ordered_item_rows( chests, 'Bedrock' ) end if bedrock_upcoming_specified then ordered_item_rows_bedrock_upcoming = q.construct_ordered_item_rows( chests, 'BedrockUpcoming' ) end else local java_excluded = args.java and args.java == '0'; local java_upcoming_excluded = args['java-upcoming'] and args['java-upcoming'] == '0'; local bedrock_excluded = args.bedrock and args.bedrock == '0'; local bedrock_upcoming_excluded = args['bedrock-upcoming'] and args['bedrock-upcoming'] == '0'; if not java_excluded then ordered_item_rows_java = q.construct_ordered_item_rows( chests, 'Java' ) end if not java_upcoming_excluded then ordered_item_rows_java_upcoming = q.construct_ordered_item_rows( chests, 'JavaUpcoming' ) end if not bedrock_excluded then ordered_item_rows_bedrock = q.construct_ordered_item_rows( chests, 'Bedrock' ) end if not bedrock_upcoming_excluded then ordered_item_rows_bedrock_upcoming = q.construct_ordered_item_rows( chests, 'BedrockUpcoming' ) end end if q.tablelength( ordered_item_rows_java ) > 0 then table.insert( ret, 'In ' .. p.current_frame:preprocess( p.java ) .. ', ' .. q.lcfirst( q.print_table( chests, columns, ordered_item_rows_java, 'Java' ) ) ) end if q.tablelength( ordered_item_rows_java_upcoming ) > 0 and q.compare_tables( ordered_item_rows_java, ordered_item_rows_java_upcoming ) then table.insert( ret, 'In ' .. p.current_frame:preprocess( p['java-upcoming'] ) .. ', ' .. q.lcfirst( q.print_table( chests, columns, ordered_item_rows_java_upcoming, 'JavaUpcoming' ) ) ) end if q.tablelength( ordered_item_rows_bedrock ) > 0 and q.compare_tables( ordered_item_rows_java, ordered_item_rows_bedrock ) then table.insert( ret, 'In ' .. p.current_frame:preprocess( p.bedrock ) .. ', ' .. q.lcfirst( q.print_table( chests, columns, ordered_item_rows_bedrock, 'Bedrock' ) ) .. '[[Category:Bedrock Edition specific information]]' ) end if q.tablelength( ordered_item_rows_bedrock_upcoming ) > 0 and q.compare_tables( ordered_item_rows_bedrock, ordered_item_rows_bedrock_upcoming ) then table.insert( ret, 'In ' .. p.current_frame:preprocess( p['bedrock-upcoming'] ) .. ', ' .. q.lcfirst( q.print_table( chests, columns, ordered_item_rows_bedrock_upcoming, 'BedrockUpcoming' ) ) .. '[[Category:Bedrock Edition specific information]]' ) end table.insert( ret, "<div class=mobileonly>" ) table.insert( ret, p.current_frame:expandTemplate{ title = 'FNlist', args = {} } ) table.insert( ret, "</div>" ) return table.concat( ret, '\n\n' ) end p.doc = function() local valid_args = {} for chest_name, val in pairs(p.chests) do local synonyms = {} for syn, orig in pairs(p.synonyms) do if orig == chest_name then table.insert( synonyms, syn ) end end if #synonyms > 0 then chest_name = chest_name .. " ( " .. table.concat( synonyms, ", " ) .. " )" end table.insert( valid_args, chest_name ) end table.sort( valid_args ) return table.concat( valid_args, ",\n<br>" ) end p.doc2 = function() local valid_args = {} for column_name, val in pairs(p.columns) do table.insert( valid_args, column_name .. ": " .. val ) end table.sort( valid_args ) return table.concat( valid_args, ",\n<br>" ) end p.doc3 = function() local valid_args = {} for item_name, val in pairs(p.items) do table.insert( valid_args, item_name ) end table.sort( valid_args ) return table.concat( valid_args, ", " ) end p.base2 = function( ... ) p.current_frame = mw.getCurrentFrame() local args = { ... } if args[1] == p.current_frame then args = require( 'Module:ProcessArgs' ).merge( true ) else args = args[1] end local itemname = args[1] if p.items[itemname] == nil then return '<span style="color:red;">unknown item "' .. itemname .. '"</span>' end if args.java and args.java ~= '0' then javaChances = q.single_item_find_values( itemname, 'poolsJava' ) javaUpcomingChances = {} bedrockChances = {} bedrockUpcomingChances = {} else if args['java-upcoming'] and args['java-upcoming'] ~= '0' then javaChances = q.single_item_find_values( itemname, 'poolsJavaUpcoming' ) javaUpcomingChances = {} bedrockChances = {} bedrockUpcomingChances = {} else if args.bedrock and args.bedrock ~= '0' then javaChances = q.single_item_find_values( itemname, 'poolsBedrock' ) javaUpcomingChances = {} bedrockChances = {} bedrockUpcomingChances = {} else if args['bedrock-upcoming'] and args['bedrock-upcoming'] ~= '0' then javaChances = q.single_item_find_values( itemname, 'poolsBedrockUpcoming' ) javaUpcomingChances = {} bedrockChances = {} bedrockUpcomingChances = {} else javaChances = q.single_item_find_values( itemname, 'poolsJava' ) javaUpcomingChances = q.single_item_find_values( itemname, 'poolsJavaUpcoming', javaChances ) bedrockChances = q.single_item_find_values( itemname, 'poolsBedrock' ) bedrockUpcomingChances = q.single_item_find_values( itemname, 'poolsBedrockUpcoming', javaChances, bedrockChances ) end end end end local html = {} local any_current = q.tablelength( javaChances ) > 0 local any_changes_upcoming = q.tablelength( javaUpcomingChances ) > 0 and q.compare_tables( javaChances, javaUpcomingChances ) local any_standard = any_current or any_changes_upcoming local any_bedrock_current = q.tablelength( bedrockChances ) > 0 local any_bedrock_upcoming = q.tablelength( bedrockUpcomingChances ) > 0 and q.compare_tables( bedrockChances, bedrockUpcomingChances ) local any_bedrock = any_bedrock_current or any_bedrock_upcoming local change_case = p.items[itemname].preserve_case == nil or p.items[itemname].preserve_case ~= true if any_current then table.insert( html, p.base2_sub( itemname, javaChances ) ) end if any_changes_upcoming then table.insert( html, p.current_frame:preprocess( p['java-upcoming'] ) .. ( change_case and q.lcfirst( p.base2_sub( itemname, javaUpcomingChances, any_current ) ) or p.base2_sub( itemname, javaUpcomingChances, any_current ) ) ) end if any_bedrock_current then table.insert( html, ( any_standard and '\n\n' or '' ) .. p.current_frame:preprocess( p.bedrock ) .. ( change_case and q.lcfirst( p.base2_sub( itemname, bedrockChances, any_standard ) ) or p.base2_sub( itemname, bedrockChances, any_standard ) ) ) end if any_bedrock_upcoming then table.insert( html, ( any_standard and not any_bedrock_current and '\n\n' or '' ) .. p.current_frame:preprocess( p['bedrock-upcoming'] ) .. ( change_case and q.lcfirst( p.base2_sub( itemname, bedrockUpcomingChances, any_bedrock_current or any_standard ) ) or p.base2_sub( itemname, bedrockUpcomingChances, any_bedrock_current or any_standard ) ) ) end if args.nocat then else table.insert( html, '[[Category:Pages with loot chest item templates]]' ) if p.items[itemname].category ~= nil and p.items[itemname].category ~= false then table.insert( html, '[[Category:Pages with specific loot chest items]]' ) end if any_bedrock then table.insert( html, '[[Category:Bedrock Edition specific information]]' ) end end return table.concat( html, ' ' ) end p.base2_sub = function( itemname, chances, use_they ) local html = {} local item_display_name = '' if use_they then item_display_name = 'they' else if p.items[itemname].plural ~= nil and p.items[itemname].plural ~= false then item_display_name = p.items[itemname].plural else if p.items[itemname].title ~= nil then item_display_name = p.items[itemname].title else item_display_name = string.gsub( itemname, '-', ' ' ) end if p.items[itemname].plural == nil or p.items[itemname].plural ~= false then item_display_name = q.single_item_plural( item_display_name ) end end if p.items[itemname].preserve_case == nil or p.items[itemname].preserve_case ~= true then item_display_name = q.capitalize( item_display_name ) end if p.items[itemname].note and p.notes[p.items[itemname].note] then item_display_name = item_display_name .. p.current_frame:extensionTag( 'ref', p.notes[p.items[itemname].note], { group='FN', name=p.items[itemname].note } ) end if p.items[itemname].note1 and p.notes[p.items[itemname].note1] then if p.items[itemname].note == nil or p.notes[p.items[itemname].note] == nil or p.items[itemname].note ~= p.items[itemname].note1 then item_display_name = item_display_name .. p.current_frame:extensionTag( 'ref', p.notes[p.items[itemname].note1], { group='FN', name=p.items[itemname].note1 } ) end end end table.insert( html, item_display_name ) table.insert( html, ' can be found ' ) local html_stacks = {} local stack_sep = ', ' local ns = q.tablelength( chances ) local s = 0 for stacksize, chest_details in pairs( chances ) do s = s + 1 local html_per_stack = { 'in ' } local c = 0 local nc = q.tablelength( chest_details ) local sep = ( nc > 2 and ', ' or ' ' ) if nc > 2 and s ~= ns then stack_sep = '; ' end for k, chest in pairs( chest_details ) do c = c + 1 if c == nc and nc > 1 then table.insert( html_per_stack, 'and ' ) end if chest.chance == 1 then table.insert( html_per_stack, " all " ) else table.insert( html_per_stack, string.format("%.1f", chest.chance*100) ) table.insert( html_per_stack, "% of " ) end if chest.chest_type == 'minecart with chest' then table.insert( html_per_stack, ' [[Minecart with Chest|chest minecarts]] in ' ) table.insert( html_per_stack, p.chests[chest.chest_name].link ) elseif chest.chest_type == 'dispenser' then table.insert( html_per_stack, ' [[dispenser]]s in ' ) table.insert( html_per_stack, p.chests[chest.chest_name].link ) else table.insert( html_per_stack, p.chests[chest.chest_name].link ) table.insert( html_per_stack, ' chests' ) end table.insert( html_per_stack, sep ) end if nc > 2 then table.insert( html_per_stack, 'all ' ) end table.insert( html_per_stack, 'in ' ) if p.items[itemname].cannot_stack ~= nil then table.insert( html_per_stack, 'groups of ' ) else table.insert( html_per_stack, 'stacks of ' ) end table.insert( html_per_stack, stacksize ) table.insert( html_stacks, table.concat( html_per_stack ) ) end local stackwise_summaries = '' if #html_stacks == 1 then table.insert( html, html_stacks[1] ) else for i = 1, #html_stacks - 1 do table.insert( html, html_stacks[ i ] ) table.insert( html, stack_sep ) end table.insert( html, 'and ' ) table.insert( html, html_stacks[#html_stacks] ) end table.insert( html, '.' ) return table.concat( html ) end p.base2_test = function() items = {} for item_name, v in pairs( p.items ) do table.insert( items, p.base2{ item_name, ["nocat"]=true } .. '\n\n' ) end table.sort( items ) return table.concat(items) end p.base3 = function( ... ) p.current_frame = mw.getCurrentFrame() local args = { ... } if args[1] == p.current_frame then args = require( 'Module:ProcessArgs' ).merge( true ) else args = args[1] end local z = args[1] local html_java = {} local html_java_u = {} local html_bedrock = {} local html_bedrock_u = {} local rErr = "" local zT = {} if args[1] == "!!!ALL!!!" then for item_name, v in pairs( p.items ) do table.insert( zT, item_name ) table.sort( zT ) end else zT = mw.text.split( args[1], ',' ) end for x, itemname in pairs( zT ) do if p.items[itemname] == nil then rErr = rErr .. "<span class='error'>Unknown item " .. itemname .. ".</span>\n" else local javaChances, javaUpcomingChances, bedrockChances, bedrockUpcomingChances if args.java and args.java ~= '0' then javaChances = q.single_item_find_values( itemname, 'poolsJava' ) javaUpcomingChances = {} bedrockChances = {} bedrockUpcomingChances = {} else if args['java-upcoming'] and args['java-upcoming'] ~= '0' then javaChances = q.single_item_find_values( itemname, 'poolsJavaUpcoming' ) javaUpcomingChances = {} bedrockChances = {} bedrockUpcomingChances = {} else if args.bedrock and args.bedrock ~= '0' then javaChances = q.single_item_find_values( itemname, 'poolsBedrock' ) javaUpcomingChances = {} bedrockChances = {} bedrockUpcomingChances = {} else if args['bedrock-upcoming'] and args['bedrock-upcoming'] ~= '0' then javaChances = q.single_item_find_values( itemname, 'poolsBedrockUpcoming' ) javaUpcomingChances = {} bedrockChances = {} bedrockUpcomingChances = {} else javaChances = q.single_item_find_values( itemname, 'poolsJava' ) javaUpcomingChances = q.single_item_find_values( itemname, 'poolsJavaUpcoming', javaChances ) bedrockChances = q.single_item_find_values( itemname, 'poolsBedrock' ) bedrockUpcomingChances = q.single_item_find_values( itemname, 'poolsBedrockUpcoming', javaChances, bedrockChances ) end end end end local any_current = q.tablelength( javaChances ) > 0 local any_changes_upcoming = q.tablelength( javaUpcomingChances ) > 0 and q.compare_tables( javaChances, javaUpcomingChances ) local any_standard = any_current or any_changes_upcoming local any_bedrock_current = q.tablelength( bedrockChances ) > 0 local any_bedrock_upcoming = q.tablelength( bedrockUpcomingChances ) > 0 and q.compare_tables( bedrockChances, bedrockUpcomingChances ) local any_bedrock = any_bedrock_current or any_bedrock_upcoming if any_current then table.insert( html_java, p.base3_sub( itemname, javaChances ) ) end if any_changes_upcoming then table.insert( html_java_u, p.base3_sub( itemname, javaUpcomingChances ) ) end if any_bedrock_current then table.insert( html_bedrock, p.base3_sub( itemname, bedrockChances ) ) end if any_bedrock_upcoming then table.insert( html_bedrock_u, p.base3_sub( itemname, bedrockUpcomingChances ) ) end end end local output = rErr .. '{| class="wikitable sortable" \n! Item \n! Structure \n! Container \n! Quantity \n! Chance \n' if q.tablelength( html_java ) > 0 then output = output .. '|-\n!colspan=5|' .. p['java'] .. ' \n' .. table.concat( html_java ) end if q.tablelength( html_java_u ) > 0 then output = output .. '|-\n!colspan=5|' .. p['java-upcoming'] .. ' \n' .. table.concat( html_java_u ) end if q.tablelength( html_bedrock ) > 0 then output = output .. '|-\n!colspan=5|' .. p.bedrock .. ' \n' .. table.concat( html_bedrock ) end if q.tablelength( html_bedrock_u ) > 0 then output = output .. '|-\n!colspan=5|' .. p['bedrock-upcoming'] .. ' \n' .. table.concat( html_bedrock_u ) end output = output .. '|}' .. p.current_frame:extensionTag( 'references', "", { group="FN" } ) return output end p.base3_sub = function( itemname, chances ) local html = {} local item_display_name = '' local output = "" lang = mw.getContentLanguage() if p.items[itemname].title ~= nil then item_display_name = p.items[itemname].title else item_display_name = q.titlecase( string.gsub( itemname, '-', ' ' ) ) end local objectList = {} local ns = q.tablelength( chances ) local s = 0 local m = 0 local rn = 0 for stacksize, chest_details in pairs( chances ) do s = s + 1 local nc = q.tablelength( chest_details ) local c = 0 for k, chest in pairs( chest_details ) do c = c + 1 rn = rn + 1 local containerText = p.chests[chest.chest_name].container if string.len(containerText) == 0 then containerText = 'Chest' end local r = "" r = r .. '|' .. string.gsub( containerText, ' ', ' ' ) .. '\n|' .. stacksize .. '\n|' .. lang:formatNum( math.floor( chest.chance*1000 + 0.5 ) /10 ) .. '%' .. '\n' if ns ~= s or nc ~= c then r = r end table.insert( objectList , { p.chests[chest.chest_name].structID , p.chests[chest.chest_name].structure, r } ) end m = m + nc end table.sort( objectList, function(a,b) return a[1] < b[1] end ) local struct = "" local t = "" local nt = 1 local ntt = 0 for v, w in pairs( objectList ) do ntt = ntt + 1 if w[1] ~= struct then if t ~= "" then output = output .. "|rowspan=" .. nt .. t end t = "|'''" .. p.current_frame:expandTemplate{ title = 'EnvLink', args = { w[2], id = w[1] } } .. "'''\n" .. w[3] struct = w[1] nt = 1 else t = t .. w[3] nt = nt + 1 end if ntt == m then output = output .. "|rowspan=" .. nt .. t else t = t .. '|-' .. '\n' end end return "|-\n| rowspan=" .. m .. "|'''" .. p.getItem(itemname, item_display_name) .. "'''\n" .. output end p.getItem = function( itemname, item_display_name ) local s = "" local k = item_display_name local link = item_display_name local m = itemname if p.items[itemname].title ~= nil then k = p.items[itemname].title end if p.items[itemname].link ~= nil then link = p.items[itemname].link end if p.items[itemname].id ~= nil then m = p.items[itemname].id end if p.items[itemname][1] == "item" then s = p.current_frame:expandTemplate{ title = 'ItemLink', args = { link , k , id = m } } elseif p.items[itemname][1] == "block" then s = p.current_frame:expandTemplate{ title = 'BlockLink', args = { link , k , id = m } } end if p.items[itemname].note and p.notes[p.items[itemname].note] then s = s .. p.current_frame:extensionTag( 'ref', p.notes[p.items[itemname].note], { group='FN', name=p.items[itemname].note } ) end if p.items[itemname].note1 and p.notes[p.items[itemname].note1] then if p.items[itemname].note == nil or p.notes[p.items[itemname].note] == nil or p.items[itemname].note ~= p.items[itemname].note1 then s = s .. p.current_frame:extensionTag( 'ref', p.notes[p.items[itemname].note1], { group='FN', name=p.items[itemname].note1 } ) end end return s end q = { tablelength = function(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end, deepcopy = function(orig) local orig_type = type(orig) local copy if orig_type == 'table' then copy = {} for orig_key, orig_value in next, orig, nil do copy[q.deepcopy(orig_key)] = q.deepcopy(orig_value) end setmetatable(copy, q.deepcopy(getmetatable(orig))) else -- number, string, boolean, etc copy = orig end return copy end, single_item_find_values = function( itemname, poolsKey, exclusions_param, other_exclusions_param ) local chances = {} local exclusions = q.deepcopy(exclusions_param or {}) local other_exclusions = q.deepcopy(other_exclusions_param or {}) for stacksize, other_exclusion_list in pairs(other_exclusions) do if exclusions[stacksize] == nil then exclusions[stacksize] = {} end for _, other_exclusion in pairs(other_exclusion_list) do local already_in_here = false for _, exclusion in pairs(exclusions[stacksize]) do if exclusion["chest_name"] == other_exclusion["chest_name"] and exclusion["chance"] == other_exclusion["chance"] then already_in_here = true break end end if not already_in_here then table.insert( exclusions[stacksize], other_exclusion ) end end end for chest_name, chest in pairs( p.chests ) do local poolchances = {} for k, pool in pairs( chest[poolsKey] or chest.poolsJava or {} ) do local poolitem = pool.items[itemname] if poolitem ~= nil then local stacksize = poolitem[1] if poolitem[1] ~= poolitem[2] then stacksize = stacksize .. "–" .. poolitem[2] end local itemweight = poolitem[3] local pool_total_item_weight = 0 for itemname, item in pairs(pool.items) do pool_total_item_weight = pool_total_item_weight + item[3] end local chance = p.calc_chance_any_of_this_item_per_pool( pool.rolls[1], pool.rolls[2], itemweight, pool_total_item_weight ) if poolchances[stacksize] == nil then poolchances[stacksize] = chance else poolchances[stacksize] = poolchances[stacksize] + (1 - poolchances[stacksize]) * chance end end end for stacksize, chance in pairs( poolchances ) do local excluded = false for _, exclusion in pairs( exclusions[stacksize] or {} ) do if exclusion["chest_name"] == chest_name and exclusion["chance"] == chance then excluded = true break end end if not excluded then if chances[stacksize] == nil then chances[stacksize] = {} end table.insert( chances[stacksize], { ["chance"]=chance, ["chest_name"]=chest_name, ["chest_type"]=( chest.chest_type or "chest" ) } ) end end end return chances end, single_item_plural = function( itemname ) if string.sub( itemname, -2 ) == 'ss' or string.sub( itemname, -2 ) == 'ch' or string.sub( itemname, -2 ) == 'sh' or string.sub( itemname, -1 ) == 's' then return itemname .. 'es' end return itemname .. 's' end, massage_args = function( args ) -- find what columns to put local columns = {} for k, _arg in pairs(args) do if p.columns[_arg] ~= nil then columns[_arg] = true end end if q.tablelength(columns) == 0 then for column_name, v in pairs(p.columns) do columns[column_name] = true end end -- find what chests to show local chests = {} for k, _arg in pairs(args) do if p.chests[_arg] ~= nil then table.insert( chests, _arg ) elseif p.synonyms[_arg] ~= nil then table.insert( chests, p.synonyms[_arg] ) end if p.display_names[_arg] ~= nil then local chestname = _arg if p.chests[chestname] == nil then chestname = p.synonyms[_arg] end p.chests[chestname].display_name = p.display_names[_arg] end end if #chests == 0 then for chest_name, chest in pairs(p.chests) do local chest_type = ( chest.chest_type or "chest" ) if chest_type == "chest" or chest_type == "minecart with chest" then table.insert( chests, chest_name ) end end end table.sort( chests ) return chests, columns end, sort_items = function( e1, e2 ) if e1.chanceany ~= e2.chanceany then return ( e1.chanceany > e2.chanceany ) end if e1.avgamount ~= e2.avgamount then return ( e1.avgamount > e2.avgamount ) end if e1.material == nil then e1.material = 0 if string.find( e1.itemname, "leather" ) ~= nil then e1.material = 1 end if string.find( e1.itemname, "iron" ) ~= nil then e1.material = 2 end if string.find( e1.itemname, "gold" ) ~= nil then e1.material = 3 end if string.find( e1.itemname, "diamond" ) ~= nil then e1.material = 4 end if string.find( e1.itemname, "netherite" ) ~= nil then e1.material = 5 end e1.armor = 0 if string.find( e1.itemname, "helmet" ) ~= nil or string.find( e1.itemname, "cap" ) ~= nil then e1.armor = 1 end if string.find( e1.itemname, "chestplate" ) ~= nil or string.find( e1.itemname, "tunic" ) ~= nil then e1.armor = 2 end if string.find( e1.itemname, "leggings" ) ~= nil or string.find( e1.itemname, "pants" ) ~= nil then e1.armor = 3 end if string.find( e1.itemname, "boots" ) ~= nil then e1.armor = 4 end end if e2.material == nil then e2.material = 0 if string.find( e2.itemname, "leather" ) ~= nil then e2.material = 1 end if string.find( e2.itemname, "iron" ) ~= nil then e2.material = 2 end if string.find( e2.itemname, "gold" ) ~= nil then e2.material = 3 end if string.find( e2.itemname, "diamond" ) ~= nil then e2.material = 4 end e2.armor = 0 if string.find( e2.itemname, "helmet" ) ~= nil or string.find( e2.itemname, "cap" ) ~= nil then e2.armor = 1 end if string.find( e2.itemname, "chestplate" ) ~= nil or string.find( e2.itemname, "tunic" ) ~= nil then e2.armor = 2 end if string.find( e2.itemname, "leggings" ) ~= nil or string.find( e2.itemname, "pants" ) ~= nil then e2.armor = 3 end if string.find( e2.itemname, "boots" ) ~= nil then e2.armor = 4 end end if e1.material ~= e2.material then return ( e1.material < e2.material ) end if e1.armor ~= e2.armor then return ( e1.armor < e2.armor ) end return ( e1.itemname < e2.itemname ) end, fill_in_chest_derivative_data = function( chest_names ) for k, chest_name in pairs(chest_names) do local chest = p.chests[chest_name] if chest == nil then break end chest.allRollsJava = {} chest.itemDataJava = {} for k, pool in pairs( chest.poolsJava or {} ) do table.insert( chest.allRollsJava, ( pool.rolls[1] == pool.rolls[2] and pool.rolls[1] or pool.rolls[1]..'–'..pool.rolls[2] ) ) local total_weight = 0 for itemname, item in pairs(pool.items) do total_weight = total_weight + item[3] end pool.totalweight = total_weight q.fill_in_chest_item_details( chest.itemDataJava, pool, #chest.allRollsJava ) end chest.allRollsJavaUpcoming = {} chest.itemDataJavaUpcoming = {} for k, pool in pairs( chest.poolsJavaUpcoming or chest.poolsJava or {} ) do table.insert( chest.allRollsJavaUpcoming, ( pool.rolls[1] == pool.rolls[2] and pool.rolls[1] or pool.rolls[1]..'–'..pool.rolls[2] ) ) local total_weight = 0 for itemname, item in pairs(pool.items) do total_weight = total_weight + item[3] end pool.totalweight = total_weight q.fill_in_chest_item_details( chest.itemDataJavaUpcoming, pool, #chest.allRollsJavaUpcoming ) end chest.allRollsBedrock = {} chest.itemDataBedrock = {} for k, pool in pairs( chest.poolsBedrock or chest.poolsJava or {} ) do table.insert( chest.allRollsBedrock, ( pool.rolls[1] == pool.rolls[2] and pool.rolls[1] or pool.rolls[1]..'–'..pool.rolls[2] ) ) local total_weight = 0 for itemname, item in pairs(pool.items) do total_weight = total_weight + item[3] end pool.totalweight = total_weight q.fill_in_chest_item_details( chest.itemDataBedrock, pool, #chest.allRollsBedrock ) end chest.allRollsBedrockUpcoming = {} chest.itemDataBedrockUpcoming = {} for k, pool in pairs( chest.poolsBedrockUpcoming or chest.poolsJava or {} ) do table.insert( chest.allRollsBedrockUpcoming, ( pool.rolls[1] == pool.rolls[2] and pool.rolls[1] or pool.rolls[1]..'–'..pool.rolls[2] ) ) local total_weight = 0 for itemname, item in pairs(pool.items) do total_weight = total_weight + item[3] end pool.totalweight = total_weight q.fill_in_chest_item_details( chest.itemDataBedrockUpcoming, pool, #chest.allRollsBedrockUpcoming ) end end end, fill_in_chest_item_details = function( data, pool, ct ) for item_name, item in pairs(pool.items) do if p.items[item_name] then local min_stacksize = item[1] local max_stacksize = item[2] local min_pool_rolls = pool.rolls[1] local max_pool_rolls = pool.rolls[2] local item_weight = item[3] if data[item_name] == nil then data[item_name] = { avgamount = 0, chanceany = 0, itemname = item_name, sortsize = {}, sortweight = {}, sizes = {}, weights = {}, } for i = 1, ct-1 do data[item_name].sortsize[i] = 0 data[item_name].sortweight[i] = 0 data[item_name].sizes[i] = '—' data[item_name].weights[i] = '—' end end data[item_name].avgamount = data[item_name].avgamount + p.calc_average_amount_this_item_per_pool( min_stacksize, max_stacksize, min_pool_rolls, max_pool_rolls, item_weight, pool.totalweight ) data[item_name].chanceany = data[item_name].chanceany + (1 - data[item_name].chanceany) * p.calc_chance_any_of_this_item_per_pool( min_pool_rolls, max_pool_rolls, item_weight, pool.totalweight ) data[item_name].sortsize[ct] = ( min_stacksize + max_stacksize ) / 2 data[item_name].sortweight[ct] = item_weight; data[item_name].sizes[ct] = ( min_stacksize == max_stacksize and min_stacksize or min_stacksize .. '–' .. max_stacksize ) data[item_name].weights[ct] = p.current_frame:expandTemplate{ title = 'frac', args = { item_weight, pool.totalweight } } end end for item_name, d in pairs(data) do if not d.sizes[ct] then d.sortsize[ct] = 0 d.sortweight[ct] = 0 d.sizes[ct] = '—' d.weights[ct] = '—' end end end, construct_ordered_items_from_first_chest = function( chest_names, suffix ) local items_from_first_table = {} local item_chests = {} local item_names_ordered = {} for item_name, item in pairs( p.chests[chest_names[1]]['itemData'..suffix] ) do table.insert( items_from_first_table, item ) end table.sort( items_from_first_table, q.sort_items ) for k, item in pairs( items_from_first_table ) do table.insert( item_names_ordered, item.itemname ) item_chests[item.itemname] = true end return item_names_ordered, item_chests end, get_ordered_items_from_other_chests = function( chest_names, item_chests, suffix ) local items_not_from_first_table = {} for chest_idx = 2, #chest_names do for item_name, item in pairs( p.chests[chest_names[chest_idx]]['itemData'..suffix] ) do if item_chests[item_name] == nil then p.items[item_name].itemname = item_name table.insert( items_not_from_first_table, p.chests[chest_names[chest_idx]]['itemData'..suffix][item_name] ) item_chests[item_name] = true end end end table.sort( items_not_from_first_table, q.sort_items ) return items_not_from_first_table end, add_other_items_to_first_list = function( chest_names, item_names_ordered, item_chests, items_not_from_first_table ) for k, item in pairs( items_not_from_first_table ) do table.insert( item_names_ordered, item.itemname ) end return item_names_ordered end, set_up_ordered_item_rows = function( chest_names, item_names_ordered, suffix ) for k, itemname in pairs(item_names_ordered) do item_names_ordered[k] = {itemname} for chest_idx = 1, #chest_names do if suffix == 'JavaUpcoming' or p.chests[chest_names[chest_idx]]['pools'..suffix] ~= nil then local item_data = p.chests[chest_names[chest_idx]]['itemData'..suffix][itemname] if item_data == nil then table.insert( item_names_ordered[k], false ) else table.insert( item_names_ordered[k], item_data ) end end end end return item_names_ordered end, construct_ordered_item_rows = function( chest_names, suffix ) -- for the first chest, sort its by chance desc, then by avg amount desc, then alphabetically asc local item_names_ordered, item_chests = q.construct_ordered_items_from_first_chest( chest_names, suffix ) if #chest_names > 1 then -- after that, sort all the remaining items in list order local items_not_from_first_table = q.get_ordered_items_from_other_chests( chest_names, item_chests, suffix ) item_names_ordered = q.add_other_items_to_first_list( chest_names, item_names_ordered, item_chests, items_not_from_first_table ) end -- set up item_names_ordered so that each is a row, representing chest values item_names_ordered = q.set_up_ordered_item_rows( chest_names, item_names_ordered, suffix ) return item_names_ordered end, print_table = function( chest_names, columns, ordered_item_rows, suffix ) local html = {} local use_roll_row = false local use_superheader = false local superheader_sizes = {} for i = 1, #chest_names do sh = p.chests[chest_names[i]].superheader if sh ~= nil then if superheader_sizes[sh] == nil then superheader_sizes[sh] = 0 end superheader_sizes[sh] = superheader_sizes[sh] + 1 if #chest_names > 1 then use_superheader = true end end local allRolls = p.chests[chest_names[i]]['allRolls'..suffix] if #allRolls > 1 then use_roll_row = true end end if columns['stacksize'] == nil and columns['weight'] == nil then use_roll_row = false end local rowspan = ( #chest_names > 1 and 1 or 0 ) + ( use_superheader and 1 or 0 ) + 1 local hide_col_description = rowspan > 1 and q.tablelength(columns) == 1 if use_roll_row then rowspan = rowspan + 1 end if q.tablelength(columns) == 1 then for column_name, v in pairs(columns) do table.insert( html, "Values represent " ) table.insert( html, p.columns[column_name]:lower() ) table.insert( html, "\n" ) end end if #chest_names == 1 then if q.tablelength(columns) == 1 then table.insert( html, "<br>" ) end local chest_name = chest_names[1] local allRolls = p.chests[chest_name]['allRolls'..suffix] local chest_type = p.chests[chest_name].chest_type or "chest" local display_name = p.chests[chest_name].display_name chest_name = chest_name:gsub( "-", " " ) table.insert( html, "Each " ) table.insert( html, display_name or chest_name ) if chest_type ~= 'chest' and chest_type ~= 'minecart with chest' then table.insert( html, " contains " ) else table.insert( html, " chest contains " ) end if #allRolls == 1 then table.insert( html, allRolls[1] ) table.insert( html, " item stacks, " ) else table.insert( html, ' items drawn from ' ) table.insert( html, #allRolls ) table.insert( html, ' pools, ' ) end table.insert( html, " with the following distribution: \n" ) end table.insert( html, '<div style="overflow:auto">\n' ) table.insert( html, '<table class="wikitable sortable jquery-tablesorter">\n' ) table.insert( html, "<tr>\n" ) table.insert( html, "<th rowspan=" ) table.insert( html, ( rowspan - ( hide_col_description and 1 or 0 ) ) ) table.insert( html, "> Item </th>\n" ) local superheader_cols_used = {} if #chest_names > 1 then local row1, row2 = {}, {} for i = 1, #chest_names do if suffix == 'JavaUpcoming' or p.chests[chest_names[i]]['pools'..suffix] ~= nil then local allRolls = p.chests[chest_names[i]]['allRolls'..suffix] local colspan = q.tablelength(columns) local allRollsSpan = #allRolls == 0 and 1 or #allRolls if columns['stacksize'] ~= nil then colspan = colspan - 1 + allRollsSpan end if columns['weight'] ~= nil then colspan = colspan - 1 + allRollsSpan end local row = row1 rowspan = 1 if use_superheader then sh = p.chests[chest_names[i]].superheader if sh ~= nil then if superheader_cols_used[sh] == nil then table.insert( row, "<th colspan=" ) table.insert( row, ( colspan * superheader_sizes[sh] ) ) table.insert( row, ">" ) table.insert( row, sh ) table.insert( row, "</th>\n" ) superheader_cols_used[sh] = 0 end row = row2 else rowspan = rowspan + 1 end end if use_roll_row and hide_col_description and #allRolls < 2 then rowspan = rowspan + 1 end table.insert( row, "<th colspan=" ) table.insert( row, colspan ) if rowspan > 1 then table.insert( row, " rowspan=" ) table.insert( row, rowspan ) end table.insert( row, ">" ) table.insert( row, p.chests[ chest_names[i] ].header ) if #allRolls > 0 then table.insert( row, ' <br><span style="font-weight:normal; font-style:italic; font-size:11px;">(' ) if #allRolls == 1 then table.insert( row, allRolls[1] ) else local s = ( #allRolls > 2 and ', ' or ' ' ) for i = 1, #allRolls-1 do table.insert( row, allRolls[i] ) table.insert( row, s ) end table.insert( row, 'and ' ) table.insert( row, allRolls[#allRolls] ) end table.insert( row, ' stacks)</span>' ) end table.insert( row, "</th>\n" ) end end table.insert( html, table.concat( row1 ) ) table.insert( html, "</tr><tr>\n" ) if #row2 then table.insert( html, table.concat( row2 ) ) table.insert( html, "</tr><tr>\n" ) end end if not hide_col_description then local headersort_th_open if use_roll_row then headersort_th_open = "<th rowspan='2' class='headersort' role='columnheader button' data-sort-type='number'> <abbr title='" else headersort_th_open = "<th class='headersort' role='columnheader button' data-sort-type='number'> <abbr title='" end for i = 1, #chest_names do if suffix == 'JavaUpcoming' or p.chests[chest_names[i]]['pools'..suffix] ~= nil then local allRolls = p.chests[chest_names[i]]['allRolls'..suffix] local allRollsSpan = #allRolls == 0 and 1 or #allRolls local headersort_th_colspan_open if #allRolls > 1 then headersort_th_colspan_open = "<th colspan='" .. allRollsSpan .. "' role='columnheader'> <abbr title='" else headersort_th_colspan_open = headersort_th_open end if columns['stacksize'] ~= nil then table.insert( html, headersort_th_colspan_open ) table.insert( html, p.columns['stacksize'] ) table.insert( html, "'> Stack Size </abbr> <span class=mobileonly>") table.insert( html, p.current_frame:extensionTag{ name = 'ref', content = p.columns['stacksize'], args = { name = 'stacksize', group = 'FN' } } ) table.insert( html, "</span></th>\n" ) end if columns['weight'] ~= nil then table.insert( html, headersort_th_colspan_open ) table.insert( html, p.columns['weight'] ) table.insert( html, "'> Weight </abbr> <span class=mobileonly> ") table.insert( html, p.current_frame:extensionTag{ name = 'ref', content = p.columns['weight'], args = { name = 'weight', group = 'FN' } } ) table.insert( html, "</span></th>\n" ) end if columns['chance'] ~= nil then table.insert( html, headersort_th_open ) table.insert( html, p.columns['chance'] ) table.insert( html, "'> Chance </abbr> <span class=mobileonly> ") table.insert( html, p.current_frame:extensionTag{ name = 'ref', content = p.columns['chance'], args = { name = 'chance', group = 'FN' } } ) table.insert( html, "</span></th>\n" ) end if columns['items'] ~= nil then table.insert( html, headersort_th_open ) table.insert( html, p.columns['items'] ) table.insert( html, "'> Avg.<br>per chest </abbr> <span class=mobileonly> ") table.insert( html, p.current_frame:extensionTag{ name = 'ref', content = p.columns['items'], args = { name = 'items', group = 'FN' } } ) table.insert( html, "</span></th>\n" ) end if columns['chests'] ~= nil then table.insert( html, headersort_th_open ) table.insert( html, p.columns['chests'] ) table.insert( html, "'> Avg. # chests<br>to search </abbr> <span class=mobileonly> ") table.insert( html, p.current_frame:extensionTag{ name = 'ref', content = p.columns['chests'], args = { name = 'chests', group = 'FN' } } ) table.insert( html, "</span></th>\n" ) end end end table.insert( html, "</tr><tr>\n" ) end if use_roll_row then local rowcols = ( columns['stacksize'] ~= nil and 1 or 0 ) + ( columns['weight'] ~= nil and 1 or 0 ) for i = 1, #chest_names do local allRolls = p.chests[chest_names[i]]['allRolls'..suffix] if #allRolls > 1 then for j = 1, rowcols do for k = 1, #allRolls do table.insert( html, "<th class='headersort' role='columnheader button' data-sort-type='number' style='font-weight:normal'><abbr title='The chest draws " ) table.insert( html, allRolls[k] ) table.insert( html, " stack(s) randomly from this pool.'>" ) table.insert( html, allRolls[k] ) table.insert( html, "×</abbr></th>\n" ) end end end end table.insert( html, "</tr><tr>\n" ) end for i = 1, #ordered_item_rows do if type( ordered_item_rows[i] ) == "table" then for j = 1, #ordered_item_rows[i] do local chest_item = ordered_item_rows[i][j] if type( chest_item ) == "table" then local avg_amount = string.format("%.3f", chest_item.avgamount) local chance_any = string.format("%.1f", chest_item.chanceany*100) .. "%" local num_chests = string.format("%.1f", 1/chest_item.chanceany) table.insert( html, "\n" ) if columns['stacksize'] ~= nil then for k = 1, #chest_item.sizes do table.insert( html, "<td style='text-align:center;' data-sort-value='" ) table.insert( html, ( chest_item.sortsize[k] == 0 and "9e99" or chest_item.sortsize[k] ) ) table.insert( html, "'>" ) table.insert( html, chest_item.sizes[k] ) table.insert( html, "</td>" ) end end if columns['weight'] ~= nil then for k = 1, #chest_item.sizes do table.insert( html, "<td style='text-align:center;' data-sort-value='" ) table.insert( html, ( chest_item.sortweight[k] == 0 and "9e99" or chest_item.sortweight[k] ) ) table.insert( html, "'>" ) table.insert( html, chest_item.weights[k] ) table.insert( html, "</td>" ) end end if columns['chance'] ~= nil then table.insert( html, "<td style='text-align:center;'>" ) table.insert( html, chance_any ) table.insert( html, "</td>" ) end if columns['items'] ~= nil then table.insert( html, "<td style='text-align:center;'>" ) table.insert( html, avg_amount ) table.insert( html, "</td>" ) end if columns['chests'] ~= nil then table.insert( html, "<td style='text-align:center;'>" ) table.insert( html, num_chests ) table.insert( html, "</td>" ) end elseif type( chest_item ) == "boolean" then local allRolls = p.chests[chest_names[j-1]]['allRolls'..suffix] local allRollsSpan = #allRolls == 0 and 1 or #allRolls table.insert( html, "\n" ) if columns['stacksize'] ~= nil then for k = 1, allRollsSpan do table.insert( html, "<td data-sort-value='9e99' style='text-align:center;'>—</td>" ) end end if columns['weight'] ~= nil then for k = 1, allRollsSpan do table.insert( html, "<td data-sort-value='9e99' style='text-align:center;'>—</td>" ) end end if columns['chance'] ~= nil then table.insert( html, "<td data-sort-value='9e99' style='text-align:center;'>—</td>" ) end if columns['items'] ~= nil then table.insert( html, "<td data-sort-value='9e99' style='text-align:center;'>—</td>" ) end if columns['chests'] ~= nil then table.insert( html, "<td data-sort-value='9e99' style='text-align:center;'>—</td>" ) end else if i > 1 then table.insert( html, "</tr><tr>" ) end local item = p.items[chest_item] local s = require( 'Module:Sprite' ) table.insert( html, "\n<td>" ) local image, spriteCat = s.link { id = item.id or chest_item, link = item.link or string.gsub(chest_item,'-',' '), text = item.title or q.titlecase(string.gsub(chest_item,'-',' ')), wrap = 'true', data = ( item[1] == 'item' and 'ItemSprite' or 'BlockSprite' ) } table.insert( html, image ) table.insert( html, spriteCat ) if item.note and p.notes[item.note] then table.insert( html, p.current_frame:extensionTag( 'ref', p.notes[item.note], { group='FN', name=item.note } ) ) end if item.note1 and p.notes[item.note1] then if item.note == nil or p.notes[item.note] == nil or item.note ~= item.note1 then table.insert( html, p.current_frame:extensionTag( 'ref', p.notes[item.note1], { group='FN', name=item.note1 } ) ) end end table.insert( html, "</td>" ) end if j == #ordered_item_rows[i] then table.insert( html, "</tr>" ) end end table.insert( html, "\n" ) end end table.insert( html, "</table></div>") return table.concat( html ) end, titlecase = function( str ) local buf = {} for word in string.gfind(str, "%S+") do if word == "and" then table.insert( buf, word ) else local first, rest = string.sub( word, 1, 1 ), string.sub( word, 2 ) table.insert( buf, string.upper(first) .. string.lower(rest) ) end end return table.concat( buf, " " ) end, capitalize = function( str ) return ( string.lower(str):gsub( "^%l", string.upper ) ) end, lcfirst = function( str ) return ( string.gsub( str, "^%u", string.lower ) ) end, compare_tables = function( a, b ) local seen = {} for k, v in pairs( a ) do if type( v ) ~= type( b[k] ) then return true end if v ~= b[k] then return true end if type( v ) == 'table' and q.compare_tables( v, b[k] ) then return true end seen[k] = true end for k, v in pairs( b ) do if not seen[k] then return true end end return false end, } string.lpad = function(str, len, char) if char == nil then char = ' ' end return string.rep(char, len - #(''..str)) .. str end return p