From d0f7bf7a37fca9483da30e04400eb6c7e3a13939 Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Fri, 8 Feb 2019 09:36:19 -0600 Subject: [PATCH] Fixed dedup issues somewhat, moved documentation out of map_content files, and clean up 'mcl2_map_content.txt'; removing ifdef statements and their associated data. --- Map_Content_Documentation.txt | 132 ++++++++ content.py | 11 +- content_mcl2.py | 76 ----- map_content.txt | 131 +------- mcimport.py | 62 ++-- mcimport.sh | 4 +- mcimport_mcl2.py | 63 ---- mcl2_map_content.txt | 576 ++++++++++------------------------ 8 files changed, 343 insertions(+), 712 deletions(-) create mode 100644 Map_Content_Documentation.txt delete mode 100644 content_mcl2.py delete mode 100644 mcimport_mcl2.py diff --git a/Map_Content_Documentation.txt b/Map_Content_Documentation.txt new file mode 100644 index 0000000..387f191 --- /dev/null +++ b/Map_Content_Documentation.txt @@ -0,0 +1,132 @@ +=================================================================== +Documentation for "map_content.txt" and "mcl2_map_content.txt": +=================================================================== + + Documentation originally derived from: https://github.com/dgm3333/mcblocks/blob/master/map_content.txt + Updated by MysticTempest +-------------------------------------- + The format of this file is: +MCID data modname:blockname param2 +17 0 mcblocks:Oak_Wood 4 //U + + or with optional preprocessor commands +#if MORETREES + 18 4,12 default:leaves 1 +#else + 17 default:tree // TODO: Trunk orientation +#endif + + !!!! WHITESPACE TYPE (space or tab) IS CRITICAL:- !!!! + + ({tab})MCID({space}MCData1(,MCData2(...))){tab}MTnodename({space}param2){tab}<==Everything beyond this tab is ignored. +Tab characters at the beginning of the line are ignored. +It is critical that tabs and spaces not be mixed up or the line won't be recognised correctly, +and the parsing may fail to progress beyond that point. + + MCID and MCData must be separated by a space/s. + MCData1,2,etc must be separated by commas but no spaces. + There must also be no spaces before MCID or between MCData and the following tab. + MCData must not be >=16, or the remainder of the file will be totally ignored. + MCID/Data and MTnodename are separated by tabs. + MTnodename and param2 are separated by a space/s. +If MCData1 is omitted, the line will match MCIDs with MCData values from 0-15 (and any subsequent entries will be ignored) + Any data following '//' is parsed and not processed + preprocessor commands #if {NAME}, #else and #endif are recognised and intervening lines will be parsed + out or retained dependant on flags in the content.read_content call + + Extra reference documentation: +https://github.com/minetest/minetest/blob/2992b774fe65410a8acd3d06ae82dcd1eb260413/doc/lua_api.txt#L905 +http://dev.minetest.net/minetest.dir_to_wallmounted +http://dev.minetest.net/minetest.dir_to_facedir +=============================================================================== + Minetest uses these values for Wall-Mounted nodes(eg. torches, vines, etc..). + Note that for Y values; it equates to which half of an air node it's in. + Example: + Ladders attached to the bottom of blocks are in the upper half of an air node. Hence are, 0. + Ladders attached to the top of blocks are in the lower half of an air node. Hence are, 1. +param2 direction +0 //U +Y +1 //D -Y +4 //N +Z +2 //E +x +5 //S -Z +3 //W -X + + +-------------------------------------------------------------------------------- + Minetest uses these values for nodebox face directions(eg. chests, Jack O'Lanterns, etc..). + Values range from 0-23, and involve multiple vectors/rotations. + A node's param2 value direction is dependent on a player's face direction. + (ie. A player faces North, but a Jack O'Lantern faces South towards the player with a param2 value of '0'.) +Default values for a node; vector pointing upwards: +param2 direction +0 //N +1 //E +2 //S +3 //W + +------------------------ +Vectors: +------------------------ +Vector points Up; rotation is around the North/South/East/West faces. +0,1,2,3 +Vector points North; rotation is around the East/West/Up/Down faces. +4,5,6,7 +Vector points South; rotation is around the East/West/Up/Down faces. +8,9,10,11 +Vector points East; rotation is around the North/South/Up/Down faces. +12,13,14,15 +Vector points West; rotation is around the North/South/Up/Down faces. +16,17,18,19 +Vector points Down; rotation is around the North/South/East/West faces. +20,21,22,23 +------------------------ +Faces: +------------------------ +Player faces Down, node(eg. Jack O'Lantern) faces Upwards. +0 degree: 4 +90 degree: 13 +180 degree: 10 +270 degree: 19 + +Player faces Up, Jack O'Lantern faces Downwards. +0 degree: 8 +90 degree: 15 +180 degree: 6 +270 degree: 17 + +Player faces North, Jack O'Lantern faces South. +0 degree: 0 +90 degree: 12 +180 degree: 20 +270 degree: 16 + +Player faces East, Jack O'Lantern faces West. +0 degree: 1 +90 degree: 9 +180 degree: 23 +270 degree: 5 + +Player faces South, Jack O'Lantern faces North. +0 degree: 2 +90 degree: 18 +180 degree: 22 +270 degree: 14 + +Player faces West, Jack O'Lantern faces East. +0 degree: 3 +90 degree: 7 +180 degree: 21 +270 degree: 11 + + +-------------------------------------------------------------------------------- +Lastly, it appears some Minecraft Blockstates can be converted to data values. +At least blockstates for axes(eg. Purpur Pillar, Bone Block, etc..). +Example: +Purpur pillar; default & on its side facing N,E,S,W; blockstate translation for X,Y,Z axes. +202 0 mcl_end:purpur_pillar //Default, vector pointing upward, with a MC blockstate for Y +202 4 mcl_end:purpur_pillar 12 //East,West pointing vectors with a MC blockstate for X +202 8 mcl_end:purpur_pillar 6 //North,South pointing vectors with a MC blockstate for Z + +===================================================================================== diff --git a/content.py b/content.py index ef0f356..0ac4ab9 100644 --- a/content.py +++ b/content.py @@ -1,3 +1,7 @@ +#!/bin/env python + +import os + def preprocess(lines, flags): output = [] @@ -33,8 +37,13 @@ def get_id(name_id_mapping, name): name_id_mapping.append(name) return len(name_id_mapping)-1 +if os.environ["GAME_ID"] == "MTG": + map_content_gameID = "map_content.txt" +elif os.environ["GAME_ID"] == "MCL2": + map_content_gameID = "mcl2_map_content.txt" + def read_content(flags): - with open("map_content.txt", "r") as f: + with open(map_content_gameID, "r") as f: lines = f.readlines() lines = preprocess(lines, flags) diff --git a/content_mcl2.py b/content_mcl2.py deleted file mode 100644 index b80cc5d..0000000 --- a/content_mcl2.py +++ /dev/null @@ -1,76 +0,0 @@ - -def preprocess(lines, flags): - output = [] - skip_level = 0 - for line in lines: - line = line.split("//")[0].strip() # Remove comment - if line == "": - continue - if line[0] == "#": - if line.startswith("#ifdef"): - cond = line[7:].strip() - if skip_level > 0 or cond not in flags: - skip_level += 1 - elif line.startswith("#else"): - if skip_level == 0: - skip_level = 1 - elif skip_level == 1: - skip_level = 0 - elif line.startswith("#endif"): - if skip_level > 0: - skip_level -= 1 - continue - if skip_level == 0: - output.append(line) - return output - -def get_id(name_id_mapping, name): - try: - # if the name of the node is known then return the location with the name_id_mapping list - return name_id_mapping.index(name) - except: - # else add the name of the node to the list then return the location - name_id_mapping.append(name) - return len(name_id_mapping)-1 - -def read_content(flags): - with open("mcl2_map_content.txt", "r") as f: - lines = f.readlines() - - lines = preprocess(lines, flags) - # if you map to air, then unknown blocks will be ignored - name_id_mapping = ["air"] - # name_id_mapping = ["mcblock:unknown"] - bd = {} # bd is block data, and keeps a list of the node names in the block - # iterate through all the lines in the map_content.txt file - for line in lines: - s = line.split("\t") - if len(s) >= 2: - r = s[1].split(" ") - if len(r) == 0: - print(line) - raise ValueError("Malformed data") - name = r[0] - param2 = 0 - for i in range(1, len(r)): - if r[i] != "": - param2 = int(r[i]) - break - t = s[0].split(" ") - if len(t) == 2: - for data in t[1].split(","): - key = (int(t[0]), int(data)) - if key not in bd: - bd[key] = (get_id(name_id_mapping, name), param2) - elif len(t) == 1: - for data in range(16): - key = (int(t[0]), data) - if key not in bd: - bd[key] = (get_id(name_id_mapping, name), param2) - - #blocks_len = max([i[0] for i in bd.keys()])+1 - blocks_len = 4096 - blocks = [[(0, 0)]*16 for i in range(blocks_len)] - for (id, data), value in bd.items(): - blocks[id][data] = value - return name_id_mapping, blocks diff --git a/map_content.txt b/map_content.txt index 74580d9..3518e44 100644 --- a/map_content.txt +++ b/map_content.txt @@ -1,133 +1,8 @@ -// Documentation originally derived from: https://github.com/dgm3333/mcblocks/blob/master/map_content.txt -// Updated by MysticTempest -// -// The format of this file is: -//MCID data modname:blockname param2 -//17 0 mcblocks:Oak_Wood 4 //U - -// or with optional preprocessor commands -//#if MORETREES -// 18 4,12 default:leaves 1 -//#else -// 17 default:tree // TODO: Trunk orientation -//#endif - -// !!!! WHITESPACE TYPE (space or tab) IS CRITICAL:- !!!! - -// ({tab})MCID({space}MCData1(,MCData2(...))){tab}MTnodename({space}param2){tab}<==Everything beyond this tab is ignored. -//Tab characters at the beginning of the line are ignored. -//It is critical that tabs and spaces not be mixed up or the line won't be recognised correctly, -//and the parsing may fail to progress beyond that point. - -// MCID and MCData must be separated by a space/s. -// MCData1,2,etc must be separated by commas but no spaces. -// There must also be no spaces before MCID or between MCData and the following tab. -// MCData must not be >=16, or the remainder of the file will be totally ignored. -// MCID/Data and MTnodename are separated by tabs. -// MTnodename and param2 are separated by a space/s. -//If MCData1 is omitted, the line will match MCIDs with MCData values from 0-15 (and any subsequent entries will be ignored) -// Any data following '//' is parsed and not processed -// preprocessor commands #if {NAME}, #else and #endif are recognised and intervening lines will be parsed -// out or retained dependant on flags in the content.read_content call - -// Extra reference documentation: -//https://github.com/minetest/minetest/blob/2992b774fe65410a8acd3d06ae82dcd1eb260413/doc/lua_api.txt#L905 -//http://dev.minetest.net/minetest.dir_to_wallmounted -//http://dev.minetest.net/minetest.dir_to_facedir - -//=============================================================================== -// Minetest uses these values for Wall-Mounted nodes(eg. torches, vines, etc..). -// Note that for Y values; it equates to which half of an air node it's in. -// Example: -// Ladders attached to the bottom of blocks are in the upper half of an air node. Hence are, 0. -// Ladders attached to the top of blocks are in the lower half of an air node. Hence are, 1. -//param2 direction -//0 //U +Y -//1 //D -Y -//4 //N +Z -//2 //E +x -//5 //S -Z -//3 //W -X - - -//-------------------------------------------------------------------------------- -// Minetest uses these values for nodebox face directions(eg. chests, Jack O'Lanterns, etc..). -// Values range from 0-23, and involve multiple vectors/rotations. -// A node's param2 value direction is dependent on a player's face direction. -// (ie. A player faces North, but a Jack O'Lantern faces South towards the player with a param2 value of '0'.) -//Default values for a node; vector pointing upwards: -//param2 direction -//0 //N -//1 //E -//2 //S -//3 //W - -//------------------------ -//Vectors: -//------------------------ -//Vector points Up; rotation is around the North/South/East/West faces. -//0,1,2,3 -//Vector points North; rotation is around the East/West/Up/Down faces. -//4,5,6,7 -//Vector points South; rotation is around the East/West/Up/Down faces. -//8,9,10,11 -//Vector points East; rotation is around the North/South/Up/Down faces. -//12,13,14,15 -//Vector points West; rotation is around the North/South/Up/Down faces. -//16,17,18,19 -//Vector points Down; rotation is around the North/South/East/West faces. -//20,21,22,23 -//------------------------ -//Faces: -//------------------------ -//Player faces Down, node(eg. Jack O'Lantern) faces Upwards. -//0 degree: 4 -//90 degree: 13 -//180 degree: 10 -//270 degree: 19 - -//Player faces Up, Jack O'Lantern faces Downwards. -//0 degree: 8 -//90 degree: 15 -//180 degree: 6 -//270 degree: 17 - -//Player faces North, Jack O'Lantern faces South. -//0 degree: 0 -//90 degree: 12 -//180 degree: 20 -//270 degree: 16 - -//Player faces East, Jack O'Lantern faces West. -//0 degree: 1 -//90 degree: 9 -//180 degree: 23 -//270 degree: 5 - -//Player faces South, Jack O'Lantern faces North. -//0 degree: 2 -//90 degree: 18 -//180 degree: 22 -//270 degree: 14 - -//Player faces West, Jack O'Lantern faces East. -//0 degree: 3 -//90 degree: 7 -//180 degree: 21 -//270 degree: 11 - - -//-------------------------------------------------------------------------------- -//Lastly, it appears some Minecraft Blockstates can be converted to data values. -//At least blockstates for axes(eg. Purpur Pillar, Bone Block, etc..). -//Example: -//Purpur pillar; default & on its side facing N,E,S,W; blockstate translation for X,Y,Z axes. -//202 0 mcl_end:purpur_pillar //Default, vector pointing upward, with a MC blockstate for Y -//202 4 mcl_end:purpur_pillar 12 //East,West pointing vectors with a MC blockstate for X -//202 8 mcl_end:purpur_pillar 6 //North,South pointing vectors with a MC blockstate for Z - +// For documentation see - Map_Content_Documentation.txt //===================================================================================== + + 1 0 default:stone // TODO: Stone type 1 1 default:stone // TODO: Stone type 1 2 xdecor:desertstone_tile diff --git a/mcimport.py b/mcimport.py index ace2209..3301f24 100644 --- a/mcimport.py +++ b/mcimport.py @@ -24,10 +24,16 @@ print("A minetest world already exists - refusing to overwrite it.") exit(1) -if not os.path.exists(sys.argv[2] + "/world.mt"): - with open(sys.argv[2] + "/world.mt", "w") as wo: - wo.write("backend = sqlite3\n") - wo.write("gameid = minetest\n") +if os.environ["GAME_ID"] == "MTG": + if not os.path.exists(sys.argv[2] + "/world.mt"): + with open(sys.argv[2] + "/world.mt", "w") as wo: + wo.write("backend = sqlite3\n") + wo.write("gameid = minetest\n") +elif os.environ["GAME_ID"] == "MCL2": + if not os.path.exists(sys.argv[2] + "/world.mt"): + with open(sys.argv[2] + "/world.mt", "w") as wo: + wo.write("backend = sqlite3\n") + wo.write("gameid = MineClone2\n") if not os.path.exists(sys.argv[2] + "/worldmods"): os.makedirs(sys.argv[2]+"/worldmods") @@ -50,27 +56,29 @@ sn.write(" vm:update_map()\n") sn.write("end)\n\n") -if not os.path.exists(sys.argv[2]+"/get-mods.sh"): - path = sys.argv[2]+"/get-mods.sh" - with open(path, "w") as md: - md.write("#!/bin/sh\n") - md.write("# run this script to automatically get all the required mods\n") - md.write("cd worldmods\n") - md.write("for mod in LNJ2/carpet minetest-mods/signs_lib minetest-mods/xdecor minetest-mods/plantlife_modpack Jeija/minetest-mod-mesecons pilzadam/nether minetest-mods/crops minetest-mods/quartz minetest-mods/biome_lib oOChainLynxOo/hardenedclay minetest-mods/lapis minetest-mods/flowerpot ShadowNinja/minetest_bedrock; do\n") - md.write(" echo \"Fetching: $mod\"\n") - md.write(" s=`basename $mod`\n") - md.write(" curl -q -L -o master.zip https://codeload.github.com/$mod/zip/master\n") - md.write(" unzip -qq master.zip\n") - md.write(" rm master.zip\n") - md.write(" mv $s-master $s\n") - md.write(" mv minetest_bedrock bedrock\n") - md.write("done\n") - md.write("for ex in plantlife_modpack/dryplants plantlife_modpack/along_shore plantlife_modpack/molehills plantlife_modpack/woodsoils plantlife_modpack/bushes plantlife_modpack/bushes_classic plantlife_modpack/youngtrees plantlife_modpack/3dmushrooms plantlife_modpack/cavestuff plantlife_modpack/poisonivy plantlife_modpack/trunks; do\n"); - md.write(" echo \"Pruning: $ex\"\n") - md.write(" rm -rf $ex\n") - md.write("done\n") - st = os.stat(path) - os.chmod(path, st.st_mode | stat.S_IXUSR) +if os.environ["GAME_ID"] == "MTG": + if not os.path.exists(sys.argv[2]+"/get-mods.sh"): + path = sys.argv[2]+"/get-mods.sh" + with open(path, "w") as md: + md.write("#!/bin/sh\n") + md.write("# run this script to automatically get all the required mods\n") + md.write("cd worldmods\n") + md.write("for mod in LNJ2/carpet minetest-mods/signs_lib minetest-mods/xdecor minetest-mods/plantlife_modpack Jeija/minetest-mod-mesecons pilzadam/nether minetest-mods/crops minetest-mods/quartz minetest-mods/biome_lib oOChainLynxOo/hardenedclay minetest-mods/lapis minetest-mods/flowerpot ShadowNinja/minetest_bedrock; do\n") + md.write(" echo \"Fetching: $mod\"\n") + md.write(" s=`basename $mod`\n") + md.write(" curl -q -L -o master.zip https://codeload.github.com/$mod/zip/master\n") + md.write(" unzip -qq master.zip\n") + md.write(" rm master.zip\n") + md.write(" mv $s-master $s\n") + md.write(" mv minetest_bedrock bedrock\n") + md.write("done\n") + md.write("for ex in plantlife_modpack/dryplants plantlife_modpack/along_shore plantlife_modpack/molehills plantlife_modpack/woodsoils plantlife_modpack/bushes plantlife_modpack/bushes_classic plantlife_modpack/youngtrees plantlife_modpack/3dmushrooms plantlife_modpack/cavestuff plantlife_modpack/poisonivy plantlife_modpack/trunks; do\n"); + md.write(" echo \"Pruning: $ex\"\n") + md.write(" rm -rf $ex\n") + md.write("done\n") + st = os.stat(path) + os.chmod(path, st.st_mode | stat.S_IXUSR) + mcmap = MCMap(sys.argv[1]) mtmap = MTMap(sys.argv[2]) @@ -80,4 +88,6 @@ mtmap.save() print("Conversion finished!\n") -print("Run \"sh get-mods.sh\" in the new world folder to automatically download all required mods.") +if os.environ["GAME_ID"] == "MTG": + print("Run \"sh get-mods.sh\" in the new world folder to automatically download all required mods.") + diff --git a/mcimport.sh b/mcimport.sh index e80d71d..9adef9c 100755 --- a/mcimport.sh +++ b/mcimport.sh @@ -37,6 +37,7 @@ if [ $? == 0 ]; then if [ $? == 0 ]; then zenity --info --width=800 --title="Conversion in progress" --text="The conversion is now running and may take a *very* long time to finish. Do not be alarmed by output lines that show \"Unknown Minecraft Block\" messages, this is normal and can usually be ignored without issues. You can safely close this window." & + GAME_ID="MTG" export GAME_ID python3 mcimport.py "$IN" "${HOME}/.minetest/worlds/$OUT" if [ $? == 0 ]; then @@ -56,7 +57,8 @@ if [ $? == 0 ]; then fi else zenity --info --width=800 --title="Conversion in progress" --text="The conversion is now running and may take a *very* long time to finish. Do not be alarmed by output lines that show \"Unknown Minecraft Block\" messages, this is normal and can usually be ignored without issues. You can safely close this window." & - python3 mcimport_mcl2.py "$IN" "${HOME}/.minetest/worlds/$OUT" + GAME_ID="MCL2" export GAME_ID + python3 mcimport.py "$IN" "${HOME}/.minetest/worlds/$OUT" if [ $? == 0 ]; then zenity --width=800 --info --text "Conversion finished! Your world should now be playable in Minetest." diff --git a/mcimport_mcl2.py b/mcimport_mcl2.py deleted file mode 100644 index c48a386..0000000 --- a/mcimport_mcl2.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/env python - -import os -import stat -import sys -import logging -from block import * -import content_mcl2 - -logging.basicConfig(level=logging.INFO) - -if (sys.version_info < (3, 0)): - print("This script does not work with Python < 3.0, sorry.") - exit(1) - -if not os.path.exists(sys.argv[1]): - print("The provided minecraft world path does not exist.") - exit(1) - -if not os.path.exists(sys.argv[2]): - os.makedirs(sys.argv[2]) - -if os.path.exists(sys.argv[2] + "map.sqlite"): - print("A minetest world already exists - refusing to overwrite it.") - exit(1) - -if not os.path.exists(sys.argv[2] + "/world.mt"): - with open(sys.argv[2] + "/world.mt", "w") as wo: - wo.write("backend = sqlite3\n") - wo.write("gameid = MineClone2\n") - -if not os.path.exists(sys.argv[2] + "/worldmods"): - os.makedirs(sys.argv[2]+"/worldmods") -if not os.path.exists(sys.argv[2] + "/worldmods/mcimport"): - os.makedirs(sys.argv[2]+"/worldmods/mcimport") -if not os.path.exists(sys.argv[2]+"/worldmods/mcimport/init.lua"): - with open(sys.argv[2]+"/worldmods/mcimport/init.lua", "w") as sn: - sn.write("-- map conversion requires a special water level\n") - sn.write("minetest.set_mapgen_params({water_level = -2})\n\n") - sn.write("-- prevent overgeneration in incomplete chunks, and allow lbms to work\n") - sn.write("minetest.set_mapgen_params({chunksize = 1})\n\n") - sn.write("-- comment the line below if you want to enable mapgen (will destroy things!)\n") - sn.write("minetest.set_mapgen_params({mgname = \"singlenode\"})\n\n") - sn.write("-- below lines will recalculate lighting on map block load\n") - sn.write("minetest.register_on_generated(function(minp, maxp, seed)\n") - sn.write(" local vm = minetest.get_voxel_manip(minp, maxp)\n") - sn.write(" vm:set_lighting({day = 15, night = 0}, minp, maxp)\n") - sn.write(" vm:update_liquids()\n") - sn.write(" vm:write_to_map()\n") - sn.write(" vm:update_map()\n") - sn.write("end)\n\n") - - -mcmap = MCMap(sys.argv[1]) -mtmap = MTMap(sys.argv[2]) - -nimap, ct = content_mcl2.read_content(["NETHER", "QUARTZ"]) -mtmap.fromMCMap(mcmap, nimap, ct) -mtmap.save() - -print("Conversion finished!\n") -print("Please enjoy your new MineClone2 world!") - diff --git a/mcl2_map_content.txt b/mcl2_map_content.txt index 6df574c..37865d3 100644 --- a/mcl2_map_content.txt +++ b/mcl2_map_content.txt @@ -1,131 +1,4 @@ -// Documentation originally derived from: https://raw.githubusercontent.com/dgm3333/mcblocks/master/map_content.txt -// Updated by MysticTempest -// -// The format of this file is: -//MCID data modname:blockname param2 -//17 0 mcblocks:Oak_Wood 4 //U - -// or with optional preprocessor commands -//#if MORETREES -// 18 4,12 default:leaves 1 -//#else -// 17 default:tree // TODO: Trunk orientation -//#endif - -// !!!! WHITESPACE TYPE (space or tab) IS CRITICAL:- !!!! - -// ({tab})MCID({space}MCData1(,MCData2(...))){tab}MTnodename({space}param2){tab}<==Everything beyond this tab is ignored. -//Tab characters at the beginning of the line are ignored. -//It is critical that tabs and spaces not be mixed up or the line won't be recognised correctly, -//and the parsing may fail to progress beyond that point. - -// MCID and MCData must be separated by a space/s. -// MCData1,2,etc must be separated by commas but no spaces. -// There must also be no spaces before MCID or between MCData and the following tab. -// MCData must not be >=16, or the remainder of the file will be totally ignored. -// MCID/Data and MTnodename are separated by tabs. -// MTnodename and param2 are separated by a space/s. -//If MCData1 is omitted, the line will match MCIDs with MCData values from 0-15 (and any subsequent entries will be ignored) -// Any data following '//' is parsed and not processed -// preprocessor commands #if {NAME}, #else and #endif are recognised and intervening lines will be parsed -// out or retained dependant on flags in the content.read_content call - -// Extra reference documentation: -//https://github.com/minetest/minetest/blob/2992b774fe65410a8acd3d06ae82dcd1eb260413/doc/lua_api.txt#L905 -//http://dev.minetest.net/minetest.dir_to_wallmounted -//http://dev.minetest.net/minetest.dir_to_facedir - -//=============================================================================== -// Minetest uses these values for Wall-Mounted nodes(eg. buttons, vines, etc..). -// Note that for Y values; it equates to which half of an air node it's in. -// Example: -// Buttons attached to the bottom of blocks are in the upper half of an air node. Hence are, 0. -// Buttons attached to the top of blocks are in the lower half of an air node. Hence are, 1. -//param2 direction -//0 //U +Y -//1 //D -Y -//4 //N +Z -//2 //E +X -//5 //S -Z -//3 //W -X - - -//-------------------------------------------------------------------------------- -// Minetest uses these values for nodebox face directions(eg. chests, Jack O'Lanterns, etc..). -// Values range from 0-23, and involve multiple vectors/rotations. -// A node's param2 value direction is dependent on a player's face direction. -// (ie. A player faces North, but a Jack O'Lantern faces South towards the player with a param2 value of '0'.) -//Default values for a node; vector pointing upwards: -//param2 direction -//0 //N -//1 //E -//2 //S -//3 //W - -//------------------------ -//Vectors: -//------------------------ -//Vector points Up; rotation is around the North/South/East/West faces. -//0,1,2,3 -//Vector points North; rotation is around the East/West/Up/Down faces. -//4,5,6,7 -//Vector points South; rotation is around the East/West/Up/Down faces. -//8,9,10,11 -//Vector points East; rotation is around the North/South/Up/Down faces. -//12,13,14,15 -//Vector points West; rotation is around the North/South/Up/Down faces. -//16,17,18,19 -//Vector points Down; rotation is around the North/South/East/West faces. -//20,21,22,23 -//------------------------ -//Faces: -//------------------------ -//Player faces Down, node(eg. Jack O'Lantern) faces Upwards. -//0 degree: 4 -//90 degree: 13 -//180 degree: 10 -//270 degree: 19 - -//Player faces Up, Jack O'Lantern faces Downwards. -//0 degree: 8 -//90 degree: 15 -//180 degree: 6 -//270 degree: 17 - -//Player faces North, Jack O'Lantern faces South. -//0 degree: 0 -//90 degree: 12 -//180 degree: 20 -//270 degree: 16 - -//Player faces East, Jack O'Lantern faces West. -//0 degree: 1 -//90 degree: 9 -//180 degree: 23 -//270 degree: 5 - -//Player faces South, Jack O'Lantern faces North. -//0 degree: 2 -//90 degree: 18 -//180 degree: 22 -//270 degree: 14 - -//Player faces West, Jack O'Lantern faces East. -//0 degree: 3 -//90 degree: 7 -//180 degree: 21 -//270 degree: 11 - - -//-------------------------------------------------------------------------------- -//Lastly, it appears some Minecraft Blockstates can be converted to data values. -//At least blockstates for axes(eg. Purpur Pillar, Bone Block, etc..). -//Example: -//Purpur pillar; default & on its side facing N,E,S,W; blockstate translation for X,Y,Z axes. -//202 0 mcl_end:purpur_pillar //Default, vector pointing upward, with a MC state for Y -//202 4 mcl_end:purpur_pillar 12 //East,West pointing vectors with a MC state for X -//202 8 mcl_end:purpur_pillar 6 //North,South pointing vectors with a MC state for Z - +// For documentation see - Map_Content_Documentation.txt //===================================================================================== @@ -144,47 +17,27 @@ 3 2 mcl_core:podzol 4 mcl_core:cobble -#ifdef MORETREES - 5 0 default:wood - 5 1 moretrees:spruce_planks - 5 2 moretrees:birch_planks - 5 3 moretrees:sequoia_planks - 5 4 moretrees:fir_planks - 5 5 moretrees:oak_planks - - 6 0 default:sapling - 6 8 default:sapling - 6 1 moretrees:spruce_sapling - 6 9 moretrees:spruce_sapling - 6 2 moretrees:birch_sapling - 6 10 moretrees:birch_sapling - 6 3 moretrees:sequoia_sapling - 6 11 moretrees:sequoia_sapling - 6 4 default:acacia_sapling - 6 12 default:acacia_sapling - 6 5 moretrees:oak_sapling - 6 13 moretrees:oak_sapling -#else - 5 0 mcl_core:wood - 5 1 mcl_core:sprucewood - 5 2 mcl_core:birchwood - 5 3 mcl_core:junglewood - 5 4 mcl_core:acaciawood - 5 5 mcl_core:darkwood - - 6 0 mcl_core:sapling - 6 8 mcl_core:sapling - 6 1 mcl_core:sprucesapling - 6 9 mcl_core:sprucesapling - 6 2 mcl_core:birchsapling - 6 10 mcl_core:birchsapling - 6 3 mcl_core:junglesapling - 6 11 mcl_core:junglesapling - 6 4 mcl_core:acaciasapling - 6 12 mcl_core:acaciasapling - 6 5 mcl_core:darksapling - 6 13 mcl_core:sapling -#endif + +5 0 mcl_core:wood +5 1 mcl_core:sprucewood +5 2 mcl_core:birchwood +5 3 mcl_core:junglewood +5 4 mcl_core:acaciawood +5 5 mcl_core:darkwood + +6 0 mcl_core:sapling +6 1 mcl_core:sprucesapling +6 2 mcl_core:birchsapling +6 3 mcl_core:junglesapling +6 4 mcl_core:acaciasapling +6 5 mcl_core:darksapling +6 8 mcl_core:sapling +6 9 mcl_core:sprucesapling +6 10 mcl_core:birchsapling +6 11 mcl_core:junglesapling +6 12 mcl_core:acaciasapling +6 13 mcl_core:darksapling + 7 mcl_core:bedrock @@ -201,75 +54,48 @@ 15 mcl_core:stone_with_iron 16 mcl_core:stone_with_coal -#ifdef MORETREES - 17 0 default:tree 0 - 17 4 default:tree 18 - 17 8 default:tree 9 - 17 1 moretrees:spruce_trunk 0 - 17 5 moretrees:spruce_trunk 18 - 17 9 moretrees:spruce_trunk 9 - 17 2 moretrees:birch_trunk 0 - 17 6 moretrees:birch_trunk 18 - 17 10 moretrees:birch_trunk 9 - 17 3 moretrees:sequoia_trunk 0 - 17 7 moretrees:sequoia_trunk 18 - 17 11 moretrees:sequoia_trunk 9 - 18 0,8 default:leaves - 18 4,12 default:leaves 1 - 18 1,9 moretrees:spruce_leaves - 18 5,13 moretrees:spruce_leaves 1 - 18 2,10 moretrees:birch_leaves - 18 6,14 moretrees:birch_leaves 1 - 18 3,11 moretrees:sequoia_leaves - 18 7,15 moretrees:sequoia_leaves 1 - 161 0,8 moretrees:acacia_leaves - 161 4,12 moretrees:acacia_leaves 1 - 161 1,9 moretrees:oak_leaves - 161 5,13 moretrees:oak_leaves 1 - 162 0 moretrees:acacia_trunk 0 - 162 4 moretrees:acacia_trunk 18 - 162 8 moretrees:acacia_trunk 9 - 162 1 moretrees:oak_trunk 0 - 162 5 moretrees:oak_trunk 18 - 162 9 moretrees:oak_trunk 9 -#else - 17 0 mcl_core:tree 0 - 17 4 mcl_core:tree 18 - 17 8 mcl_core:tree 9 - 17 1 mcl_core:sprucetree 0 - 17 5 mcl_core:sprucetree 18 - 17 9 mcl_core:sprucetree 9 - 17 2 mcl_core:birchtree 0 - 17 6 mcl_core:birchtree 18 - 17 10 mcl_core:birchtree 9 - 17 3 mcl_core:jungletree 0 - 17 7 mcl_core:jungletree 18 - 17 11 mcl_core:jungletree 9 - 17 12 mcl_core:tree # bark only versions - 17 13 mcl_core:sprucetree - 17 14 mcl_core:birchtree - 17 15 mcl_core:jungletree - 18 0,8 mcl_core:leaves - 18 4,12 mcl_core:leaves 1 - 18 1,9 mcl_core:spruceleaves - 18 5,13 mcl_core:spruceleaves 1 - 18 2,10 mcl_core:birchleaves - 18 6,14 mcl_core:birchleaves 1 - 18 3,11 mcl_core:jungleleaves - 18 7,15 mcl_core:jungleleaves 1 - 161 0,8 mcl_core:acacialeaves - 161 4,12 mcl_core:acacialeaves 1 - 161 1,9 mcl_core:darkleaves - 161 5,13 mcl_core:darkleaves 1 - 162 0 mcl_core:acaciatree 0 - 162 4 mcl_core:acaciatree 18 - 162 8 mcl_core:acaciatree 9 - 162 1 mcl_core:darktree 0 - 162 5 mcl_core:darktree 18 - 162 9 mcl_core:darktree 9 - 162 12 mcl_core:acaciatree - 162 13 mcl_core:darktree -#endif + +17 0 mcl_core:tree 0 +17 1 mcl_core:sprucetree 0 +17 2 mcl_core:birchtree 0 +17 3 mcl_core:jungletree 0 +17 4 mcl_core:tree 18 +17 5 mcl_core:sprucetree 18 +17 6 mcl_core:birchtree 18 +17 7 mcl_core:jungletree 18 +17 8 mcl_core:tree 9 +17 9 mcl_core:sprucetree 9 +17 10 mcl_core:birchtree 9 +17 11 mcl_core:jungletree 9 +//bark only versions +17 12 mcl_core:tree_bark +17 13 mcl_core:sprucetree_bark +17 14 mcl_core:birchtree_bark +17 15 mcl_core:jungletree_bark + +18 0,8 mcl_core:leaves +18 4,12 mcl_core:leaves 1 +18 1,9 mcl_core:spruceleaves +18 5,13 mcl_core:spruceleaves 1 +18 2,10 mcl_core:birchleaves +18 6,14 mcl_core:birchleaves 1 +18 3,11 mcl_core:jungleleaves +18 7,15 mcl_core:jungleleaves 1 + +161 0,8 mcl_core:acacialeaves +161 4,12 mcl_core:acacialeaves 1 +161 1,9 mcl_core:darkleaves +161 5,13 mcl_core:darkleaves 1 +162 0 mcl_core:acaciatree 0 +162 1 mcl_core:darktree 0 +162 4 mcl_core:acaciatree 18 +162 5 mcl_core:darktree 18 +162 8 mcl_core:acaciatree 9 +162 9 mcl_core:darktree 9 +//bark only versions +162 12 mcl_core:acaciatree_bark +162 13 mcl_core:darktree_bark + 19 0 mcl_sponges:sponge @@ -424,17 +250,12 @@ 43 3 mcl_core:cobble 43 4 mcl_core:brick_block 43 5 mcl_core:stonebrick -#ifdef NETHER 43 6 mcl_nether:nether_brick -#endif -#ifdef QUARTZ 43 7 mcl_nether:quartz_block -#endif 43 8 mcl_core:stone_smooth 43 9 mcl_core:sandstone -#ifdef QUARTZ 43 10 mcl_nether:quartz_chiseled -#endif + 44 0 mcl_stairs:slab_stone 44 8 mcl_stairs:slab_stone_top 22 @@ -448,22 +269,10 @@ 44 12 mcl_stairs:slab_brick_block_top 22 44 5 mcl_stairs:slab_stonebrick 44 13 mcl_stairs:slab_stonebrick_top 22 - -#ifdef NETHER 44 6 mcl_stairs:slab_nether_brick 44 14 mcl_stairs:slab_nether_brick_top 22 -#else - 44 6 mcl_stairs:slab_stonebrick - 44 14 mcl_stairs:slab_stonebrick_top 22 -#endif - -#ifdef QUARTZ - 44 7 mcl_stairs:slab_quartzblock - 44 15 mcl_stairs:slab_quartzblock_top 22 -#else - 44 7 mcl_stairs:slab_stonebrick - 44 15 mcl_stairs:slab_stonebrick_top 22 -#endif +44 7 mcl_stairs:slab_quartzblock +44 15 mcl_stairs:slab_quartzblock_top 22 45 mcl_core:brick_block @@ -473,6 +282,7 @@ 47 mcl_books:bookshelf 48 mcl_core:mossycobble + 49 mcl_core:obsidian 50 0 mcl_torches:torch 1 @@ -661,16 +471,14 @@ 86 3 mcl_farming:pumpkin_face 3 +87 mcl_nether:netherrack +88 mcl_nether:soul_sand +89 mcl_nether:glowstone +//Nether Portal blockstate orientation fix. +90 0 mcl_portals:portal 12 +90 1 mcl_portals:portal 12 +90 2 mcl_portals:portal 1 -#ifdef NETHER - 87 mcl_nether:netherrack - 88 mcl_nether:soul_sand - 89 mcl_nether:glowstone - //Nether Portal blockstate orientation fix. - 90 0 mcl_portals:portal 12 - 90 1 mcl_portals:portal 12 - 90 2 mcl_portals:portal 1 -#endif 91 0 mcl_farming:pumpkin_face_light 0 91 1 mcl_farming:pumpkin_face_light 1 @@ -852,26 +660,21 @@ 109 7 mcl_stairs:stair_stonebrick 20 110 mcl_core:mycelium - 111 mcl_flowers:waterlily // rotation done in code randomly -#ifdef NETHER 112 mcl_nether:nether_brick -#endif +113 mcl_fences:nether_brick_fence -113 mcl_fences:nether_brick_fence +114 0 mcl_stairs:stair_nether_brick 1 +114 1 mcl_stairs:stair_nether_brick 3 +114 2 mcl_stairs:stair_nether_brick 2 +114 3 mcl_stairs:stair_nether_brick 0 +114 4 mcl_stairs:stair_nether_brick 23 +114 5 mcl_stairs:stair_nether_brick 21 +114 6 mcl_stairs:stair_nether_brick 22 +114 7 mcl_stairs:stair_nether_brick 20 -#ifdef NETHER - 114 0 mcl_stairs:stair_nether_brick 1 - 114 1 mcl_stairs:stair_nether_brick 3 - 114 2 mcl_stairs:stair_nether_brick 2 - 114 3 mcl_stairs:stair_nether_brick 0 - 114 4 mcl_stairs:stair_nether_brick 23 - 114 5 mcl_stairs:stair_nether_brick 21 - 114 6 mcl_stairs:stair_nether_brick 22 - 114 7 mcl_stairs:stair_nether_brick 20 -#endif 115 0 mcl_nether:nether_wart_0 @@ -905,47 +708,27 @@ 123 mesecons_lightstone:lightstone_off 124 mesecons_lightstone:lightstone_on -#ifdef MORETREES - 125 1 moretrees:spruce_planks - 125 2 moretrees:birch_planks - 125 3 moretrees:sequoia_planks - 125 4 moretrees:fir_planks - 125 5 moretrees:oak_planks - - 126 0 stairs:slab_wood - 126 8 stairs:slab_wood_top 22 - 126 1 moretrees:slab_spruce_planks - 126 9 moretrees:slab_spruce_planks_top 22 - 126 2 moretrees:slab_birch_planks - 126 10 moretrees:slab_birch_planks_top 22 - 126 3 moretrees:slab_sequoia_planks - 126 11 moretrees:slab_sequoia_planks_top 22 - 126 4 moretrees:slab_fir_planks - 126 12 moretrees:slab_fir_planks_top 22 - 126 5 moretrees:slab_oak_planks - 126 13 moretrees:slab_oak_planks_top 22 -#else - - 125 0 mcl_core:wood - 125 1 mcl_core:sprucewood - 125 2 mcl_core:birchwood - 125 3 mcl_core:junglewood - 125 4 mcl_core:acaciawood - 125 5 mcl_core:darkwood - - 126 0 mcl_stairs:slab_wood - 126 8 mcl_stairs:slab_wood_top 22 - 126 1 mcl_stairs:slab_sprucewood - 126 9 mcl_stairs:slab_sprucewood_top 22 - 126 2 mcl_stairs:slab_birchwood - 126 10 mcl_stairs:slab_birchwood_top 22 - 126 3 mcl_stairs:slab_junglewood - 126 11 mcl_stairs:slab_junglewood_top 22 - 126 4 mcl_stairs:slab_acaciawood - 126 12 mcl_stairs:slab_acaciawood_top 22 - 126 5 mcl_stairs:slab_darkwood - 126 13 mcl_stairs:slab_darkwood_top 22 -#endif + +125 0 mcl_core:wood +125 1 mcl_core:sprucewood +125 2 mcl_core:birchwood +125 3 mcl_core:junglewood +125 4 mcl_core:acaciawood +125 5 mcl_core:darkwood + +126 0 mcl_stairs:slab_wood +126 8 mcl_stairs:slab_wood_top 22 +126 1 mcl_stairs:slab_sprucewood +126 9 mcl_stairs:slab_sprucewood_top 22 +126 2 mcl_stairs:slab_birchwood +126 10 mcl_stairs:slab_birchwood_top 22 +126 3 mcl_stairs:slab_junglewood +126 11 mcl_stairs:slab_junglewood_top 22 +126 4 mcl_stairs:slab_acaciawood +126 12 mcl_stairs:slab_acaciawood_top 22 +126 5 mcl_stairs:slab_darkwood +126 13 mcl_stairs:slab_darkwood_top 22 + 127 0 mcl_cocoas:cocoa_1 2 @@ -982,61 +765,34 @@ 133 0 mcl_core:emeraldblock -#ifdef MORETREES - 134 0 moretrees:stair_spruce_planks 1 - 134 1 moretrees:stair_spruce_planks 3 - 134 2 moretrees:stair_spruce_planks 2 - 134 3 moretrees:stair_spruce_planks 0 - 134 4 moretrees:stair_spruce_planks 23 - 134 5 moretrees:stair_spruce_planks 21 - 134 6 moretrees:stair_spruce_planks 22 - 134 7 moretrees:stair_spruce_planks 20 - - 135 0 moretrees:stair_birch_planks 1 - 135 1 moretrees:stair_birch_planks 3 - 135 2 moretrees:stair_birch_planks 2 - 135 3 moretrees:stair_birch_planks 0 - 135 4 moretrees:stair_birch_planks 23 - 135 5 moretrees:stair_birch_planks 21 - 135 6 moretrees:stair_birch_planks 22 - 135 7 moretrees:stair_birch_planks 20 - - 136 0 moretrees:stair_sequoia_planks 1 - 136 1 moretrees:stair_sequoia_planks 3 - 136 2 moretrees:stair_sequoia_planks 2 - 136 3 moretrees:stair_sequoia_planks 0 - 136 4 moretrees:stair_sequoia_planks 23 - 136 5 moretrees:stair_sequoia_planks 21 - 136 6 moretrees:stair_sequoia_planks 22 - 136 7 moretrees:stair_sequoia_planks 20 -#else - 134 0 mcl_stairs:stair_sprucewood 1 - 134 1 mcl_stairs:stair_sprucewood 3 - 134 2 mcl_stairs:stair_sprucewood 2 - 134 3 mcl_stairs:stair_sprucewood 0 - 134 4 mcl_stairs:stair_sprucewood 23 - 134 5 mcl_stairs:stair_sprucewood 21 - 134 6 mcl_stairs:stair_sprucewood 22 - 134 7 mcl_stairs:stair_sprucewood 20 - - 135 0 mcl_stairs:stair_birchwood 1 - 135 1 mcl_stairs:stair_birchwood 3 - 135 2 mcl_stairs:stair_birchwood 2 - 135 3 mcl_stairs:stair_birchwood 0 - 135 4 mcl_stairs:stair_birchwood 23 - 135 5 mcl_stairs:stair_birchwood 21 - 135 6 mcl_stairs:stair_birchwood 22 - 135 7 mcl_stairs:stair_birchwood 20 - - 136 0 mcl_stairs:stair_junglewood 1 - 136 1 mcl_stairs:stair_junglewood 3 - 136 2 mcl_stairs:stair_junglewood 2 - 136 3 mcl_stairs:stair_junglewood 0 - 136 4 mcl_stairs:stair_junglewood 23 - 136 5 mcl_stairs:stair_junglewood 21 - 136 6 mcl_stairs:stair_junglewood 22 - 136 7 mcl_stairs:stair_junglewood 20 -#endif + +134 0 mcl_stairs:stair_sprucewood 1 +134 1 mcl_stairs:stair_sprucewood 3 +134 2 mcl_stairs:stair_sprucewood 2 +134 3 mcl_stairs:stair_sprucewood 0 +134 4 mcl_stairs:stair_sprucewood 23 +134 5 mcl_stairs:stair_sprucewood 21 +134 6 mcl_stairs:stair_sprucewood 22 +134 7 mcl_stairs:stair_sprucewood 20 + +135 0 mcl_stairs:stair_birchwood 1 +135 1 mcl_stairs:stair_birchwood 3 +135 2 mcl_stairs:stair_birchwood 2 +135 3 mcl_stairs:stair_birchwood 0 +135 4 mcl_stairs:stair_birchwood 23 +135 5 mcl_stairs:stair_birchwood 21 +135 6 mcl_stairs:stair_birchwood 22 +135 7 mcl_stairs:stair_birchwood 20 + +136 0 mcl_stairs:stair_junglewood 1 +136 1 mcl_stairs:stair_junglewood 3 +136 2 mcl_stairs:stair_junglewood 2 +136 3 mcl_stairs:stair_junglewood 0 +136 4 mcl_stairs:stair_junglewood 23 +136 5 mcl_stairs:stair_junglewood 21 +136 6 mcl_stairs:stair_junglewood 22 +136 7 mcl_stairs:stair_junglewood 20 + 137 mesecons_commandblock:commandblock_off // FIXME: formspec @@ -1144,23 +900,21 @@ 154 8 mcl_hoppers:hopper 0 -#ifdef QUARTZ - 153 mcl_nether:quartz_ore - 155 0 mcl_nether:quartz_block - 155 1 mcl_nether:quartz_chiseled - 155 2 mcl_nether:quartz_pillar - 155 3 mcl_nether:quartz_pillar 4 // TODO: check that - 155 4 mcl_nether:quartz_pillar 8 // TODO: check that +153 mcl_nether:quartz_ore +155 0 mcl_nether:quartz_block +155 1 mcl_nether:quartz_chiseled +155 2 mcl_nether:quartz_pillar +155 3 mcl_nether:quartz_pillar 4 // TODO: check that +155 4 mcl_nether:quartz_pillar 8 // TODO: check that - 156 0 mcl_stairs:stair_quartzblock 1 - 156 1 mcl_stairs:stair_quartzblock 3 - 156 2 mcl_stairs:stair_quartzblock 2 - 156 3 mcl_stairs:stair_quartzblock 0 - 156 4 mcl_stairs:stair_quartzblock 23 - 156 5 mcl_stairs:stair_quartzblock 21 - 156 6 mcl_stairs:stair_quartzblock 22 - 156 7 mcl_stairs:stair_quartzblock 20 -#endif +156 0 mcl_stairs:stair_quartzblock 1 +156 1 mcl_stairs:stair_quartzblock 3 +156 2 mcl_stairs:stair_quartzblock 2 +156 3 mcl_stairs:stair_quartzblock 0 +156 4 mcl_stairs:stair_quartzblock 23 +156 5 mcl_stairs:stair_quartzblock 21 +156 6 mcl_stairs:stair_quartzblock 22 +156 7 mcl_stairs:stair_quartzblock 20 157 0 mcl_minecarts:activator_rail @@ -1239,25 +993,15 @@ 163 6 mcl_stairs:stair_acaciawood 22 163 7 mcl_stairs:stair_acaciawood 20 -#ifdef MORETREES - 164 0 moretrees:stair_oak_planks 1 - 164 1 moretrees:stair_oak_planks 3 - 164 2 moretrees:stair_oak_planks 2 - 164 3 moretrees:stair_oak_planks 0 - 164 4 moretrees:stair_oak_planks 23 - 164 5 moretrees:stair_oak_planks 21 - 164 6 moretrees:stair_oak_planks 22 - 164 7 moretrees:stair_oak_planks 20 -#else - 164 0 mcl_stairs:stair_darkwood 1 - 164 1 mcl_stairs:stair_darkwood 3 - 164 2 mcl_stairs:stair_darkwood 2 - 164 3 mcl_stairs:stair_darkwood 0 - 164 4 mcl_stairs:stair_darkwood 23 - 164 5 mcl_stairs:stair_darkwood 21 - 164 6 mcl_stairs:stair_darkwood 22 - 164 7 mcl_stairs:stair_darkwood 20 -#endif +164 0 mcl_stairs:stair_darkwood 1 +164 1 mcl_stairs:stair_darkwood 3 +164 2 mcl_stairs:stair_darkwood 2 +164 3 mcl_stairs:stair_darkwood 0 +164 4 mcl_stairs:stair_darkwood 23 +164 5 mcl_stairs:stair_darkwood 21 +164 6 mcl_stairs:stair_darkwood 22 +164 7 mcl_stairs:stair_darkwood 20 + 165 0 mcl_core:slimeblock @@ -1652,12 +1396,10 @@ 940 13 mcl_flowerpots:flower_pot_oxeye_daisy 940 14 mcl_flowerpots:flower_pot_sapling 940 15 mcl_flowerpots:flower_pot_sprucesapling + // overflow -#ifdef MORETREES - 941 0 moretrees:birch_sapling -#else - 941 0 mcl_flowerpots:flower_pot_birchsapling -#endif +941 0 mcl_flowerpots:flower_pot_birchsapling + 941 1 mcl_flowerpots:flower_pot_junglesapling 941 2 mcl_flowerpots:flower_pot_acaciasapling 941 3 mcl_flowerpots:flower_pot_sapling