Skip to main content

While / For Loops

You can easily recurse given in-game conditions using Sandstone's builtin while, and iterate over a range/dataset using the builtin for.

While

To check a condition, the following syntax is used:

_
.while(condition, () => {
say('Condition is true')
/**
* Invalidate condition once the intended function has been fulfilled.
*/
})

Refer to the if documentation for details on conditions

For (number)

Classic Iterator

_.for = (initial: number | Score, continue: (i: Score) => Condition, iterate: (i: Score) => Score, callback: (i: Score) => any)
_
.for(0, i => i['<='](10), i => i['++'], i => {
// Uses the score component in tellraw
tellraw('@a', i)
})

Range Iterator

_.for = (range: [start: number | Score, end: number | Score], _: 'iterate', callback: (i: Score) => any)
_
.for([0, 10], 'iterate', i => {
// Uses the score component in tellraw
tellraw('@a', i)
})

Binary Iterator

_.for = (range: [start: number | Score, end: number | Score, maximum?: number], _: 'iterate', callback: (i: Score) => any)

Allows you to use the number directly in your commands via a binary tree

_
.for([0, 10, 10], 'binary', i => {
say(`${i}`)
})

For (of)

const test_map = DataIndexMap({
foo: 'bar',
baz: 'test'
})
/**
* {
* Entries: [['foo', 'bar'], ['baz', 'test']]
* Index: {
* foo: 0,
* baz: 1
* }
* }
*/

const test_array = DataArray(['foo', 'bar', 'baz'])
/**
* ['foo', 'bar', 'baz']
*/

All DataSets

_
.for('entry', 'of', test_map, entry => {
tellraw('@a', entry)
})
_
.for('entry', 'of', test_array, entry => {
tellraw('@a', entry)
})

Arrays

_
.for(['i', 'entry'], 'of', test_array, (i, entry) => {
tellraw('@a', [i, entry])
})

IndexMaps

_
.for(['key', 'value'], 'of', test_map, (key, value) => {
tellraw('@a', [key, value])
})