blocks.bend source
blocks.bend on the hub · documented module
import Base# Block IDs: 0 air, 1 grass, 2 dirt, 3 stone, 4 wood_log,# 5 leaves, 6 sand, 7 water, 8 bedrock, 9 planks, 10 glass, 11 coal_ore,# 12 sandstone, 13 gravel, 14 birch_log, 15 tall_grass, 16 rose_flower,# 17 snow_layer, 18 ice, 19 obsidian, 20 pumpkin, 21 cactus.# IDs 0-11 keep their original meaning; 12-21 are additive.def Block.air() -> U32: 0def Block.grass() -> U32: 1def Block.dirt() -> U32: 2def Block.stone() -> U32: 3def Block.wood_log() -> U32: 4def Block.leaves() -> U32: 5def Block.sand() -> U32: 6def Block.water() -> U32: 7def Block.bedrock() -> U32: 8def Block.planks() -> U32: 9def Block.glass() -> U32: 10def Block.coal_ore() -> U32: 11def Block.sandstone() -> U32: 12def Block.gravel() -> U32: 13def Block.birch_log() -> U32: 14def Block.tall_grass() -> U32: 15def Block.rose_flower() -> U32: 16def Block.snow_layer() -> U32: 17def Block.ice() -> U32: 18def Block.obsidian() -> U32: 19def Block.pumpkin() -> U32: 20def Block.cactus() -> U32: 21# RGB packed 0xRRGGBB. Air is 0. Invalid IDs give magenta.# grass 0x5DB83C=6142012, dirt 0x8A5A2B=9067051, stone 0x888888=8947848,# wood 0x6B4A2A=7031338, leaves 0x2E8B2E=3050286, sand 0xE3D79B=14931867,# water 0x3B6FD4=3895252, bedrock 0x333333=3355443, planks 0xB08A4F=11569743,# glass 0xDDF2FF=14545663, coal 0x555555=5592405.# New palette 12-21 (additive; 00..11 behavior for IDs 0-11 unchanged,# overflow past 21 still answers magenta 16711935).# sandstone 0xE7D8A4=15194276, gravel 0x837E73=8617587,# birch_log 0xD8D8D0=14211280, tall_grass 0x4A9E2F=4890159,# rose_flower 0xD42A2A=13904426, snow_layer 0xF2FBFB=15924219,# ice 0xA8D8F0=11065584, obsidian 0x1A1026=1708070,# pumpkin 0xE08A1E=14715422, cactus 0x2E7D32=3046706.def Block.color21(n: Nat) -> U32: match n: case 0n: 3046706 case 1n+p: 16711935def Block.color20(n: Nat) -> U32: match n: case 0n: 14715422 case 1n+p: Block.color21(p)def Block.color19(n: Nat) -> U32: match n: case 0n: 1708070 case 1n+p: Block.color20(p)def Block.color18(n: Nat) -> U32: match n: case 0n: 11065584 case 1n+p: Block.color19(p)def Block.color17(n: Nat) -> U32: match n: case 0n: 15924219 case 1n+p: Block.color18(p)def Block.color16(n: Nat) -> U32: match n: case 0n: 13904426 case 1n+p: Block.color17(p)def Block.color15(n: Nat) -> U32: match n: case 0n: 4890159 case 1n+p: Block.color16(p)def Block.color14(n: Nat) -> U32: match n: case 0n: 14211280 case 1n+p: Block.color15(p)def Block.color13(n: Nat) -> U32: match n: case 0n: 8617587 case 1n+p: Block.color14(p)def Block.color12(n: Nat) -> U32: match n: case 0n: 15194276 case 1n+p: Block.color13(p)def Block.color11(n: Nat) -> U32: match n: case 0n: 5592405 case 1n+p: Block.color12(p)def Block.color10(n: Nat) -> U32: match n: case 0n: 14545663 case 1n+p: Block.color11(p)def Block.color09(n: Nat) -> U32: match n: case 0n: 11569743 case 1n+p: Block.color10(p)def Block.color08(n: Nat) -> U32: match n: case 0n: 3355443 case 1n+p: Block.color09(p)def Block.color07(n: Nat) -> U32: match n: case 0n: 3895252 case 1n+p: Block.color08(p)def Block.color06(n: Nat) -> U32: match n: case 0n: 14931867 case 1n+p: Block.color07(p)def Block.color05(n: Nat) -> U32: match n: case 0n: 3050286 case 1n+p: Block.color06(p)def Block.color04(n: Nat) -> U32: match n: case 0n: 7031338 case 1n+p: Block.color05(p)def Block.color03(n: Nat) -> U32: match n: case 0n: 8947848 case 1n+p: Block.color04(p)def Block.color02(n: Nat) -> U32: match n: case 0n: 9067051 case 1n+p: Block.color03(p)def Block.color01(n: Nat) -> U32: match n: case 0n: 6142012 case 1n+p: Block.color02(p)def Block.color00(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.color01(p)def Block.color(b: U32) -> U32: Block.color00(U32.to_nat(b))# Solid is false for air and water, true otherwise.# Glass is solid but transparent.# Solid 12-21: sandstone/gravel/birch solid, tall_grass/rose/snow non-solid,# ice/obsidian/pumpkin/cactus solid. Overflow past 21 still False.# Keeps 00..11 behavior for IDs 0-11.def Block.solid21(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: False{}def Block.solid20(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid21(p)def Block.solid19(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid20(p)def Block.solid18(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid19(p)def Block.solid17(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.solid18(p)def Block.solid16(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.solid17(p)def Block.solid15(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.solid16(p)def Block.solid14(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid15(p)def Block.solid13(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid14(p)def Block.solid12(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid13(p)def Block.solid11(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid12(p)def Block.solid10(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid11(p)def Block.solid09(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid10(p)def Block.solid08(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid09(p)def Block.solid07(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.solid08(p)def Block.solid06(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid07(p)def Block.solid05(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid06(p)def Block.solid04(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid05(p)def Block.solid03(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid04(p)def Block.solid02(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid03(p)def Block.solid01(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.solid02(p)def Block.solid00(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.solid01(p)def Block.solid(b: U32) -> Bool: Block.solid00(U32.to_nat(b))# Transparent is true for air, leaves, water and glass.# Transparent 12-21: sandstone/gravel/birch opaque, tall_grass/rose/snow/ice# transparent, obsidian/pumpkin/cactus opaque. Overflow past 21 still True.def Block.transparent21(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: True{}def Block.transparent20(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent21(p)def Block.transparent19(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent20(p)def Block.transparent18(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.transparent19(p)def Block.transparent17(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.transparent18(p)def Block.transparent16(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.transparent17(p)def Block.transparent15(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.transparent16(p)def Block.transparent14(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent15(p)def Block.transparent13(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent14(p)def Block.transparent12(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent13(p)def Block.transparent11(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent12(p)def Block.transparent10(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.transparent11(p)def Block.transparent09(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent10(p)def Block.transparent08(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent09(p)def Block.transparent07(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.transparent08(p)def Block.transparent06(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent07(p)def Block.transparent05(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.transparent06(p)def Block.transparent04(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent05(p)def Block.transparent03(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent04(p)def Block.transparent02(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent03(p)def Block.transparent01(n: Nat) -> Bool: match n: case 0n: False{} case 1n+p: Block.transparent02(p)def Block.transparent00(n: Nat) -> Bool: match n: case 0n: True{} case 1n+p: Block.transparent01(p)def Block.transparent(b: U32) -> Bool: Block.transparent00(U32.to_nat(b))# Human-readable names.# Names 12-21 additive; overflow past 21 still "unknown".def Block.name21(n: Nat) -> String: match n: case 0n: "cactus" case 1n+p: "unknown"def Block.name20(n: Nat) -> String: match n: case 0n: "pumpkin" case 1n+p: Block.name21(p)def Block.name19(n: Nat) -> String: match n: case 0n: "obsidian" case 1n+p: Block.name20(p)def Block.name18(n: Nat) -> String: match n: case 0n: "ice" case 1n+p: Block.name19(p)def Block.name17(n: Nat) -> String: match n: case 0n: "snow_layer" case 1n+p: Block.name18(p)def Block.name16(n: Nat) -> String: match n: case 0n: "rose_flower" case 1n+p: Block.name17(p)def Block.name15(n: Nat) -> String: match n: case 0n: "tall_grass" case 1n+p: Block.name16(p)def Block.name14(n: Nat) -> String: match n: case 0n: "birch_log" case 1n+p: Block.name15(p)def Block.name13(n: Nat) -> String: match n: case 0n: "gravel" case 1n+p: Block.name14(p)def Block.name12(n: Nat) -> String: match n: case 0n: "sandstone" case 1n+p: Block.name13(p)def Block.name11(n: Nat) -> String: match n: case 0n: "coal_ore" case 1n+p: Block.name12(p)def Block.name10(n: Nat) -> String: match n: case 0n: "glass" case 1n+p: Block.name11(p)def Block.name09(n: Nat) -> String: match n: case 0n: "planks" case 1n+p: Block.name10(p)def Block.name08(n: Nat) -> String: match n: case 0n: "bedrock" case 1n+p: Block.name09(p)def Block.name07(n: Nat) -> String: match n: case 0n: "water" case 1n+p: Block.name08(p)def Block.name06(n: Nat) -> String: match n: case 0n: "sand" case 1n+p: Block.name07(p)def Block.name05(n: Nat) -> String: match n: case 0n: "leaves" case 1n+p: Block.name06(p)def Block.name04(n: Nat) -> String: match n: case 0n: "wood_log" case 1n+p: Block.name05(p)def Block.name03(n: Nat) -> String: match n: case 0n: "stone" case 1n+p: Block.name04(p)def Block.name02(n: Nat) -> String: match n: case 0n: "dirt" case 1n+p: Block.name03(p)def Block.name01(n: Nat) -> String: match n: case 0n: "grass" case 1n+p: Block.name02(p)def Block.name00(n: Nat) -> String: match n: case 0n: "air" case 1n+p: Block.name01(p)def Block.name(b: U32) -> String: Block.name00(U32.to_nat(b))# Light emission 0-21: pumpkin 20 glows 14, all others 0, overflow 0.def Block.light21(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: 0def Block.light20(n: Nat) -> U32: match n: case 0n: 14 case 1n+p: Block.light21(p)def Block.light19(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light20(p)def Block.light18(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light19(p)def Block.light17(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light18(p)def Block.light16(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light17(p)def Block.light15(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light16(p)def Block.light14(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light15(p)def Block.light13(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light14(p)def Block.light12(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light13(p)def Block.light11(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light12(p)def Block.light10(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light11(p)def Block.light09(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light10(p)def Block.light08(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light09(p)def Block.light07(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light08(p)def Block.light06(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light07(p)def Block.light05(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light06(p)def Block.light04(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light05(p)def Block.light03(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light04(p)def Block.light02(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light03(p)def Block.light01(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light02(p)def Block.light00(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.light01(p)def Block.light(b: U32) -> U32: Block.light00(U32.to_nat(b))# Hardness 0-21 in break ticks: air 0, grass 3, dirt 3, stone 6, wood 5,# leaves 1, sand 3, water 0, bedrock 9999, planks 4, glass 2, coal 7,# sandstone 5, gravel 3, birch 5, tall_grass 1, rose 1, snow 1, ice 2,# obsidian 20, pumpkin 3, cactus 2. Overflow 0.def Block.hard21(n: Nat) -> U32: match n: case 0n: 2 case 1n+p: 0def Block.hard20(n: Nat) -> U32: match n: case 0n: 3 case 1n+p: Block.hard21(p)def Block.hard19(n: Nat) -> U32: match n: case 0n: 20 case 1n+p: Block.hard20(p)def Block.hard18(n: Nat) -> U32: match n: case 0n: 2 case 1n+p: Block.hard19(p)def Block.hard17(n: Nat) -> U32: match n: case 0n: 1 case 1n+p: Block.hard18(p)def Block.hard16(n: Nat) -> U32: match n: case 0n: 1 case 1n+p: Block.hard17(p)def Block.hard15(n: Nat) -> U32: match n: case 0n: 1 case 1n+p: Block.hard16(p)def Block.hard14(n: Nat) -> U32: match n: case 0n: 5 case 1n+p: Block.hard15(p)def Block.hard13(n: Nat) -> U32: match n: case 0n: 3 case 1n+p: Block.hard14(p)def Block.hard12(n: Nat) -> U32: match n: case 0n: 5 case 1n+p: Block.hard13(p)def Block.hard11(n: Nat) -> U32: match n: case 0n: 7 case 1n+p: Block.hard12(p)def Block.hard10(n: Nat) -> U32: match n: case 0n: 2 case 1n+p: Block.hard11(p)def Block.hard09(n: Nat) -> U32: match n: case 0n: 4 case 1n+p: Block.hard10(p)def Block.hard08(n: Nat) -> U32: match n: case 0n: 9999 case 1n+p: Block.hard09(p)def Block.hard07(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.hard08(p)def Block.hard06(n: Nat) -> U32: match n: case 0n: 3 case 1n+p: Block.hard07(p)def Block.hard05(n: Nat) -> U32: match n: case 0n: 1 case 1n+p: Block.hard06(p)def Block.hard04(n: Nat) -> U32: match n: case 0n: 5 case 1n+p: Block.hard05(p)def Block.hard03(n: Nat) -> U32: match n: case 0n: 6 case 1n+p: Block.hard04(p)def Block.hard02(n: Nat) -> U32: match n: case 0n: 3 case 1n+p: Block.hard03(p)def Block.hard01(n: Nat) -> U32: match n: case 0n: 3 case 1n+p: Block.hard02(p)def Block.hard00(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.hard01(p)def Block.hard(b: U32) -> U32: Block.hard00(U32.to_nat(b))# Drops 0-21: grass->dirt 2, leaves/glass/water/bedrock/tall_grass/snow/ice->air 0,# others drop themselves (coal_ore->11 lawful). Overflow 0.def Block.drop21(n: Nat) -> U32: match n: case 0n: 21 case 1n+p: 0def Block.drop20(n: Nat) -> U32: match n: case 0n: 20 case 1n+p: Block.drop21(p)def Block.drop19(n: Nat) -> U32: match n: case 0n: 19 case 1n+p: Block.drop20(p)def Block.drop18(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.drop19(p)def Block.drop17(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.drop18(p)def Block.drop16(n: Nat) -> U32: match n: case 0n: 16 case 1n+p: Block.drop17(p)def Block.drop15(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.drop16(p)def Block.drop14(n: Nat) -> U32: match n: case 0n: 14 case 1n+p: Block.drop15(p)def Block.drop13(n: Nat) -> U32: match n: case 0n: 13 case 1n+p: Block.drop14(p)def Block.drop12(n: Nat) -> U32: match n: case 0n: 12 case 1n+p: Block.drop13(p)def Block.drop11(n: Nat) -> U32: match n: case 0n: 11 case 1n+p: Block.drop12(p)def Block.drop10(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.drop11(p)def Block.drop09(n: Nat) -> U32: match n: case 0n: 9 case 1n+p: Block.drop10(p)def Block.drop08(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.drop09(p)def Block.drop07(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.drop08(p)def Block.drop06(n: Nat) -> U32: match n: case 0n: 6 case 1n+p: Block.drop07(p)def Block.drop05(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.drop06(p)def Block.drop04(n: Nat) -> U32: match n: case 0n: 4 case 1n+p: Block.drop05(p)def Block.drop03(n: Nat) -> U32: match n: case 0n: 3 case 1n+p: Block.drop04(p)def Block.drop02(n: Nat) -> U32: match n: case 0n: 2 case 1n+p: Block.drop03(p)def Block.drop01(n: Nat) -> U32: match n: case 0n: 2 case 1n+p: Block.drop02(p)def Block.drop00(n: Nat) -> U32: match n: case 0n: 0 case 1n+p: Block.drop01(p)def Block.drop(b: U32) -> U32: Block.drop00(U32.to_nat(b))