Bo3s are objects consisting of blocks that can spawn in your biomes. Similarly to Vanilla Minecraft structures and terrain objects they can represent trees, ores, dungeons, caves, rocks, lakes and much much more. Using the branch system, other BO3s can be attached to them, forming large structures. BO3s can also have NBT data attached to them to fill chests, furnaces, dispensers, and other Tile Entities. Additionally mobs and mob spawners can be generated inside a Bo3. The main .bo3 files are plaintext. Notepad++ is recommended when opening and editing them. Other useful tools are Bo3_BulkEdit (for editing multiple BO3's at once) and Bo3_Layouter (for creating branching structures made of BO3's).
BO2's and BO3's (custom objects/structures)
OpenTerrainGenerator, TerrainControl and MCW use BO2 and BO3 files to add custom structures to the world such as trees, rocks and building. BO2's and BO3's can be placed as either CustomObjects (< 32x32 single BO3 file, commonly used for small things like trees and rocks) or as CustomStructures (Large structure made of multiple 16x16 BO3's that are glued together via branches, commonly used for large buildings, mountains etc).
Converting schematics to BO3's
The following basic tutorials on Bo3s are available:
More advanced structure creation and generation tutorials will become available soon.
The Settings in the BO3 Object Edit
The Bo3 configs contain the block settings and placement rules of the objects to be spawned in the world.
The files are located in the OpenTerrainGenerator/worlds/[world name]/Bo3 Objects folder. They can be arranged in any sort of folder structure.
Bo3 Object Edit
Information regarding the Bo3 object.
Author of this world. When creating a new custom object the authors name can be placed here.
A short description of the BO3 object. i.e. "Small jungle tree".
To be kept as version 3 to allow for version checks.
Normally, each time OTG reads the BO3 object, it also writes to it. With this setting you can change how OTG writes to this BO3. Possible modes:
|WriteAll||Autoupdate settings from old versions, order them, add comments, reset invalid settings and remove custom comments.|
|WriteWithoutComments||Same as WriteAll, but removes all comments, both the ones of Terrain Control and your own.== ==|
|WriteDisable||Don't write to the comment files. Errors are not corrected, old settings are read, but they are also not corrected. Custom comments won't be removed with this mode== ==|
This needs to be set to true to spawn the object in the Tree and Sapling resources.
The frequency of the BO3 from 1 to 200. This setting manages the number of attempts to spawn the object for each chunk hen using the CustomObject resource (Tree and CustomStructure have their own parameters, Sapling always tries to spawn exactly one tree). If you have very strict spawn conditions you might want to increase this.
The rarity of the BO3 from 0 to 100. Each spawn attempt has rarity% chance to succeed when using the CustomObject(...) resource.
The rarity can be very small. 0.0001 is possible.
If you set this to true, the BO3 will be placed with a random rotation. So one time the BO3 faces north, another time the BO3 faces east. This should usually be set to true.
The spawn height of the BO3 - atMinY, randomY, highestBlock or highestSolidBlock.
The offset from the spawn height to spawn this BO3.
Example: SpawnHeight = highestSolidBlock, SpawnHeightOffset = 3; This object will spawn 3 blocks above the highest solid block
A random amount to offset the spawn location from the spawn offset height.
Example: SpawnHeightOffset = 3, SpawnHeightVariance = 3; This object will spawn 3 to 6 blocks above the original spot it would have spawned.
The minimum and maximum height limit for the BO3 to spawn. Inclusive.
The minimum and maximum height limit for the BO3 to spawn. Inclusive.
The style of extrusion you wish to use - BottomDown, TopUp, None (Default).
The blocks to extrude your BO3 through.
When spawned as a structure, objects can have other objects attached to it: branches. Branches can also have branches attached to it, which can also have branches, etc. This maximum branch depth for this object. When you aren't using branches, you won't need this.
When spawned with the UseWorld or UseWorldAll keywords, this BO3 should NOT spawn in the following biomes.
If you don't use UseWorld or UseWorldAll to spawn this object, for example because you use CustomObject(thisObjectName) in the BiomeConfigs, this will have no effect.
ExcludedBiomes:All will make this object not spawn in UseWorld.
Source block settingsEdit
The id of the block the BO3 should spawn in. Multiple ID's can be specified, therefore the object can be permitted to spawn in more than block type. Used in combination with the next setting.
A percentage of how much block of the BO3 can be outside the source block.
What to do when the BO3 should do when it is about to place a block on a location where there is no source block.
|dontPlace||Cancel the block placement on that location, so that the terrain will overwrite the BO3. This can result in chopped off objects, sometimes that effect is intended (see making a path tutorial).|
|placeAnyway||Place the block anyway, so that the BO3 will override the terrain.|
All the blocks used in the BO3 are listed here. Possible blocks are as follows.
Block(0,1,0,STONE:1). This will spawn a granite 1 block above the centre block.
RandomBlock(0,0,0,CHEST,chest.nbt,50,CHEST,anotherchest.nbt,100). This will spawn a chest at the BO3 origin, and give it a 50% chance to have the contents of chest.nbt, or, if that fails, a 100% percent chance to have the contents of anotherchest.nbt.
nbt data - tile entities
Spawnable Entities Edit
Entity(0,1,0,Skeleton,4). Will spawn 4 skeletons that, by default, will not despawn.
Entity(0,1,0,Skeleton,Skeleton.text,1). This will search for the text file within the same directory as the object named skeleton.text and spawn 1 skeleton. Entity nbt data can be stored in a text file as opposed to an .nbt file.
The nbt data in the text file can be taken from any online summon command editor i.e. this one.
Example of the text found in the skeleton.text nbt file. This skeleton is wearing a leather helmet with a zero armor drop chance.
Here is a list of possible entities that can be spawned. These are case-insensitive and ignore underscores
so you can use any of the listed names.
To ensure entities spawn, it is best practice to place an air block in the same space as the entity. The way it would read in the block list would be:
MinecraftObject(x,y,z,name), spawns an object in the Mojang NBT structure format. For example, MinecraftObject(0,0,0,minecraft:igloo/igloo_bottom) spawns the bottom part of an igloo.
Require a condition at a certain location in order for the BO3 to be spawned.
- BlockCheck(x,y,z,BlockName[,BlockName[,...]]) - one of the blocks must be at the location
- BlockCheckNot(x,y,z,BlockName[,BlockName[,...]]) - all the blocks must not be at the location
- LightCheck(x,y,z,minLightLevel,maxLightLevel) - light must be between min and max (inclusive)
You can use "Solid" as a BlockName for matching all solid blocks or "All" to match all blocks that aren't air.
- BlockCheck(0,-1,0,GRASS,DIRT) Require grass or dirt just below the object
- BlockCheck(0,-1,0,Solid) Require any solid block just below the object
- BlockCheck(0,-1,0,WOOL) Require any type of wool just below the object
- BlockCheck(0,-1,0,WOOL:0) Require white wool just below the object
- BlockCheckNot(0,-1,0,WOOL:0) Require that there is no white wool below the object
- LightCheck(0,0,0,0,1) Require almost complete darkness just below the object
Branches are objects that will spawn when this object spawns when it is used in the CustomStructure resource. Branches can also have branches, making complex structures possible.
Regular Branches spawn each branch with an independent chance of spawning.
- branchName - name of the object to spawn.
- rotation - NORTH, SOUTH, EAST or WEST.
- IndividualChance - The chance each branch has to spawn, assumed to be 100 when left blank
- MaxChanceOutOf - The chance all branches have to spawn out of, assumed to be 100 when left blank