An absolute position in the 3D Minecraft world. An absolute position in the 3D Minecraft world that includes yaw and pitch. Defaults to facing South (0). North is 180. Defaults to looking straight ahead (0). +90 = look down. -90 = look up. 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. Set this to true to force the world data files to be deleted after the mission is done. Enabling this setting prevents the disk being filled with old worlds. 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. Set this to true to force the world data files to be deleted after the mission is done. Enabling this setting prevents the disk being filled with old worlds. 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. Set this to true to force the world data files to be deleted after the mission is done. Enabling this setting prevents the disk being filled with old worlds. Generates a survival world with the specified biome. The biome type for the world. Each chunk will be loaded with the biome specified. If left blank, the world will be a normal survival world. Biome ID #'s can be found here: https://minecraft.gamepedia.com/Biome#Biome_IDs 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. Set this to true to force the world data files to be deleted after the mission is done. Enabling this setting prevents the disk being filled with old worlds. Creates a moving two-block target which takes random moves within a specified arena. Can be linked to the turn scheduler. This can be made more general in the future, but is currently tailored specifically for the Malmo collaborative challenge. Define the bounds of the arena within which the target can move. The master seed for the random number generator used to move the target. Either an integer number, or the string "random". The length, in ticks, between each update, or the string "turnbased" to use the turn scheduler. Either an integer number, or the string "turnbased". 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 container item by location and type and contents. Draw a sign at the required location with the specified text. Specify an entity 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. Basic animation created by repeatedly applying a DrawingDecorator at different positions. Create an animation where the (x,y,z) position are determined by parametric equations. Recognised tokens are: * basic arithmetic operations: +, -, /, *, % (modulo), ^ (to the power of) * basic trig: sin, cos, tan, asin, acos, atan * abs (absolute value) * rand - replaces with a random float between 0 and 1 * t - the integer time variable, incremented with each time interval For example, to create a structure which orbits in the x-z plane about the point (100,100,100) at a radius of 20, use: "100+20*cos(t)" and "100+20*sin(t)" for the x and z strings. The parser is not robust to mismatched brackets, typos, unrecognised tokens etc, and will fail silently. The master seed for the random number generator used for any stochastic elements. Either an integer number, or the string "random". Create an animation where the (x,y,z) position is determined by the starting position, a constant velocity, and a bounding box. Each time step, the position is updated by adding the velocity values. If the object goes outside of the bounding box in one dimension, that dimension's velocity will be flipped to reverse the direction. Define the bounds of the canvas within which to move the object. Define the starting position of the drawing's origin. Define the initial velocity of the drawing's origin. Define the drawing, relative to (0,0,0), which will be drawn for each frame of the animation. The number of server ticks between each update of the animation. Sets up a build battle area, with a source structure that can't be edited, and a goal structure, with optional recolouring of blocks to indicate correct/incorrect placement. NOTE: Make sure to add a {{{RewardForStructureCopying}}} handler to the AgentHandlers if you want your agent to be rewarded for contributing to the build. Define the bounds of the structure to be copied. Anything in this volume when the mission starts will be used as the blueprint - eg anything drawn here using the {{{DrawingDecorator}}}, etc. Define the bounds in which the agent should build their copy. If present, correctly placed blocks (in the source and the copy) will be changed to this block type. If present, incorrectly placed blocks (in the copy only) will be changed to this block type. Helps specify where random blocks should be placed in the world. Specifies the origin point or spawn point in the Minecraft world. If omitted, set to the world spawn point. Specifies the minumum radius of the circle around which the block may be randomly placed. Specifies the maximum radius of the circle around which the block may be randomly placed. Specifies the block type of the block to be randomly placed. Specifies the placement behavior of the block. Default is "surface." String of "sphere" will place equally randomly in a sphere of radius specified. String of "circle" will place randomly in a circle at the y-coordinate specified. String of "surface" will place randomly in a circle, then raise to the highest available block on the surface. Sets whether or not the target block radius should be randomized within a certain radius. If false, will set the default target radius to the given radius. If true, will set the default target radius randomly within the bound specified below. The minimum distance for a randomly placed target block. If omitted, and randomization of radius enabled, set to 10 blocks. The maximum distance for a randomly placed target block. If omitted, and randomization of radius enabled, set to 64 blocks. Adds a specified block to the world and sets compass to that block. Block is placed randomly along a radius around the origin specified. Can force the block to appear at the highest available y-value. Properties for placing a block in the world randomly. Sets whether or not the compass location should be randomized within a certain radius. If false, will set the compass location to the block that was randomly placed. If true, will set the compass location to a random spot within the radius specified below. The minimum distance a randomized compass location must be from the block that was randomly placed. If omitted, set to 0 blocks. The maximum distance a randomized compass location must be from the block that was randomly placed. If omitted, set to 8 blocks. Specifies a time limit that applies to all agents. Specifies that the mission ends when any of the agents finish. Requests that 32bpp depth frames be sent. Requests an 8bpp grayscale image. Requests a 24bpp colour map - each object/entity represented by a solid block of colour. 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). "{{{jumpmove 1}}}" - move the agent one block up and forwards (1 = forwards, -1 = backwards). "{{{strafe 1}}}" - move the agent one block sideways (1 = right, -1 = left). "{{{jumpstrafe 1}}}" - move the agent one block up and sideways (1 = right, -1 = left). "{{{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. "{{{jumpnorth 1}}}" - move the agent one block up and north. "{{{jumpeast 1}}}" - move the agent one block up and east. "{{{jumpsouth 1}}}" - move the agent one block up and south. "{{{jumpwest 1}}}" - move the agent one block up and 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. "{{{jumpuse}}}" - simultaneously jump and place the held block 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. If the agent is currently pointed at a container item - eg a chest, shulker box, dispenser etc - then the swap and combine commands can be extended to allow access to the container's inventory. To do this, simply prefix the slot number with the name of the foreign inventory (which will be provided by the {{{ObservationFromFullInventory}}} observations). So to move an item out of the hotbar and into slot 0 of a chest, say: "{{{swapInventoryItems 3 Chest:0}}}" Note that this is the same as writing "{{{swapInventoryItems Inventory:3 Chest:0}}}" "Inventory" is the name of the player's inventory. See inventory_test.py for a working example of this. A command for simple crafting: "{{{craft carpet PINK}}}" etc. A command for simple nearby crafting: "{{{craftNearby carpet PINK}}}" etc. A command for simple smelting: "{{{smeltNearby carpet PINK}}}" etc. A command for placing blocks in the agent's inventory: Will look in the agent's inventory. If the block exists, will try to place the block in the world. For basic objects, use BlockTypes found in Types.xsd. Eg: "{{{place diamond_block}}}" will attempt to place a diamond block from the agent's inventory. for more control over colours, types, etc, add a Variation or Colour. Eg: "{{{place carpet PINK}}}" 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}}}. A command for ending the mission, example: "{{{quit}}}" - terminates the current mission. Commands for controlling Minecraft at the level of keyboard and mouse events. 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 simple commands that implement a basic form of crafting. Success of the craft command depends on the presence of a nearby crafting table previously placed by the agent and within reach and in field of view. When present, the Mod will accept simple commands that implement a basic form of smelting. Success of the smelt command depends on the presence of a nearby furnace previously placed by the agent and within reach and in field of view. Fails when a command corresponds to an item not able to be smelted. Each command takes fuel as if the agent had placed the items in a furnace. Eg: If called on 16 iron ore, requires 2 coal, 2 charcoal, 11 planks, etc. If called twice separately on 8 iron ore, requires 1 coal and then 1 coal, etc. When present, the Mod will accept commands that allow for the placement of blocks. If the specified block is contained in the agent's inventory, then the agent will attempt to place the block in the world. If a non-block is specified, the command fails. If a block is specified, the block will swap to the hotbar, be placed, and then swapped back, so no changes to the inventory are made besides losing a block. When present, the Mod will accept commands that send chat messages to the other players. When present, the Mod will accept a command that quits the mission. Allows a user to specify that certain commands must be sent on a turn-by-turn basis - ie, in a multi-agent mission, placing the {{{DiscreteMovementCommand}}} handler inside the TurnBasedCommands section will mean that each agent must take it in turns to send a discrete movement command. See turn_based_test.py in the Python Samples for a demonstration/explanation of this. When present, the Mod will accept commands on the level of mouse and keyboard events. 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. Automatically addd by Malmo when the user specifies the {{{TurnBasedCommands}}} handler. This provides vital observations back to the agent to allow them to make use of the turn scheduler. When it is the agent's turn, the JSON will contain {{{turn_number}}} - an integer which tracks the number of turns the agent has taken, and {{{turn_key}}} - a one-shot key which must be passed back to Malmo as a parameter in {{{sendCommand}}} in order for the command to be accepted. 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}}}, {{{PlayersKilled}}}, {{{DamageTaken}}}, {{{DamageDealt}}} * Life statistics: {{{Life}}}, {{{Score}}}, {{{Food}}}, {{{Air}}}, {{{XP}}}, {{{IsAlive}}}, {{{Name}}} * Position statistics: {{{XPos}}}, {{{YPos}}}, {{{ZPos}}}, {{{Pitch}}}, {{{Yaw}}} * Environment statistics: {{{WorldTime}}} - current time in ticks, {{{TotalTime}}} - total world time, unaffected by ServerInitialConditions When present, the Mod will return low-level keyboard and mouse events. When present, the Mod will return information on the current performance of the Minecraft system - eg tick speeds, etc. When present, the Mod will return a JSON object called "LineOfSight", containing observations about the block or entity which is currently in the centre of the screen: * 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. {{{distance}}} gives the straight-line distance from the agent. * Position: {{{x}}}, {{{y}}}, {{{z}}} - in the case of block hits, will be the precise point when the ray intercepts the block. {{{yaw}}}, {{{pitch}}} are also added for entities. * Type information: {{{type}}}, {{{colour}}}, {{{variant}}}, {{{facing}}} * Extra properties: in the case of block types, any extra properties will be returned by their minecraft name, prefixed with "prop_" (eg, for leaves, "prop_decayable" and "prop_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}}} * NBTTagCompound: for tile entity blocks, optionally returns a json object called "NBTTagCompound" which contains the entity's entire NBTTagCompound - eg useful for reading the text off signs, etc. Set {{{includeNBT}}} to true to receive this data. When present, the Mod will return observations that describe the contents of the player's inventory. There are two modes - "flat" (the default) is provided for backwards compatibility, and behaves like this: The inventory contents are returned in a flat format in the root of the json observations. Up to four values are returned for each slot, if not empty: e.g. {{{InventorySlot_0_size}}} and {{{InventorySlot_0_item}}} containing the number and type of the item(s) in the slot, respectively, and {{{InventorySlot_0_colour}}} and {{{InventorySlot_0_variant}}} if the item has a colour/variation. Inventory slots are numbered 0 to 39 inclusive. If there is a container item available (eg the player is pointed at a chest), this will be returned in the same way, but "InventorySlot" will be replaced by "ContainerNameSlot" - eg {{{ShulkerBoxSlot_0_item}}} etc. If {{{flat}}} is false (recommended), the data is returned as an array of objects, one for each item in the inventory/inventories. The JSON array is called "inventory", and each item in the array will contain: * {{{type}}} - the type of the object in that ItemStack * {{{colour}}} - the colour, if relevant * {{{variant}}} - the variant, if relevant * {{{quantity}}} - the number of objects in the ItemStack * {{{index}}} - the slot number * {{{inventory}}} - the name of the inventory - will be "Inventory" for the player, or, for example, "ShulkerBox", "Chest" etc, if a container is available. This index and inventory information can be used to specify the item in the {{{InventoryCommands}}} - items are specified as inventory:index - eg "ShulkerBox:12" In addition to this information, whether {{{flat}}} is true or false, an array called "inventoriesAvailable" will also be returned. This will contain a list of all the inventories available (usually just the player's, but if the player is pointed at a container, this will also be available.) For each inventory, an object will be returned that specifies: * {{{name}}} - the inventory name (same as will be returned in the {{{inventory}}} field for any items in that inventory) * {{{size}}} - the number of slots the inventory provides. For a working example please see inventory_test.py in the Python samples folder. 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. {{{name}}} - Each grid has a text label to identify it. {{{absoluteCoords}}} - If true, the min and max coordinates of the grid are interpreted as world coordinates. If false (the default) then the coordinates are relative to the player. {{{min}}}, {{{max}}} - The corners of the grid. When present, the Mod will return observations that say what the nearby blocks are. For each {{{Grid}}} entry, a named JSON element 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. It will also return messages for any title or subtitle change (eg via Minecraft's title command) A JSON element {{{Chat}}} will be returned, with a list of chat strings. In the same way, title changes and subtitle changes will be returned in {{{Title}}} and {{{Subtitle}}} respectively. 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. When present, the Mod will return observations that detail how the agent is facing and what position the agent is in with respect to a compass. A JSON element will be returned for the compass in the agent's inventory. The JSON will contain the following - set: boolean on whether the compass is set - compass-x: the x coordinate value of the set compass, null if not set - compass-y: the y coordinate value of the set compass, null if not set - compass-z: the z coordinate value of the set compass, null if not set - relative-x: the relative x coordinate value of the player to the compass, null if not set - relative-y: the relative y coordinate value of the player to the compass, null if not set - relative-z: the relative z coordinate value of the player to the compass, null if not set - offset: the number of degrees the agent is facing away from the direction the compass is pointing - normalized-offset: the number of degrees the agent is facing away, with the agent considered 0 degrees - distance: the distance from the agent's location to the compass's location For multi-dimensional rewards, specifies the dimension to allocate this reward to. All rewards on this dimension will be summed. Sends a reward when an entity is damaged. 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 the agent collects a specific item. If Sparse is set to true, will only give full reward on collecting entire amount. Otherwise, will give the reward amount notated for each item collected up to the amount noted. Sends a reward when the agent collects a specific item. If Sparse is set to true, will only give full reward on possessing the entire amount. Otherwise, will give the rewards amount notated for each item crafted up to the amount noted. Sends a reward when the agent crafts a specific item. If Sparse is set to true, will only give full reward on crafting of entire amount. Otherwise, will give the reward amount notated for each item crafted up to the amount noted. Sends a reward when the agent smelts a specific item. If Sparse is set to true, will only give full reward on crafting of entire amount. Otherwise, will give the reward amount notated for each item crafted up to the amount noted. Sends a reward when an agent discards a specific item. Sends a reward when the mission ends for a specified reason. Reward type for {{{RewardForStructureCopying}}}: - {{{PER_BLOCK}}} - reward will be given whenever a block is placed/destroyed in the goal volume, and will be determined by {{{RewardScale}}}. An additional reward of {{{RewardForCompletion}}} will be added the *first* time the copy is correctly completed. - {{{MISSION_END}}} - no reward will be given until the mission ends. Reward will be scaled from 0-1, where 0 means "no blocks correct" and 1 means "all blocks correct", and then multipled by {{{RewardScale}}}. Sends a reward when the agent copies blocks from a given structure. NOTE: This will do nothing unless you have set up a {{{BuildBattleDecorator}}} on the server. If present, the mission will end when the copy exactly matches the original. Set {{{description}}} to the quit code you'd like to receive when this happens. (See {{{RewardForMissionEnd}}}.) This is the reward to be added or deducted for each block event. The rewards are calculated as follows: - For destroying a correct block: -1 * rewardScale - For destroying an incorrect block: +1 * rewardScale - For placing a correct block: +1 * rewardScale - For placing an incorrect block: -1 * rewardScale If {{{RewardDensity}}} is set to {{{{PER_BLOCK}}}, this reward will arrive after each block transaction. If it's set to {{{MISSION_END}}}, the individual rewards will not be sent, but will be summed throughout the course of the mission, and the resulting total will be sent as the final reward. This is the extra reward to be added when the copy exactly matches the original. (Will only be applied once.) Reward type for {{{RewardForTimeTaken}}}: - {{{PER_TICK}}} - only the reward delta will be sent as a reward, at each tick. The initial reward will be ignored. - {{{PER_TICK_ACCUMULATED}}} - the initial reward will be adjusted by the delta at each tick, and the current total sent. Eg: if the initial reward is 1000 and the delta is -1, the agent will receive rewards of 1000,999,998,997 for the first four ticks. - {{{MISSION_END}}} - the initial reward will be adjusted by the delta at each tick, but no reward will be sent until the mission ends. Eg: if the initial reward is 1000, the delta is -1, and the mission runs for 800 ticks, then final reward sent will be 200. Reward that is dependent on time. Can be received per tick, or just once at the end. Reward type for {{{RewardForDistanceTraveledToCompassTarget}}}: - {{{PER_TICK}}} - reward the distance traveled twards compass target each tick - {{{PER_TICK_ACCUMULATED}}} - the reward will be adjusted by the delta at each tick, and the current total sent. E.G. If the agent moves forward to the target and then back to start the reward will be 0 - {{{MISSION_END}}} - the reward will be adjusted by the delta at each tick, but no reward will be sent until the mission ends. Eg: if the initial reward is 1000, the delta is -1, and the mission runs for 800 ticks, then final reward sent will be 200. Reward that is dependent on distance to compass target. Can be received per tick, or just once at the end. Reward for cornering a mob, such that it cannot move from its current square without passing through an agent. If {{{global}}} is true then the agent doesn't have to be involved in catching the mob; otherwise they must be adjacent to the mob. For our purposes, a mob is deemed "caught" if there are no unoccupied air blocks immediately north, south, east or west of them for them to move into. (An air block is considered occupied if there is an agent standing in it.) This does not necessarily correspond to Minecraft's definition of caught, in which mobs can escape by jumping or passing through agents. If {{{oneshot}}} is true, the reward will only be counted once per entity. 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. When this is included the agent's mission will end when they collect (or craft) a specified number of the item. When this is included the agent's mission will end when they craft a specified item. When this is included the agent's mission will end when they smelt a specified item. When this is included the agent's mission will end when they possess the specified item in their inventory all at once. Agent's mission will end when they corner a mob. If {{{global}}} is true then the agent doesn't have to be involved in catching the mob; otherwise they must be adjacent to the mob. For our purposes, a mob is deemed "caught" if there are no unoccupied air blocks immediately north, south, east or west of them for them to move into. (An air block is considered occupied if there is an agent standing in it.) This does not necessarily correspond to Minecraft's definition of caught, in which mobs can escape by jumping or passing through agents. 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.