CHANGELOG:
v1 - Initial Release

v2 - Template File Release
+ Template files interface added, .minecraft/mods/resources/ruins/*.tml

v3 - Options File Release
+ Mod options file, .minecraft/ruins.txt
+ Log file for errors, .minecraft/ruins_log.txt
+ Block Metadata support added
+ Template weights for randomization
+ Embed distance, allowing basements to be created

v4 - ModLoader Release
+ Complete ModLoader v5 compatibility, no base classes modified
+ Random site rotation

v5 - Biome-Specific Release
+ Templates can now spawn in the Nether
+ Templates can now spawn specific to a biome
+ Templates can now spawn in and around water and lava
+ Automatic terrain leveling and cutting
+ Added a new "under block" conditional to the templates

v6 - 
+ Options per world
+ Added Unique flag (only generate once per world)
+ Unique ruins are retained between world loads
+ Added a .schematic converter (no documentation!)
+ Ruins now have a bounding box to prevent sloppy generation
+ Attempted to fix edge of world generation (we'll see)

v7 -
+ changed folder structure: all ruin related files now base off the /mods/ folder, resources for example goes to /mods/resources
+ scrapped hardcoded and mismatching Biome Index in favor of a dynamic solution, directly accessing BiomeGenBase for all Biomes
+ added new and changed other folder names to match Notch Biome designations. Make sure your custom structures are in the new folder!
+ added SMP version (requires MLMP) - clients connecting to a server do not need to have the mod installed
+ added drag and drop batch file to schematic converter, made some Jungle Structures
+ added new plants to plant exlusion lists
+ added tons of unique Structures and Traps, courtesy of Arrrg http://www.minecraftforum.net/topic/293667-123-amco-arrrgs-minecraft-overhaul/

v7.1 (server only) -
+ fixed file system problems

v7.2 -
+ upped maximum amount of supported Biomes from 50 to 500
+ removed leading slashes from folder designators (no more absolute path enforcing)

v7.2b -
+ fixed Array Length in RuinStats class to 500 aswell

v7.3 -
+ ported from ModLoaderMP to Forge NetworkMod (Yes that DOES mean it now requires Forge)
+ updated Block metadata Handling to include: Brick/Stone/Netherbrick Stairs, TrapDoors

v7.4 -
+ hopefully updated Template rotating metadata Handling to not screw up inverted Stairs

v7.4B -
+ fixed inverted stairs metadata for reals this time

v7.4C -
+ Added metadata rotation translator for BlockVines (106)

v.7.4 for 1.3.1
+ compiled against Modloader 1.3.1, same file should work both client and server

7.5 for 1.3.2
+ ported to FML. No longer supports ModLoader. Works both client and server.

7.5B
+ purged Minecraft clientside only code remnants from Modfile

7.6
+ changed World Savedir Finding method to be more robust

7.7
+ update to MC 1.4 and Forge 5

7.7 - im keeping the number, nobody used the first rev anyway
+ update to MC 1.4.2 and Forge 6

7.8
+ made sure Ruins loads after ExtraBiomesXL if present
+ added implementation of ExtraBiomesXL API, now finds those Biomes
+ added creation of empty folders for Biomes you don't have templates for

7.9
+ redid World Savedir Finder again, now uses Chunk Saving Location

8.0
+ Update to Minecraft 1.4.4

8.1
+ small bugfix to World Savedir locator

8.2
+ screw it, using Reflection to get World Savedir now
a: setAccessible now true

8.3
+ fixed initialization problem preventing Extra Biomes to spawn stuff by default
+ made cavechunk's pack the default pack, props to him http://www.minecraftforum.net/user/973867-cavechunk/

8.4
+ fixed crash when placing invalid chests via template

8.5
+ added possibility to place custom Mob ID MobSpawners (only manually!)
# Example 6: rule1=0,100,315-0'Villager
# This spawns a custom Mob Spawner (315) with Mob Id "Villager" (and metadata 0) 100% of the time

8.6
+ dumped the hardcoded 300-311 and 315 block IDs in favor of a string based system, see template_rules.txt
+ OLD TEMPLATES USING ANY OF THESE WILL NOT BE COMPATIBLE. DELETE YOUR OLD FOLDER AND CONVERT YOUR TEMPLATES
+ included templates are already converted
+ relevant part of template_rules.txt:

#        /*
#         * Conversion table from old Ruins 8.5 template style to new 8.6+ style
#         * 
#         * Just handling the part where you used to specify 'special' blocks
#         * Full Example: "rule1=0,25,310" turns into "rule1=0,25,MediumChest"
#         * 
#         * 300 -> preserveBlock
#         * 301 -> MobSpawner:Zombie
#         * 302 -> MobSpawner:Skeleton
#         * 303 -> MobSpawner:Spider
#         * 304 -> MobSpawner:Creeper
#         * 305 -> UprightMobSpawn
#         * 306 -> EasyMobSpawn
#         * 307 -> MediumMobSpawn
#         * 308 -> HardMobSpawn
#         * 309 -> EasyChest
#         * 310 -> MediumChest
#         * 311 -> HardChest
#         * 315-0'Villager -> MobSpawner:Villager
#         * 
#         */
# As of 8.6, you can also specify a Block Name instead of it's numeric ID! This should be
# very useful to use Ruins with other Mods and changible Block IDs. Make sure to use the
# absolute Blockname, not the translation! Example: "44-2" can also be written as "stoneSlab-2"

8.7
+ update to MC 1.4.6

8.8
+ synchronized World Generation Hook, also made sure the 0,0 chunk doesn't ever spawn anything

8.9
+ unleashing the custom rotation config file! You should now be able to use any and all blocks
  for your Ruins, if you make rotation mappings for them.
+ read /mods/resources/ruins/rotation_mappings.txt for information and examples
+ to facilitate the figuring out of block names and metadata, Ruins will now print out the
  relevant information about a block ingame if you tap it with a "stick".
  
8.9 (second rev)
+ fixed tiny possible crash with empty lines in template parser. Old versions remain compatible.

9.0
+ added option for chests filled with MC ChestGenHook loot (see template_rules.txt)
+ added a small chance (1/25) for dungeon loot to be put into "loot" chests

9.1
+ forced biome folders to always-lowercase, maybe helps mod biome issues
+ (rename your old template folders to be all-lowercase)

9.2
+ catches and logs invalid Block IDs when parsing templates, uses air blocks instead

9.3
+ update to MC 1.5

9.4
+ update to MC 1.5.1

9.5
+ added fallback methods and error logging when using pre-8.6 style templates or invalid blocks
+ subsequently found and fixed errors in 2 default templates

9.6
+ added generation for the End (Biome "sky")
+ added EnderCrystal entities for placement. Usage like spawners, keyphrase EnderCrystal
+ example: rule1=0,100,EnderCrystal
+ will turn target Block into Bedrock(!!!!) and an Ender Crystal ontop of it

9.6 (second coming)
+ disabled spawning in Chunks at 0,0 and the 2 adjacent chunks altogether

9.7
+ changed setBlock back to work without block update, allows update based traps again
+ added Mooshroom rotational mappings courtesy of Arrrg
+ added End structures courtesy of Arrrg

9.8
+ added circular code check to prevent a reported StackOverFlow crash

9.9
+ fixed Ruins to no longer disregard non-consecutive Biomes in the Biome array

9.9 rev2 (same version)
+ fixed consecutive Biomes bug in 2 more places

10.0
+ update to MC 1.5.2

10.1
+ made Ruins logic distinctly and concurrently per-world and atomic, should fix server Dimension oddness
+ disabled Ruins excessive logging by default. You can re-enable it in ruins.txt in your world save directory

10.1b
+ moved the recursive generator check back into the main mod from per-world logic, does not seem to catch with multimc

10.2
+ added biomesToSpawnIn optional setting to template rules
+ added "generic" folder which is now supposed to contain the "common" templates instead of the /resources/ruins/ base folder

10.2 rev2 (same version)
+ fixed "Ruins Mod determines ..." log spam
+ slightly improved world handling

10.3
+ ninja'd Biome code change
+ added Command Block support, example: rule1=0,100,CommandBlock:command:sender

10.4
+ update to MC 1.6.1

10.5
+ update to MC 1.6.2

10.6
+ changed Chest rules to allow metadata specification (optional)
+ added unique Floater and Underwater base templates, courtesy of Count_Chuckula

10.7
+ update to MC 1.6.4

10.8
+ added RuinPositionsFile.txt to each World save Ruins generates in. See file for details
+ added NOT conditionals to block rules

10.9
+ moved all file parsing and writing into seperate threads of their own
+ changed NOT conditional block run sequence to match the normal rules
+ removed some console debug logging
+ additional templates by jsmith added
+ template reorganziation courtesy of Blue001

11.0
+ some spawning logic changes by 4HeadTiger
+ overlapping check now via sweep n prune algorithm
+ added template-specific minimal distances and ruin minimum distances from each other
+ moved biome variable printout to logging, to be disabled as such when needed

12.0
+ update to MC 1.7.2
+ all previous templates are incompatible, im afraid
+ i've subsequently dumped the schematic converter
+ the included templates have been updated to the new values, see credits file
+ many thanks to Saeldur for doing this

12.1
+ added Ruins support for signs with text on them
+ added Ruins support for skulls/heads
+ fixed mappings: trapdoor, tripwire, repeater, comparator, furnace, chest,
+   dropper, wodden button, activator rail, quartz stairs, piston, dispenser,
+   cocoa, anvil, fence gate, end portal frame, all log types, quartz pillars
+ glorious rebirth of the template converter, now ingame admin command "/parseruin"
+   does not require the client to have Ruins installed
+   upon execution, saves the result template on the server(!) in the "templateparser" biome folder
+   converter supports custom mob spawners and command blocks, also custom signs
+   does not support chest content (is replaced by dungeon chestgenhook, 5 items)
+   converter has basic support for any block, even mod blocks, and their meta values
+   note for full support of mod block rotations you might have to add rotation mappings for them
+ also adds testing command "/testruin" which can be used to spawn any ruin template
+   any template is specified by "biomefolder/filename" (SERVERS FOLDER!)
+   or just "filename" when the template is located in the "templateparser" biome folder
+   you may also append an optional rotation digit [NESW = 0123] to test template rotation

12.2
+ added Ruins support for any IInventory block with any Block/Item specs
+ see template_rules.txt for details and examples
+ Ruins ingame parser now supports reading and saving IInventory containers and contents
+ yes this does in fact include mod added chests and mod added items

12.3
+ changed IInventory block syntax, 12.2 cant work unfortunately
+ fixed some errors in IInventory system
+ fixed some bugs with TileEntity blocks not rotating correctly

12.4
+ fixed issue where Ingame Ruin Parser could not parse more than 1 instance of each special blocktype

12.5
+ fixed issue where Ingame Ruin Parser could not parse negative coordinates in Command Blocks

12.6
+ fixed several issues with special characters (Command Blocks, Mobspawners, Signs)
+ added logging and best-effort Entity Mapping to Mobspawner Entity IDs
+ improved ingame template parser for torches, buttons and signs, now setups delayed spawns correctly to fix "popping off"

12.7
+ made acceptable_target_blocks optional, can also be left empty
+ such a template will accept any surface
+ also added optional unacceptable_target_blocks, works as complement to acceptable_target_blocks
+ changed template parser default to wildcard acceptable_target_blocks and just add water and lava to unacceptable_target_blocks

12.8
+ added optional slot index number to IInventory lines in templates. Parser will save slots exactly as found.
+ complete rewrite of Building Site algorithm, better and hopefully faster
+   any and all sorts of plants should no longer block Ruins from spawning, at all
+   removed cut_in in favor of max_leveling (which now works both for holes and bumps) and defaults to 2 now
+   new recalculation of site surface should spawn Ruins in places previously found unfit
+   allows setting leveling_buffer=-1 to prevent site leveling (for example for underground templates)
+ positions file now blocks an area around spawn by default
+ ruin spacing increased by default
+ complete revamp of default template set, mostly generic now. Moved others into "optional" and "obsolete" sets

12.9
+ premature optimization probably made the collision detector not work ... brute force it is
+ added world chunk logging to detect IWorldGenerator.generate being called multiple times
+ scrapped "unique" template setting because it never quite worked right. Use templateInstancesMinDistance
+ added sanity checking to height values. Ruins bounds can now only be set starting height 8 and fitting below max world height
+ added optional coordinates to testruin command, can be called from server console with coordinates

13.0 (the shipwreck spam update)
+ adds forge event EventRuinTemplateSpawn
+ adds server command /undoruin which lets you restore the building site of the last /testruin command
+ fixed small issue where templateparser would create unnecessary duplicate rules
+ fixed the underwater shipwreck templates up a bit, added one more
+ minor optimizations, improvements to logging broken templates

13.1 (Command Blocks Rising: Revengeance)
+ Command Block relative coordinates now automatically get rotated when their template is
+ added feature to automatically execute and delete command blocks upon a player coming near (64 block)
+   to use, just take your rulex=0,100,CommandBlock:/summon Villager... and prefix "RUINSTRIGGER " to the command line
+   example: rulex=0,100,CommandBlock:RUINSTRIGGER /summon Villager...
+ by the power of regex, fixed all Ruins templates which had torches without late spawning rules - no more popped off torches
+ Standard blocks in Ruins templates are now set without update, and the entire site updated after. Should help spawning lag a bit.

13.2
+ fixed Command block relative coordinate rotation up a bit (was included in previous hotfix)
+ changed Template Parser to fail if a block/rule cannot be mapped
+   if you are using mod blocks in a template, and the mod is not installed, the template wont attempt to spawn
+ changed Template parsing to read extended Piston heads as delayed spawning Blocks, similar to torches

13.3 (King of imaginary paper)
+ removed some old superfluous code, some unnecessary logging and warnings
+ refactored logging to print less useless data and some more useful things
+ why didn't anybody tell me Ruins demanded clients have it installed since some forge update?! fixed
+  HOTFIX: handler was reading min template distances before file parser had gottem to them

13.4
+ updated to mc 1.7.10

13.5
+ changed distance finding algorithm for detecting nearby ruins, should work better for huge templates and close distances

13.6
+ removed obsolete and fairly expansive bounding boxes overlap check (since there is a min distance check anyway)
+ fixed problems with Ruins event, split it into 2: pre and post event

13.7
+ added allowedDimensions line to per-world ruins config file, does what the name implies
+ refactored a bunch of things, made code cleaner

13.7a
+ reverted a refactoring change that apparently was needed after all

13.8
+ added optional template variable "uniqueMinDistance" which overrides global templateInstancesMinDistance

13.9
+ template parser now also saves minecraft:torch-5 with the EXISTS_BELOW(1) rule
+ fixed event bug related to testing templates
+ fixed template spawning not marking the topmost layer for a world block update (invisible oddness)
+ added optional template variable 'preventRotation=1', which when set prevents a template from being rotated

14.0
+ changed /testruin syntax to /testruin TEMPLATENAME [X Y Z [ROTATION]] - it was: /testruin TEMPLATENAME [ROTATION X Y Z]
+ improved /testruin to accept relative coordinates aka "~x"
+ improved /testruin to work when used by command blocks
+ added server command documentation to readme

14.1
+ consolidated template spawning: now no rule will call block updates before spawning is finished. might fix redstone/piston bugs
+ fixed oddness in /testruin always spawning one y too high (this is for all coordinate types!)
+ fixed Skull Blocks being broken, unfortunately this means the syntax changed
+ from Skull:skulltype:rotation[:playername]-meta to Skull:skulltype:rotation[:uuid-playername]-meta
+ i dont think you can find out uuid by yourself, so use the template parser to get player heads

14.2
+ improved undo command to only save ruin sites BEFORE actually spawning ruins
+ /testruin now also allows to replace the specified y coordinate with "_", which signals Ruins to find a suitable y for given x,z
+ with exactly the same behaviour (flying, underground...) a randomly spawning template would display
+ this y specification may NOT be combined with "~", aka "_~2" will NOT work

14.3
+ fixed command block rule to accept multiple command blocks as alternatives
+ note you cannot mix a command block rule with non-command-blocks unfortunately. command block syntax is too unforeseeable
+ added optional bonemeal flag to IGrowable block rules. just append "-addbonemeal" to an existing plant ruleblock
+ added adjoining_template functionality, see doc for details
+ /undo supports the removal of everything a template with adjoining templates spawned
+ see 143test and adjtest in the templateparser directory for how adjoining_template works

14.4
+ fixed "air" not being processed when preservable blocks were present
+ internal changes. report bugs with old templates!
+ fixed ruin spawning not necessarily causing a clientside block update

14.5
+ updated to MC 1.8, no changes to template format (yet)
+ hotfixed issue with chest generation

14.6
+ fixed snow / snow_layer typo

14.7
+ fixed some more command block parsing errors

14.8
+ fixed IGrowable metadata bug

14.9
+ now supports item nbt data in inventories (names, enchantments..)
+ hotfix: bunch of issues with unsupported items and wrong item slots for the last item
+ hotfix: command block brackets breaking on template load

15.0
+ now supports ChestGenHook for any IInventory block in place of static itemlist (youll have to edit those in manually)
+ now supports saving and loading raw tile entity nbt data. The world-specific ruins.txt has a new line "teblocks=" behind which you can specify
    blocks which should have their tile entities serialized (each is considered unique). The data is saved in json format, unfortunately with nonportable (numeric) IDs for inventories.
    DO NOT USE FOR INVENTORIES. THE NUMBERS WILL BREAK. Also note ruins.txt with the teblocks setting is only parsed when new chunks are generated, and only takes effect after.

15.1
+ more work done to get complex nbt data parsed and restored, notably writable books in inventories

15.2
+ template-breaking change: all nbt strings must now be escaped according to the Apache StringEscapeUtils inside the .tml files, ingame parser does this for you of course
    if you have any special or complex custom templates, im sorry, you'll have to spawn them in a world with 15.1 and parse them again with 15.2 or escape all special chars by hand

15.3
+ put the actual template building code inside an exception catcher so Ruins wont crash servers because of faulty templates

15.4
+ fixes some config reading issues when no values were specified

15.5
+ updated to current forge, bugfix to multidimensional logfiles
+ fixes some config reading issues when no values were specified

15.6
+ fixes intersection and distance checks, courtesy of homacs pull request

15.7
+ updated to mc 1.9

15.8
+ fixes concurrent modification crash happening with new ruinstrigger command logic

15.9
+ reworked chestgenhook with new mc 1.9 system to basically provide the old functionality with the new loot tables
+ fixed up documentation of chestgenhook to explain the new inner workings

16.0
+ added support for chain and repeat command blocks by handling them as "teBlock" types automatically (they dont need RUINSTRIGGER)
+ added meta value support for command blocks, works as anywhere else, add "-n" with n=meta to the rule end
+ added command block rotation mappings to the mappings file
+ moved global config to configs folder (from mods folder)
+ moved logfiles to logs folder (from mods folder)
+ Ruins positions file and world specific config files remain in each world save folder
+ Jordan_Peacock's untested 1.9 templates set is now the default template set
+ (hotfix) fixed teBlock not working on ItemBlock / ItemBlockSpecial types

16.1
+ updated to mc 1.9.4

16.2
+ updated to mc 1.10
(hotfix) made ChestGenHook work on all IInventory types

16.3
+ updated to mc 1.11

16.4
+ adds missing fences rotation mappings (thanks Jordan)
+ adds a complete vanilla chestgenhook list
+ fixes chests being parsed as IInventory instances instead of chest rules
+ fixes empty slots being parsed as air blocks
+ fixes chestgenhooks not putting results into the IInventory

16.5
+ added support for blocknames containing '-' characters

16.6
+ MOVED THE TEMPLATE FOLDER, RUINS NOW COMES AS JAR
+ runtime location is now ".minecraft/config/ruins_config/" instead of ".minecraft/mods/resources/ruins/"
+ upon launch, the mod checks if that folder exists. If not, it extracts the default ruleset from the jar

16.7
+ adapted to Biomes having only ResourceLocations (not names) on server - for your templates, nothing has changed

16.8
+ new rule variation system by QuarterAnimal

16.9
+ fix biome specific template folders with underscores in the name to work again, thanks QuarterAnimal again

17.0
+ adds optional variables "spawnMinDistance" and "spawnMaxDistance", cleaning some obsolete documentation (QuarterAnimal)

17.1
+ adds optional variable "enableStick" to the Ruins world config to turn off stick debugging info
+ remove embed distance from surface search, bugfix (QuarterAnimal)
+ fix pirateship template levelling, bugfix (QuarterAnimal)

17.2
+ resolve off-by-one Y-coordinate selection/adjustment issues--prevents floating ruins, bugfix
+ correct alternate (bottom-up) nether Y-coordinate search, bugfix
+ recover original leveling fill block after Y-coordinate adjustment, bugfix
+ extend structure bounding box (for /undo) to include leveling effects, bugfix
+ constrain nether worldgen to chunk being decorated--reduces "cascading worldgen" log spam, bugfix
+ don't force generic template if no specific template available, bugfix
+ all parameters documented in default config and /parseruin template files
+ added config option to make /parseruin rules line up nicely
+ properly handle quoted braces in {NBT tag rule text}, bugfix
+ hide commas in [bracketed rule text], 1.13 prep
+ templates can now specify biomes to spawn in by type
+ enhance biomeTypesToSpawnIn with simple boolean operations
+ templates can now declare required/prohibited mods
+ cache block states for efficient repeat use, 1.13 prep
+ enhance requiredMods/biomeTypesToSpawnIn with fancier boolean operations
+ revert 15.2--no additional layer of escape needed for JSON, bugfix
+ /parseruin rules no longer include tile entity absolute positions, bugfix
+ configure teBlock TileEntity correctly--allows execute-on-spawn command blocks, bugfix

17.3
+ interpret IInventory block as block instead of item, bugfix
+ lump teBlock spec before splitting into fields, bugfix
+ improve readability of /parseruin parameter settings
+ optionally allow /testruin to ignore world ceiling
+ resolve RuinsPositionsFile.txt concurrency issues, bugfix
+ reset Ruins upon server launch--now uses proper world folder, bugfix
+ consider dimension in "recursive generator" check, bugfix
+ allow floating point block and template weights, rule and specific_biome chance values
+ remove extra +1% generic spawn chance, bugfix
+ support biome names containing spaces
+ templates can now specify dimensions to spawn in
