interface block-entity { use common.{block-pos}; resource block-entity { resource-location: func() -> string; get-position: func() -> block-pos; get-id: func() -> u32; is-dirty: func() -> bool; clear-dirty: func(); } resource command-block-entity { get-block-entity: func () -> block-entity; last-output: func() -> string; track-output: func() -> bool; success-count: func() -> u32; command: func() -> string; auto: func() -> bool; condition-met: func() -> bool; powered: func() -> bool; } enum dye-color { white, orange, magenta, light-blue, yellow, lime, pink, gray, light-gray, cyan, purple, blue, brown, green, red, black, } record sign-text { messages: list, color: dye-color, has-glowing-text: bool, } resource sign-block-entity { get-block-entity: func() -> block-entity; get-front-text: func() -> sign-text; set-front-text: func(text: sign-text); get-back-text: func() -> sign-text; set-back-text: func(text: sign-text); is-waxed: func() -> bool; set-waxed: func(waxed: bool); } resource jukebox-block-entity { get-block-entity: func() -> block-entity; is-playing: func() -> bool; stop-playing: func(); start-playing: func(length-in-ticks: u64); } resource chest-block-entity { get-block-entity: func() -> block-entity; viewer-count: func() -> u32; } resource mob-spawner-block-entity { get-block-entity: func() -> block-entity; get-spawn-count: func() -> s32; get-spawn-range: func() -> s32; get-delay: func() -> s32; } variant block-entity-type { command-block-entity(command-block-entity), sign-block-entity(sign-block-entity), jukebox-block-entity(jukebox-block-entity), chest-block-entity(chest-block-entity), mob-spawner-block-entity(mob-spawner-block-entity), } }