Difference between revisions of "Module:LootChest"
Jump to navigation
Jump to search
Planks>Underfell Flowey m |
m (1 revision imported) |
Latest revision as of 13:14, 13 May 2021
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