5.4 KiB
API
World
The API is split in 2 :
- the World which is async
- the World.sync which is sync
The characteristics of the async world is that it will always return something when getting a block, but as a promise. To achieve this it may load columns from anvil files or other storage. On the other hand the sync world will not always return blocks and may return null, but it will return the block directly with no promise.
The set operations have similar characteristics : the async world will always set the blocks and return a promise, whereas the sync world will not always set the blocks, but do the action now and not return a promise.
The 2 world are linked and stay in sync together.
The async world may be more natural for servers (although the sync world can also be used there) The sync world makes more sense for clients as there is not necessarily somewhere to load more data from (but in some cases this may be incorrect too, think multi player clients)
World([generateChunk,[storageProvider]],[savingInterval])
Create a world instance, takes an optional generateChunk(chunkX, chunkZ)
function that will get called when a chunk at
chunkX
and chunkZ
need to be generated. Takes a second optional arguments : storageProvider
containing the regions.
If provided, prismarine-world will first try to load the map from these regions, and then try to generate the world if
the chunk isn't saved. savingInterval
default to 50ms.
"blockUpdate" (oldBlock, newBlock)
Fires when a block updates. Both oldBlock
and newBlock
provided for
comparison.
Note that oldBlock
may be null
.
"blockUpdate:(x, y, z)" (oldBlock, newBlock)
Fires for a specific point. Both oldBlock
and newBlock
provided for
comparison.
Note that oldBlock
may be null
.
"chunkColumnLoad" (point)
"chunkColumnUnload" (point)
Fires when a chunk has updated. point
is the coordinates to the corner
of the chunk with the smallest x, y, and z values.
World.initialize(iniFunc,length,width,height=256,iniPos=new Vec3(0,0,0))
Initialize the world with a given blocks cube. Useful to load quickly a schematic.
iniFunc
is a function(x,y,z) that returns a prismarine-blocklength
,width
andheight
are the size to iterate oniniPos
is the position where to start the iteration
Returns a promise containing an array of {chunkX,chunkZ}
World.raycast(from, direction, range, matcher = null)
Raycast in the world.
from
- Vec3, position to raycast fromdirection
- Vec3, direction of the ray, must be normalizedrange
- max distance to raycastmatcher
- optional function with a block parameter, return true if the raycast should stop at this block, false otherwise
World.getColumns()
Return all loaded columns
World.unloadColumn(chunkX,chunkZ)
Unload column from memory
All the following methods are async and return a promise.
World.setColumn(chunkX,chunkZ,chunk)
Set chunk
at chunkX
and chunkZ
World.getColumn(chunkX,chunkZ)
Return the column at chunkX
and chunkZ
World.getBlock(pos)
World.setBlock(pos,block)
World.getBlockStateId(pos)
Get the block state at pos
World.getBlockType(pos)
Get the block type at pos
World.getBlockData(pos)
Get the block data (metadata) at pos
World.getBlockLight(pos)
Get the block light at pos
World.getSkyLight(pos)
Get the block sky light at pos
World.getBiome(pos)
Get the block biome id at pos
World.setBlockStateId(pos, stateId)
Set the block state stateId
at pos
World.setBlockType(pos, id)
Set the block type id
at pos
World.setBlockData(pos, data)
Set the block data
(metadata) at pos
World.setBlockLight(pos, light)
Set the block light
at pos
World.setSkyLight(pos, light)
Set the block sky light
at pos
World.setBiome(pos, biome)
Set the block biome
id at pos
World.waitSaving()
Returns a promise that is resolved when all saving is done.
World.sync(asyncWorld)
Build a sync world, will delegate all the saving work to the async one
It exposes the same methods as World but all methods are sync.
Iterators
Iterators are used to iterate over blocks. Use cases include finding specific blocks quickly and computing a ray cast.
ManhattanIterator (x, y, maxDistance)
2D rectangular spiral iterator, useful to iterate on columns that are centered on bot position
next()
return null or the next position (Vec3)
OctahedronIterator (start, maxDistance)
start is a Vec3
next()
return null or the next position (Vec3)
RaycastIterator (pos, dir, maxDistance)
pos and dir are Vec3
RaycastIterator iterates along a ray starting at pos
in dir
direction.
It steps exactly 1 block at a time, returning the block coordinates and the face by which the ray entered the block.
next()
return null or the next position (Vec3)
SpiralIterator2d (pos, maxDistance)
pos
is Vec3
maxDistance
is number
Iterates outwards along x and z axis in a cubic spiral. First position returned is the starting position. Every step is 1 step away form the previous and next point.
next()
return null or the next position (Vec3)
NUMBER_OF_POINTS
Number of points the iterator will return.