Data Structures

World data is shared between all the bots you create in a single process. This helps keep memory usage down by not storing duplicate copies of chunk and entity information for each bot in the same world.


World objects have several pieces of data. Please read the Transactions section to learn why the data is structured the way it is.

(:time world) is a ref containing the current world time.

(:entities world) is a ref containing a map of entity IDs to Entity refs.

(:chunks world) is a ref containing a map of chunk coordinates ([x y z] vectors) to Chunk refs.


Location objects represent the locations of entities in the world. They have the following pieces of data:

  • (:x location)
  • (:y location)
  • (:z location)
  • (:yaw location)
  • (:pitch location)
  • (:stance location)
  • (:onground location)


Entity objects represent a single entity in the world. One of these is your bot’s player.

(:eid entity) is the ID of the entity.

(:loc entity) is a Location object representing the location of the entity in the world.

(:despawned entity) is a boolean that indicates whether the entity has despawned. You should never need to read this, but please read the Transactions section for the reason why it’s included.

(:velocity entity) is the y velocity of the entity. Only exists for bots, and you should never need to touch it.


A chunk has four arrays representing the data for blocks in the chunk. You shouldn’t need to access chunk data directly – there are helper functions in clojurecraft.chunks that will look up block objects for you.



Bot objects are your gateway to observing and interacting with the world.

(:world bot) is a World object representing the bot’s world.

(:player bot) is a ref containing the Entity representing the bot. This is just a shortcut so you don’t have to pull it out of the :entities map in the bot’s world all the time.