#######################################################################
# +-----------------------------------------------------------------+ #
# |                            BO3 object                           | #
# +-----------------------------------------------------------------+ #
#######################################################################

# This BO3 is made for use with MCW and OTG+.
# The descriptions in this file are only accurate for MCW and OTG+.
# For TerrainControl and OTG these descriptions are only accurate if the BO3 is used as a CustomObject.
# MCW and OTG+ completely reimplemented CustomStructure, check the MCW/OTG+ documentation for more information.

# This is the config file of a custom object.
# If you add this object correctly to your BiomeConfigs, it will spawn in the world.

# This is the creator of this BO3 object
Author: Unknown

# A short description of this BO3 object
Description: No description

# The BO3 version, don't change this! It can be used by external applications to do a version check.
Version: 4

# The settings mode, WriteAll, WriteWithoutComments or WriteDisable. See WorldConfig.
SettingsMode: WriteDisable

#######################################################################
# +-----------------------------------------------------------------+ #
# |                          Main settings                          | #
# +-----------------------------------------------------------------+ #
#######################################################################

IsOTGPlus: true
# This settings is currently unavailable for MCW/OTG+.
Tree: false

# The rarity of the BO3 from 0 to 100. Each spawn attempt has rarity% chance to succeed when using the CustomObject(...) resource.
# Ignored by MCW/OTG+ for Tree(..), Sapling(..) and CustomStructure(..).
Rarity: 100

# Minimum distance in chunks between structures with the same filename.
Frequency: 0

# This settings is currently unavailable for MCW/OTG+, you can easily work around this though by creating a master bo3 without blocks that
# has the real starting BO3 as a branch.
# You can then duplicate the master BO3 3 times and give each copy's branch a different rotation.
RotateRandomly: false

# The spawn height of the BO3 - randomY or highestBlock.
SpawnHeight: highestBlock

# The height limits for the BO3. Can be combined with randomY to spawn the BO3 at a random height
# between MinHeight and MaxHeight. Can be combined with highestBlock to make sure that the BO3 spawns
# only between MinHeight and MaxHeight.
MinHeight: 0

MaxHeight: 256

# This settings is disabled for MCW/OTG+.
ExcludedBiomes: All

# To optimise this BO3 for faster loading times you can use Notepad++ to find/replace comments and abbreviate things.
# Notepad++ find/replace with regex:
# Find: ^[#;].* replace to nothing removes all lines starting with # 
# Find: ^\s*$ replace to nothing removes most empty lines 
# Notepad++ find/replace without regex:
# *Warning: This will only work for OTG 1.10.2 v21 / OTG 1.11.2 v6 or higher. B( is not recognised by lower versions.
# Find: Block( replace to B(

#######################################################################
# +-----------------------------------------------------------------+ #
# |                      Source block settings                      | #
# +-----------------------------------------------------------------+ #
#######################################################################

# This settings is disabled for MCW/OTG+.
SourceBlocks: 20

# This settings is disabled for MCW/OTG+.
MaxPercentageOutsideSourceBlock: 100

# This settings is disabled for MCW/OTG+.
OutsideSourceBlock: placeAnyway

# MineCraft Worlds mod settings #
# NOTE: you can delete any of these settings if you're not using them, the default values will automatically be used. #

# Copies the blocks and branches of an existing BO3 into this BO3.
#InheritBO3:

# Defaults to true, if true and this is the root BO3 for this branching structure then this BO3's smoothing and height settings are used for all its children (branches).
#OverrideChildSettings: true

# If this is set to true then this BO3 can spawn as a branch on top of or inside an existing BO3/branch (only within the same customstructure).
#CanOverride: false

# If this is set to true then this BO3 can only spawn underneath an existing BO3. Used to make sure that dungeons only appear underneath buildings
#MustBeBelowOther: false

# A comma-seperated list of BO3s, this BO3 must touch one of these when spawned or it will not be able to spawn.
#MustBeInside: 

# A comma-seperated list of BO3s, this BO3 cannot touch one of these when spawned, if it does it will not be able to spawn.
#CannotBeInside: 

# Defaults to true. Set to false if the BO3 is not allowed to spawn on a water block
#CanSpawnOnWater: true

# Defaults to false. Set to true if the BO3 is allowed to spawn only on a water block
#SpawnOnWaterOnly: false

# Defaults to false. Set to true if the BO3 and its smoothing area should ignore water when looking for the highest block to spawn on. Defaults to false (things spawn on top of water)
#SpawnUnderWater: false

# Defaults to false. Set to true if the BO3 should spawn at water level
#SpawnAtWaterLevel: false


# Spawns the BO3 at a Y offset of this value. Handy when using highestBlock for lowering BO3s into the surrounding terrain when there are layers of ground included in the BO3, also handy when using SpawnAtWaterLevel to lower objects like ships into the water.
#HeightOffset: 0

# If set to true removes all 20 blocks from the BO3 so that it can be flooded or buried.
#Remove20: true

# Replaces all the non-20 blocks that are above this BO3 or its smoothing area with the given block material (should be WATER or 20 or NONE), also applies to smoothing areas although it intentionally leaves some of the terrain above them intact. WATER can be used in combination with SpawnUnderWater to fill any 20 blocks underneath waterlevel with water (and any above waterlevel with 20).
#ReplaceAbove: 20

# Replaces all 20 blocks underneath the BO3 (but not its smoothing area) with the designated material until a solid block is found.
#ReplaceBelow:

# Defaults to true. If set to true then every block in the BO3 of the materials defined in ReplaceWithGroundBlock or ReplaceWithSurfaceBlock will be replaced by the GroundBlock or SurfaceBlock materials configured for the biome the block is spawned in.
#ReplaceWithBiomeBlocks: true

# Defaults to DIRT, Replaces all the blocks of the given material in the BO3 with the GroundBlock configured for the biome it spawns in
#ReplaceWithGroundBlock: DIRT

# Defaults to GRASS, Replaces all the blocks of the given material in the BO3 with the SurfaceBlock configured for the biome it spawns in
#ReplaceWithSurfaceBlock: GRASS


# Makes the terrain around the BO3 slope gradually towards the edges of the BO3. The given value is the distance in blocks around the BO3 from where the slope should start and can be any positive number.
#SmoothRadius: 0

# Moves the smoothing area up or down relative to the BO3 (at the points where the smoothing area is connected to the BO3). Handy when using SmoothStartTop: false and the BO3 has some layers of ground included, in that case we can set the HeightOffset to a negative value to lower the BO3 into the ground and we can set the SmoothHeightOffset to a positive value to move the smoothing area starting height up
#SmoothHeightOffset: 0

# Should the smoothing area be attached at the bottom or the top of the edges of the BO3? Defaults to false (bottom). Using this setting can make things slower so try to avoid using it and use SmoothHeightOffset instead if for instance you have a BO3 with some ground layers included. The only reason you should need to use this setting is if you have a BO3 with edges that have an irregular height (like some hills).
#SmoothStartTop: false

# Should the smoothing area attach itself to "log" block or ignore them? Defaults to false (ignore logs).
#SmoothStartWood: false

# The block used for smoothing area surface blocks, defaults to biome SurfaceBlock
#SmoothingSurfaceBlock:

# The block used for smoothing area ground blocks, defaults to biome GroundBlock
#SmoothingGroundBlock:


# Define groups that this BO3 belongs to along with a minimum range in chunks that this BO3 must have between it and any other members of this group if it is to be allowed to spawn. Syntax is "GroupName:Frequency, GoupName2:Frequency2" etc so for example a BO3 that belongs to 3 groups: "BO3Group: Ships:10, Vehicles:5, FloatingThings:3"
#BO3Group:

# Defaults to false. Set to true if this BO3 should spawn at the player spawn point. When the server starts the spawn point is determined and the BO3's for the biome it is in are loaded, one of these BO3s that has IsSpawnPoint set to true (if any) is selected randomly and is spawned at the spawn point regardless of its rarity (so even Rarity:0, IsSpawnPoint: true BO3's can get spawned as the spawn point!).
#IsSpawnPoint: false

# Defaults to 8, if SpawnPointY > -1 and this BO3 is spawned at the spawn point then the player spawn point is placed within this BO3 at x y and z offsets (spawnPointX, spawnPointY, spawnPointZ) relative to x0y0z0 in this BO3.
#SpawnPointX: 8

# Defaults to highestBlock, if this is defined and this BO3 is spawned at the spawn point then the player spawn point is placed at a y offset of this value relative to y = 0 in this BO3.)
#SpawnPointY: -1

# Defaults to 7, if spawnPointY > -1 and this BO3 is spawned at the spawn point then the player spawn point is placed within this BO3 at a x y and z offsets (spawnPointX, spawnPointY, spawnPointZ) relative to x0y0z0 in this BO3.
#SpawnPointZ: 7

#######################################################################
# +-----------------------------------------------------------------+ #
# |                              Blocks                             | #
# +-----------------------------------------------------------------+ #
#######################################################################

# All the blocks used in the BO3 are listed here. Possible blocks:
# Block(x,y,z,id[.data][,nbtfile.nbt) or B(x,y,z,id[.data][,nbtfile.nbt)
# RandomBlock(x,y,z,id[:data][,nbtfile.nbt],chance[,id[:data][,nbtfile.nbt],chance[,...]])
# So RandomBlock(0,0,0,CHEST,chest.nbt,50,CHEST,anotherchest.nbt,100) 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.

Block(-2,0,3,17:1)
Block(-2,1,3,17:1)
Block(-2,2,3,17:1)
Block(-2,3,3,17:1)
Block(-2,4,3,17:1)
Block(-2,5,-1,20)
Block(-2,5,0,20)
Block(-2,5,1,20)
Block(-2,5,2,17:9)
Block(-2,5,3,17:1)
Block(-2,6,-1,20)
Block(-2,6,0,20)
Block(-2,6,1,20)
Block(-2,6,2,20)
Block(-2,6,3,17:1)
Block(-2,7,-1,20)
Block(-2,7,0,20)
Block(-2,7,1,20)
Block(-2,7,2,20)
Block(-2,7,3,17:1)
Block(-2,8,-1,20)
Block(-2,8,0,20)
Block(-2,8,1,20)
Block(-2,8,2,20)
Block(-2,8,3,17:5)
Block(-2,9,-1,4)
Block(-2,9,2,4)
Block(-2,10,0,4)
Block(-2,10,1,4)
Block(-1,0,3,4)
Block(-1,0,4,97:3)
Block(-1,1,3,109:5)
Block(-1,1,4,4)
Block(-1,2,3,20)
Block(-1,2,4,97:2)
Block(-1,3,3,20)
Block(-1,3,4,97:2)
Block(-1,4,3,139)
Block(-1,4,4,97:2)
Block(-1,5,-1,20)
Block(-1,5,0,20)
Block(-1,5,1,20)
Block(-1,5,2,20)
Block(-1,5,3,139)
Block(-1,5,4,4)
Block(-1,6,-1,20)
Block(-1,6,0,20)
Block(-1,6,1,20)
Block(-1,6,2,20)
Block(-1,6,3,139)
Block(-1,6,4,97:2)
Block(-1,7,-1,20)
Block(-1,7,0,20)
Block(-1,7,1,20)
Block(-1,7,2,20)
Block(-1,7,3,139)
Block(-1,7,4,97:2)
Block(-1,8,-1,20)
Block(-1,8,0,20)
Block(-1,8,1,20)
Block(-1,8,2,20)
Block(-1,8,3,17:5)
Block(-1,9,-1,4)
Block(-1,9,0,4)
Block(-1,9,2,4)
Block(-1,10,1,4)
Block(-1,10,2,4)
Block(0,0,3,4)
Block(0,0,4,97:3)
Block(0,1,3,109:4)
Block(0,1,4,97:3)
Block(0,2,3,139)
Block(0,2,4,97:3)
Block(0,3,3,139)
Block(0,3,4,97:2)
Block(0,4,3,139)
Block(0,4,4,97:2)
Block(0,5,-1,20)
Block(0,5,0,20)
Block(0,5,1,20)
Block(0,5,2,20)
Block(0,5,3,20)
Block(0,5,4,97:2)
Block(0,6,-1,20)
Block(0,6,0,20)
Block(0,6,1,20)
Block(0,6,2,20)
Block(0,6,3,20)
Block(0,6,4,97:2)
Block(0,7,-1,20)
Block(0,7,0,20)
Block(0,7,1,20)
Block(0,7,2,20)
Block(0,7,4,97:3)
Block(0,8,-1,20)
Block(0,8,0,20)
Block(0,8,1,20)
Block(0,8,2,20)
Block(0,8,3,17:5)
Block(0,9,-1,4)
Block(0,9,0,4)
Block(0,9,1,4)
Block(0,9,2,4)
Block(0,10,0,4)
Block(0,10,1,4)
Block(1,0,3,17:1)
Block(1,1,3,17:1)
Block(1,2,3,17:1)
Block(1,3,3,17:1)
Block(1,4,3,17:1)
Block(1,5,-1,20)
Block(1,5,0,20)
Block(1,5,1,20)
Block(1,5,2,17:9)
Block(1,5,3,17:1)
Block(1,6,-1,20)
Block(1,6,0,20)
Block(1,6,1,20)
Block(1,6,2,20)
Block(1,6,3,17:1)
Block(1,7,-1,20)
Block(1,7,0,20)
Block(1,7,1,20)
Block(1,7,2,20)
Block(1,7,3,17:1)
Block(1,8,-1,20)
Block(1,8,0,20)
Block(1,8,1,20)
Block(1,8,2,20)
Block(1,8,3,17:1)
Block(1,9,-1,4)
Block(1,9,1,4)
Block(1,9,2,4)
Block(1,10,-1,4)
Block(1,10,0,4)
Block(1,10,1,4)


#######################################################################
# +-----------------------------------------------------------------+ #
# |                             ModData                             | #
# +-----------------------------------------------------------------+ #
#######################################################################

# Currently only available for MCW, this feature will be added to OTG+ a.s.a.p.# Use the ModData() tag to include data that other mods can use
# ModData(x,y,z,ModName,DataText)
# Example: ModData(x,y,z,MyCystomNPCMod,SpawnBobHere/WithAPotato/And50Health)
# MCW has some built in ModData commands for basic mob and block spawning.
# These are mostly just a demonstration for mod makers to show how ModData.
# can be used by other mods.
# For mob spawning in MCW use: ModData(x,y,z,TC/MCW,mob/MobType/Count/Persistent/Name)
# mob: Makes MCW recognise this as a mob spawning command.
# MobType: Lower-case, no spaces. Any vanilla mob like dragon, skeleton, wither, villager etc
# Count: The number of mobs to spawn
# Persistent (true/false): Should the mobs never de-spawn? If set to true the mob will get a
# name-tag ingame so you can recognise it.
# Name: A name-tag for the monster/npc.
# Example: ModData(0,0,0,TC/MCW,villager/1/true/Bob)
# For a complete list of possible creatures check the mc forums or the mctcp forums.
# To spawn blocks using ModData use: ModData(x,y,z,TC/MCW,block/material)
# block: Makes MCW recognise this as a block spawning command.
# material: id or text, custom blocks can be added using ModName:MaterialName.
# To send all ModData within a radius in chunks around the player to the specified mod
# use this console command: /mcw GetModData ModName Radius
# ModName: name of the mod, for MCW commands use TC/MCW 
# Radius (optional): Radius in chunks around the player.
# Mod makers can use ModData and the /mcw GetModData command to test IMC communications between MCW
# and their mod.
# Normal users can use it to spawn some mobs and blocks on command!

#######################################################################
# +-----------------------------------------------------------------+ #
# |                             Entities                            | #
# +-----------------------------------------------------------------+ #
#######################################################################

# Entity() spawns an entity instead of a block. The entity is spawned only once when the BO3 is spawned.
# Entities are persistent by default so they don't de-spawn when no player is near, they are only unloaded.
# Usage: Entity(x,y,z,mobName,groupSize,NameTagOrNBTFileName) or Entity(x,y,z,mobName,groupSize)
# Use /tc entities or /otg entities to get a list of entities that can be used as mobName, this includes entities added by other mods.
# NameTagOrNBTFileName can be either a nametag for the mob or an nbt file (such as mymobinfo.nbt or mymobinfo.txt).
# When using a text file you can use the same mob spawning parameters used with the /summon command to equip the
# entity and give it custom attributes etc. You can copy the DATA part of a summon command including surrounding
# curly braces to a .txt file, for instance for: "/summon Skeleton x y z {DATA}"

#######################################################################
# +-----------------------------------------------------------------+ #
# |                             Spawners                            | #
# +-----------------------------------------------------------------+ #
#######################################################################

# Currently only available for MCW, this feature will be added to OTG+ a.s.a.p.# Spawner(x,y,z,EntityType,count,interval,chance,max,despawnTime,velocityX,velocityY,velocityZ,yaw,pitch) tag for BO3's,
# works just like the Block() tag and is spawned when the BO3 is spawned. Spawners are invisible ingame but can be blocked
# up with a solid or liquid block (depending on if the entity being spawned can spawn in those blocks) to prevent entities
# from spawning. A spawner tries to spawn <count> number of <entityType> each <interval> seconds, with each entity having
# a spawn chance of <chance>%. The spawner can only spawn an entity if there are not more than <max> of the same EntityType
# in the surrounding chunks (3x3 chunk area centered on the spawner). If an entity is assigned a <despawnTime> in seconds
# then the entity will automatically be despawned after the specified time. Entities spawned using a Spawner will have the
# same light level requirements as they do when they normally spawn in the world, so most monsters only spawn in the dark.
# A spawner will not spawn if the spawn location is blocked by another entity, it can however spawn multiple mobs at once.
# The last 6 parameters are optional and are set to 0 by default (despawnTime,velocityX,velocityY,velocityZ,yaw,pitch), you
# only need to add as many of those parameters as you need. So for instance all of these work: "Spawner(0,0,0,Arrow,1,5,100,5)"
# "Spawner(0,0,0,Arrow,1,5,100,5, 1,0,1)" "Spawner(0,0,0,Arrow,1,5,100,5,1,0,1,180,180)"
# Use the /mcw entities or /otg entities console command (ops only) to see a list of available entityTypes.

#######################################################################
# +-----------------------------------------------------------------+ #
# |                             Particles                           | #
# +-----------------------------------------------------------------+ #
#######################################################################

# Currently only available for MCW, this feature will be added to OTG+ a.s.a.p.# Continually spawns particles in the world at the specified coordinates, interval and velocity.
# For a list of particles use /mcw particles or /otg particles.
# When no velocity is supplied a small random velocity is used.
# Particles will disappear if a solid block is placed on them for at least one second.
# Usage1: Particle(x, y , z, particleName, interval
# Usage2: Particle(x, y , z, particleName, interval, velocityX, velocityY, velocityZ)

#######################################################################
# +-----------------------------------------------------------------+ #
# |                            BO3 checks                           | #
# +-----------------------------------------------------------------+ #
#######################################################################

# This settings is disabled for MCW/OTG+.

#######################################################################
# +-----------------------------------------------------------------+ #
# |                             Branches                            | #
# +-----------------------------------------------------------------+ #
#######################################################################

# Check the otg docs, mctcp forums, the mc forums and PeeGee85 YT channel for.
# Documentation and tutorials for the branching features.
# Branch(x,y,z,isBranchEnding,branchName,rotation,chance,branchLength)
# branchName - filename of the object to spawn (without extension).
# rotation - NORTH, SOUTH, EAST or WEST.
# chance - Chance to spawn between 0 and 100

# WeightedBranch(x,y,z,isBranchEnding,branchName,rotation,chance,branchLength,[anotherBranchName,rotation,chance,branchLength[,...]],maxChanceOutOf)
# maxChanceOutOf - The chance all branches have to spawn out of, assumed to be 100 when left blank
# Example: WeightedBranch(0,0,0,true,RandomInterior1,NORTH,20,0,RandomInterior2,NORTH,20,0,RandomInterior3,NORTH,20,0,RandomInterior4,NORTH,20,0)

