Generates a superflat world with a specified preset string - see e.g. [[http://www.minecraft101.net/superflat/]]
The superflat customization preset string.
Set this to true to force the world to be reloaded, otherwise the current world will be used (provided it matches the requested generator string).
Force reloading is slow, but will guarantee that no world changes will carry over between missions.
The world seed - leave blank (default) to get a random world.
Generates the default terrain.
The world seed - leave blank (default) to get a random world.
Set this to true to force the world to be reloaded, otherwise the current world will be used (provided it matches the requested seed).
Force reloading is slow, but will guarantee that no world changes will carry over between missions.
Loads a saved world from disk. You can find the saved worlds in "{{{Minecraft\run\saves}}}". Use the full path to one of those folders.
If Minecraft is running on a different machine then copy the folder to a readable network location and update the path accordingly. Example:
{{{<FileWorldGenerator src="\\\\machine-id\\shared\\ProjectMalmo\\saved_maps\\arena" />}}}
The path to the saved world folder.
Set this to true to force the world to be reloaded, otherwise the current world will be used (provided it matches the requested source filename).
Force reloading is slow, but will guarantee that no world changes will carry over between missions.
Adds a snake made of blocks, that grows at one end and shrinks at the other.
The master seed for the random number generator used to make the snake.
Either an integer number, or the string "random".
Optional seed for determining block types.
Either an integer number, or the string "random".
Adds a maze into the world.
The master seed for the random number generator used to make the maze.
Either an integer number, or the string "random".
Seed for the random number generator for determining block types - omit to allow master seed to control block types.
Either an integer number, or the string "random".
Omit this element if you want the optimal path to be unmarked.
Omit this element if you want the subgoal points to be unmarked.
Base class for all draw objects.
Base class for all block-based draw objects.
Draws structures into the world.
Specify a block by location and type.
Specify an item by location and type.
Specify a filled cuboid by inclusive coordinates and block type.
Specify a filled sphere by centre coordinates and inclusive radius.
Specify a line by start and end coordinates and thickness.
Adds a series of joined rooms into the world.
Specifies a time limit that applies to all agents.
Specifies that the mission ends when any of the agents finish.
Requests that video frames be sent.
Set to false to specify the min and max depths manually. Default is true, where uses the min and max depths in the scene.
If true, returns depth in the fourth channel as RGBDRGBD.... Else as RGBRGB...
Sets the camera viewpoint. 0 = first-person, 1 = behind, 2 = facing.
Commands for smooth movement. Some examples:
"{{{move 0.5}}}" - start moving forward at 50% of the normal walking speed (-ve = backward, +ve = forward).
"{{{strafe -1}}}" - start moving left at 100% of the normal walking speed (-ve = left, +ve = right).
"{{{pitch 0.1}}}" - start tilting the agent's head down at 10% of the maximum speed (-ve = up, +ve = down). The maximum speed is set by {{{turnSpeedDegs}}} in {{{ContinuousMovementCommands}}}.
"{{{turn 0.1}}}" - start turning right at 10% of the maximum speed (-ve = anti-clockwise/left, +ve = clockwise/right). The maximum speed is set by {{{turnSpeedDegs}}} in {{{ContinuousMovementCommands}}}.
"{{{jump 1}}}" - start jumping (1 = start, 0 = stop).
"{{{crouch 1}}}" - start crouching (1 = start, 0 = stop).
"{{{attack 1}}}" - start attacking (1 = start, 0 = stop). The 'attack' command is for destroying blocks and attacking mobs.
"{{{use 1}}}" - start 'use'ing (1 = start, 0 = stop). The 'use' command is for placing blocks and for other things too.
Commands to set position and orientation directly. Some examples:
"{{{tp 23.5 1 -34.5}}}" - teleport the agent to the absolute position x y z (space delimited).
"{{{tpx 230}}}" - set the agent's x coordinate, without altering the y and z.
"{{{tpy 103.2}}}" - set the agent's y coordinate, without altering the x and z.
"{{{tpz -32.5}}}" - set the agent's z coordinate, without altering the x and y.
"{{{setYaw 30}}}" - set the agent's body orientation to be 30 degrees clockwise from south.
"{{{setPitch 20}}}" - set the agent's body orientation to be 20 degrees down from horizontal.
Commands for moving and turning in discrete increments. Some examples:
"{{{move 1}}}" - move the agent one block forwards (1 = forwards, -1 = backwards).
"{{{turn 1}}}" - rotate the agent 90 degrees right (1 = right, -1 = left).
"{{{movenorth 1}}}" - move the agent one block north.
"{{{moveeast 1}}}" - move the agent one block east.
"{{{movesouth 1}}}" - move the agent one block south.
"{{{movewest 1}}}" - move the agent one block west.
"{{{jump 1}}}" - move the agent one block up.
"{{{look 1}}}" - look down by 45 degrees (-ve = up, +ve = down).
"{{{attack 1}}}" - destroy the block that has focus.
"{{{use 1}}}" - place the held block item on the block face that has focus.
Commands for changing the contents of the inventory and hotbar.
To move items around in the inventory you can use {{{swapInventoryItems}}}. For example, to swap
the contents of slots 13 and 14, issue this command:
"{{{swapInventoryItems 13 14}}}"
Note that inventory slots are numbered from 0 to 39.
0-8 are the hotbar slots (which correspond to the hotbar commands hotbar.1-hotbar.9 - _note the offset_)
9-35 are the rest of the inventory (visible when you press 'E' in the game)
36-39 are the armour slots.
So to move an item out of the hotbar, say:
"{{{swapInventoryItems 3 30}}}"
Other commands:
"{{{combineInventoryItems x y}}}" - will attempt to combine the stacks in slots x and y, and leave the results in slot x. Eg if there are ten blocks of granite in slot 4, and 57 blocks of granite in slot 12, then {{{combineInventoryItems 4 12}}} will result in 64 (the max) blocks of granite in slot 4, and the remainder in slot 12. If the slots can't be combined (they are different types, or the first slot is full) then nothing will happen.
"{{{discardCurrentItem}}}" - discards the currently held item.
To select a hotbar slot:
"{{{hotbar.1 1}}}"
"{{{hotbar.1 0}}}"
Send both commands to select hotbar slot 1 as the currently-held tool. This affects the attack and use commands
- e.g. if the agent does 'use' while holding a block item it will place the block into the world.
A command for simple crafting:
Will look up all recipes that produce the requested object, and attempt each one in turn until one is successful or all have failed. This ignores all issues like requiring a crafting table / brewing stand etc, and the shape of the recipe (which items go in which slots on the crafting table). It will simply check to see whether the player has the necessary raw ingredients, and, if so, will remove them from the player's inventory and add the result of the recipe.
For basic objects, use the ItemTypes or BlockTypes found in Types.xsd. Eg:
"{{{craft diamond_pickaxe}}}" will remove three diamonds and two sticks from the player's inventory, and add a diamond pickaxe.
For more control over colours, types etc, add a Variation or Colour. Eg:
"{{{craft carpet PINK}}}"
etc.
A command for broadcasting text messages to the other players. An example:
"{{{chat I have found diamonds!}}}" - broadcasts the string "{{{I have found diamonds!}}}".
Chat messages from other players can be observed using {{{ObservationFromChat}}}.
Allow-list/deny-list base class - restricted by each command handler to only allow that handler's commands.
When present, the Mod will accept commands that control smooth movement.
Commands take the form of "verb <value>" e.g. "{{{move 1}}}" to move forwards with normal speed.
This sets the maximum speed for both turning the agent and adjusting the camera pitch, in degrees per second.
The turn and pitch command values are both scaled by this - eg "{{{turn -0.5}}}" to turn left (anti-clockwise) at half this maximum speed.
When present, the Mod will accept commands to set the player's position and orientation directly.
Commands take the form of "verb <value>" e.g. "{{{tpx 13}}}" to set the x-coordinate to 13.
When present, the Mod will accept commands that control movement in discrete jumps.
Commands take the form of "verb <value>" e.g. "{{{move 1}}}" to move forwards one square.
When present, the Mod will accept commands that control the player's inventory.
When present, the Mod will accept simple commands that implement a basic form of crafting.
When present, the Mod will accept commands that send chat messages to the other players.
When present, the Mod will return observations that say what commands have been acted on since the last report, in the JSON element {{{CommandsSinceLastObservation}}}.
Note that the commands returned might not yet have taken effect, depending on the command and the way in which Minecraft responds to it -
but they will have been processed by the command handling chain.
When present, the Mod will return observations that indicate the direction to follow to the next subgoal.
The value to turn by is returned in the JSON element {{{yawDelta}}}.
When present, the Mod will return observations that say what is in the hotbar.
Up to four values are returned for each slot, if not empty: e.g. {{{Hotbar_1_size}}} and {{{Hotbar_1_item}}} containing the number and
type of the item(s) in the slot, respectively, and {{{Hotbar_1_colour}}} and {{{Hotbar_1_variant}}} if the item has a colour/variation. Hotbar slots are numbered 0 to 8 inclusive.
When present, the Mod will return several observations:
* Achievement statistics: {{{DistanceTravelled}}}, {{{TimeAlive}}}, {{{MobsKilled}}}, {{{DamageTaken}}}
* Life statistics: {{{Life}}}, {{{Score}}}, {{{Food}}}, {{{Air}}}, {{{XP}}}, {{{IsAlive}}}
* Position statistics: {{{XPos}}}, {{{YPos}}}, {{{ZPos}}}, {{{Pitch}}}, {{{Yaw}}}
When present, the Mod will return observations about the block or entity which is currently in the line of sight:
* Hit details: {{{hitType}}} - will be "block" for a block, "entity" for an entity (eg spider, rabbit etc) or "item" for a free-floating item that can be picked up. {{{inRange}}} will be true if the block/entity is within the agent's reach - ie attacking or using will have an effect on the object.
* Position: {{{x}}}, {{{y}}}, {{{z}}} - in the case of block hits, will be the precise point when the ray intercepts the block.
* Type information: {{{type}}}, {{{colour}}}, {{{variant}}}, {{{facing}}}
* Extra properties: in the case of block types, any extra properties will be returned by their minecraft name (eg, for leaves, "decayable" and "check_decay") - this is the same data as can be seen by exploring Minecraft with the F3 debug information displayed. For floating items, the stack size is returned in {{{stackSize}}}
When present, the Mod will return observations that say what is in the player's inventory.
Up to four values are returned for each slot, if not empty: e.g. {{{Inventory_0_size}}} and {{{Inventory_0_item}}} containing the number and
type of the item(s) in the slot, respectively, and {{{Inventory_0_colour}}} and {{{Inventory_0_variant}}} if the item has a colour/variation. Inventory slots are numbered 0 to 39 inclusive.
When present, the Mod will return an observation of the player's position that is unique for every cell on the x/z plane.
This is useful for discrete-movement missions where we need to uniquely identify their location but don't mind how.
The observation will contain the JSON element {{{cell}}} containing e.g. {{{(2,4)}}} if the player is standing at any location where
x = 2 and z = 4.
When present, the Mod will return an observation that specifies the distance to a named location.
A JSON element {{{distanceFromNAME}}} will be returned (where {{{NAME}}} is replaced with the name of the NamedPoint),
with a value that is the distance.
When present, the Mod will return observations that say what the nearby blocks are.
A JSON element {{{Cells}}} will be returned, with a 1D array of block types, in order along the x, then z, then y axes.
Used by {{{ObservationFromNearbyEntities}}}. Defines the range within which entities will be returned. Eg a range of 10,1,10 will return all entities within +/-10 blocks of the agent in the x and z axes, and within +/-1 block vertically.
{{{update_frequency}}} is measured in Minecraft world ticks, and allows the user to specify how often they would like to receive each observation. A value of 20, under normal Minecraft running conditions, for example, would return the entity list once per second.
When present, the Mod will return observations that list the positions of all entities that fall within the given ranges of the agent.
A JSON array will be returned for each range requested, named using the {{{name}}} attribute of the range. Within the array will be a series of elements, one for each entity, containing the following:
- name: a string describing the entity (eg from Types.xsd)
- x: the x position of the entity
- y: the y position of the entity
- z: the z position of the entity
- quantity: if items have been grouped together by Minecraft, this indicates the number in the stack
- colour: if the item is a tile entity, with a colour, this will be present to describe the colour
- variation: optional string to describe the variation - eg the type of egg, or brick, etc (see Types.xsd)
When present, the Mod will return observations that say what chat messages have occurred and from which player.
A JSON element {{{Chat}}} will be returned, with a list of chat strings.
Note that unless the AgentHost ObservationsPolicy is set to KEEP_ALL_OBSERVATIONS it is likely that chat messages will be missed.
The default policy is LATEST_OBSERVATION_ONLY.
For multi-dimensional rewards, specifies the dimension to allocate this reward to. All rewards on this dimension will be summed.
Sends a reward when a specified position is reached by the agent.
Sends a rewards when an agent comes in contact with a specific block type.
Sends a reward when the agent issues a command.
Sends a reward when the agent sends a chat message that matches a given regular expression (supports Java regex syntax).
Sends a reward when the agent collects a specific item.
Sends a reward when an agent discards a specific item.
Sends a reward when the mission ends for a specified reason.
When this is included the agent's mission will end when they reach a specified position.
When this is included the agent's mission will end when a certain amount of time has elapsed.
When this is included the agent's mission will end when they come in contact with a specified block type.
When this is included the agent's mission will end when they collect (or craft) a specified item.
Set up a quota for a group of commands. {{{AgentQuitFromReachingCommandQuota}}} will fire once the quota is exceeded.
List of commands, separated by spaces, that will share this quota. Commands must be valid members of {{{ContinuousMovementCommand}}}, {{{AbsoluteMovementCommand}}}, {{{DiscreteMovementCommand}}}, {{{InventoryCommand}}}, or {{{ChatCommand}}}.
For instance, if the command list contains {{{moveeast}}}, {{{movenorth}}}, {{{movesouth}}} and {{{movewest}}}, then the mission will end once the summed total usage of all four commands reaches the quota - even if the agent never used {{{movesouth}}}.
Total number of usages allocated for this command group.
String that will be returned from the {{{AgentQuitFromReachingCommandQuota}}} if this quota is reached. This can be used in {{{RewardForMissionEnd}}}, and is also returned in the {{{MissionEnded}}} message.
Count the commands acted on by the Mod, and signal the end of the mission when the defined quota of commands has been reached.
A total number of commands can be specified, and/or groups of commands can be given their own quota.
Total number of commands allowed before the mission ends. (Note that a command must be acted on to be counted - sending malformed commands won't affect the total.)
The check for total command use takes precedence over the individual group quotas, if used.
String that will be returned from the {{{AgentQuitFromReachingCommandQuota}}} if the total allowed command usage is reached. This can be used in {{{RewardForMissionEnd}}}, and is also returned in the {{{MissionEnded}}} message.
value comes from list: {'swapInventoryItems'|'combineInventoryItems'|'discardCurrentItem'|'hotbar.1'|'hotbar.2'|'hotbar.3'|'hotbar.4'|'hotbar.5'|'hotbar.6'|'hotbar.7'|'hotbar.8'|'hotbar.9'}
The XML Instance Representation table above shows the schema component's content as an XML instance.
The minimum and maximum occurrence of elements and attributes are provided in square brackets, e.g. [0..1].
Model group information are shown in gray, e.g. Start Choice ... End Choice.
For type derivations, the elements and attributes that have been added to or changed from the base type's content are shown in bold.
If an element/attribute has a fixed value, the fixed value is shown in green, e.g. country="Australia".
Otherwise, the type of the element/attribute is displayed.
If the element/attribute's type is in the schema, a link is provided to it.
For local simple type definitions, the constraints are displayed in angle brackets, e.g. <<pattern = [1-9][0-9]{3}>>.
If a local element/attribute has documentation, it will be displayed in a window that pops up when the question mark inside the attribute or next to the element is clicked, e.g. <postcode>.
Abstract(Applies to complex type definitions and element declarations). An abstract element or complex type cannot used to validate an element instance. If there is a reference to an abstract element, only element declarations that can substitute the abstract element can be used to validate the instance. For references to abstract type definitions, only derived types can be used.
Collapse Whitespace PolicyReplace tab, line feed, and carriage return characters with space character (Unicode character 32). Then, collapse contiguous sequences of space characters into single space character, and remove leading and trailing space characters.
Disallowed Substitutions(Applies to element declarations). If substitution is specified, then substitution group members cannot be used in place of the given element declaration to validate element instances. If derivation methods, e.g. extension, restriction, are specified, then the given element declaration will not validate element instances that have types derived from the element declaration's type using the specified derivation methods. Normally, element instances can override their declaration's type by specifying an xsi:type attribute.
Nillable(Applies to element declarations). If an element declaration is nillable, instances can use the xsi:nil attribute. The xsi:nil attribute is the boolean attribute, nil, from the http://www.w3.org/2001/XMLSchema-instance namespace. If an element instance has an xsi:nil attribute set to true, it can be left empty, even though its element declaration may have required content.
Prohibited Derivations(Applies to type definitions). Derivation methods that cannot be used to create sub-types from a given type definition.
Prohibited Substitutions(Applies to complex type definitions). Prevents sub-types that have been derived using the specified derivation methods from validating element instances in place of the given type definition.
Replace Whitespace PolicyReplace tab, line feed, and carriage return characters with space character (Unicode character 32).
Substitution GroupElements that are members of a substitution group can be used wherever the head element of the substitution group is referenced.
Substitution Group Exclusions(Applies to element declarations). Prohibits element declarations from nominating themselves as being able to substitute a given element declaration, if they have types that are derived from the original element's type using the specified derivation methods.
Target NamespaceThe target namespace identifies the namespace that components in this schema belongs to. If no target namespace is provided, then the schema components do not belong to any namespace.