diff --git a/docs/scarpet/api/Auxiliary.md b/docs/scarpet/api/Auxiliary.md index 1a7d3c33..78f61be4 100644 --- a/docs/scarpet/api/Auxiliary.md +++ b/docs/scarpet/api/Auxiliary.md @@ -4,7 +4,7 @@ Collection of other methods that control smaller, yet still important aspects of ## Sounds -### `sound(name, pos, volume?, pitch?, mixer?)` +### `sound()`, `sound(name, pos, volume?, pitch?, mixer?)` Plays a specific sound `name`, at block or position `pos`, with optional `volume` and modified `pitch`, and under optional `mixer`. Default values for `volume`, `pitch` and `mixer` are `1.0`, `1.0`, and `master`. @@ -12,17 +12,23 @@ Valid mixer options are `master`, `music`, `record`, `weather`, `block`, `hostil and `voice`. `pos` can be either a block, triple of coords, or a list of thee numbers. Uses the same options as a corresponding `playsound` command. +Used with no arguments, return the list of available sound names. + Throws `unknown_sound` if sound doesn't exist. ## Particles -### `particle(name, pos, count?. spread?, speed?, player?)` +### `particle()`, `particle(name, pos, count?. spread?, speed?, player?)` Renders a cloud of particles `name` centered around `pos` position, by default `count` 10 of them, default `speed` of 0, and to all players nearby, but these options can be changed via optional arguments. Follow vanilla `/particle` command on details on those options. Valid particle names are for example `'angry_villager', 'item diamond', 'block stone', 'dust 0.8 0.1 0.1 4'`. +Used with no arguments, return the list of available particle names. Note that some of the names do not correspond to a valid +particle that can be fed to `particle(...)` function due to a fact that some particles need more configuration +to be valid, like `dust`, `block` etc. Should be used as a reference only. + Throws `unknown_particle` if particle doesn't exist. ### `particle_line(name, pos, pos2, density?, player?)` diff --git a/docs/scarpet/api/BlocksAndWorldAccess.md b/docs/scarpet/api/BlocksAndWorldAccess.md index 3f27bb4d..bcde5013 100644 --- a/docs/scarpet/api/BlocksAndWorldAccess.md +++ b/docs/scarpet/api/BlocksAndWorldAccess.md @@ -315,13 +315,13 @@ used to match specific information from it, or use it to copy to another block
    block_data(x,y,z) => '{TransferCooldown:0,x:450,y:68, ... }'
 
-### `poi(pos), poi(pos, radius?, type?, status?, column?)` +### `poi(pos), poi(pos, radius?, type?, status?, column_search?)` Queries a POI (Point of Interest) at a given position, returning `null` if none is found, or tuple of poi type and its occupancy load. With optional `type`, `radius` and `status`, returns a list of POIs around `pos` within a given `radius`. If the `type` is specified, returns only poi types of that types, or everything if omitted or `'any'`. If `status` is specified (either `'any'`, `'available'`, or `'occupied'`) returns only POIs with that status. -With `column` set to `true`, it will return all POIs in a cuboid with `radius` blocks away on x and z, in the entire +With `column_search` set to `true`, it will return all POIs in a cuboid with `radius` blocks away on x and z, in the entire block column from 0 to 255. Default (`false`) returns POIs within a spherical area centered on `pos` and with `radius` radius. diff --git a/src/main/java/carpet/script/api/Auxiliary.java b/src/main/java/carpet/script/api/Auxiliary.java index 3c5ce547..a1aaec2f 100644 --- a/src/main/java/carpet/script/api/Auxiliary.java +++ b/src/main/java/carpet/script/api/Auxiliary.java @@ -163,6 +163,11 @@ public class Auxiliary { { expression.addLazyFunction("sound", -1, (c, t, lv) -> { CarpetContext cc = (CarpetContext)c; + if (lv.size() == 0) + { + Value ret = ListValue.wrap(Registry.SOUND_EVENT.getIds().stream().map(ValueConversions::of)); + return (_c, _t) -> ret; + } String rawString = lv.get(0).evalValue(c).getString(); Identifier soundName = new Identifier(rawString); Vector3Argument locator = Vector3Argument.findIn(cc, lv, 1); @@ -200,6 +205,12 @@ public class Auxiliary { expression.addLazyFunction("particle", -1, (c, t, lv) -> { CarpetContext cc = (CarpetContext)c; + if (lv.size() == 0) + { + Value ret = ListValue.wrap(Registry.PARTICLE_TYPE.getIds().stream().map(ValueConversions::of)); + return (_c, _t) -> ret; + } + MinecraftServer ms = cc.s.getMinecraftServer(); ServerWorld world = cc.s.getWorld(); Vector3Argument locator = Vector3Argument.findIn(cc, lv, 1);