248 lines
7.7 KiB
Python
248 lines
7.7 KiB
Python
# Minecraft to Minetest WE schematic MCEdit filter
|
|
# by sfan5
|
|
|
|
displayName = "-> Minetest WE schematic"
|
|
|
|
#Reference MC: http://media-mcw.cursecdn.com/8/8c/DataValuesBeta.png
|
|
#Reference MT:
|
|
# https://github.com/minetest/common/blob/master/mods/default/init.lua
|
|
# https://github.com/minetest/common/blob/master/mods/wool/init.lua
|
|
# https://github.com/minetest/common/blob/master/mods/stairs/init.lua
|
|
conversionTable = [
|
|
#blockid blockdata minetest-nodename
|
|
#blockdata -1 means ignore
|
|
#blockdata -2 means copy without change
|
|
#blockdata -3 means copy and convert the mc facedir value to mt facedir
|
|
#blockdata -4 is for stairs to support upside down ones
|
|
|
|
(1 , -1, "default:stone"),
|
|
(2 , -1, "default:dirt_with_grass"),
|
|
(3 , -1, "default:dirt"),
|
|
(4 , -1, "default:cobble"),
|
|
(5 , 3, "default:junglewood"),
|
|
(5 , -1, "default:wood"),
|
|
(6 , 3, "default:junglesapling"),
|
|
(6 , -1, "default:sapling"),
|
|
(7 , -1, "default:nyancat_rainbow"), # FIXME Bedrock
|
|
(8 , -1, "default:water_flowing"),
|
|
(9 , -1, "default:water_source"),
|
|
(10 , -1, "default:lava_flowing"),
|
|
(11 , -1, "default:lava_source"),
|
|
(12 , -1, "default:sand"),
|
|
(13 , -1, "default:gravel"),
|
|
(14 , -1, "default:stone_with_gold"),
|
|
(15 , -1, "default:stone_with_iron"),
|
|
(16 , -1, "default:stone_with_coal"),
|
|
(17 , 3, "default:jungletree"),
|
|
(17 , -1, "default:tree"),
|
|
(18 , 3, "default:jungleleaves"),
|
|
(18 , -1, "default:leaves"),
|
|
(20 , -1, "default:glass"),
|
|
(21 , -1, "default:stone_with_copper"),
|
|
(22 , -1, "default:copperblock"),
|
|
(24 , 1, "default:sandstonebrick"),
|
|
(24 , -1, "default:sandstone"),
|
|
(31 , 0, "default:dry_shrub"),
|
|
(31 , 1, "default:grass_4"),
|
|
(31 , 2, "default:grass_3"),
|
|
(31 , -1, "default:grass_1"),
|
|
(32 , -1, "default:dry_shrub"),
|
|
(35 , 0, "wool:white"),
|
|
(35 , 1, "wool:orange"),
|
|
(35 , 4, "wool:yellow"),
|
|
(35 , 5, "wool:green"),
|
|
(35 , 6, "wool:pink"),
|
|
(35 , 7, "wool:dark_grey"),
|
|
(35 , 8, "wool:grey"),
|
|
(35 , 9, "wool:cyan"),
|
|
(35 , 10, "wool:violet"),
|
|
(35 , 11, "wool:blue"),
|
|
(35 , 12, "wool:brown"),
|
|
(35 , 13, "wool:dark_green"),
|
|
(35 , 14, "wool:red"),
|
|
(35 , 15, "wool:black"),
|
|
(37 , -1, "flowers:dandelion_yellow"),
|
|
(38 , -1, "flowers:rose"),
|
|
(41 , -1, "default:goldblock"),
|
|
(42 , -1, "default:steelblock"),
|
|
(43 , 1, "default:sandstone"),
|
|
(43 , 2, "default:wood"),
|
|
(43 , 3, "default:cobble"),
|
|
(43 , 4, "default:brick"),
|
|
(43 , 5, "default:stonebrick"),
|
|
(44 , 0, "stairs:slab_stone"),
|
|
(44 , 1, "stairs:slab_sandstone"),
|
|
(44 , 2, "stairs:slab_wood"),
|
|
(44 , 3, "stairs:slab_cobble"),
|
|
(44 , 4, "stairs:slab_brick"),
|
|
(44 , 5, "stairs:slab_stonebrick"),
|
|
(44 , 8, "stairs:slab_stoneupside_down"),
|
|
(44 , 9, "stairs:slab_sandstoneupside_down"),
|
|
(44 , 10, "stairs:slab_woodupside_down"),
|
|
(44 , 11, "stairs:slab_cobbleupside_down"),
|
|
(44 , 12, "stairs:slab_brickupside_down"),
|
|
(44 , 13, "stairs:slab_stonebrickupside_down"),
|
|
(45 , -1, "default:brick"),
|
|
(47 , -1, "default:bookshelf"),
|
|
(48 , -1, "default:mossycobble"),
|
|
(49 , -1, "default:obsidian"),
|
|
(50 , -3, "default:torch"),
|
|
(51 , -1, "fire:basic_flame"),
|
|
(53 , -4, "stairs:stair_wood"),
|
|
(54 , -1, "default:chest"),
|
|
(56 , -1, "default:stone_with_diamond"),
|
|
(57 , -1, "default:diamondblock"),
|
|
(61 , -1, "default:furnace"),
|
|
(62 , -1, "default:furnace_active"),
|
|
(63 , -1, "default:sign_wood"),
|
|
(64 , -1, "doors:door_wood_t_1"),
|
|
(65 , -1, "default:ladder"),
|
|
(66 , -1, "default:rail"),
|
|
(67 , -4, "stairs:stair_cobble"),
|
|
(68 , -3, "default:sign_wood"),
|
|
(71 , -1, "doors:door_steel_t_1"),
|
|
(78 , -1, "default:snow"),
|
|
(79 , -1, "default:ice"),
|
|
(80 , -1, "default:snowblock"),
|
|
(81 , -1, "default:cactus"),
|
|
(82 , -1, "default:clay"),
|
|
(83 , -1, "default:papyrus"),
|
|
(85 , -1, "default:fence_wood"),
|
|
(98 , -1, "default:stonebrick"),
|
|
(108, -4, "stairs:stair_brick"),
|
|
(109, -3, "stairs:stair_stonebrick"),
|
|
(125, 3, "default:junglewood"),
|
|
(125, -1, "default:wood"),
|
|
(126, 3, "stairs:slab_junglewood"),
|
|
(126, -1, "stairs:slab_wood"),
|
|
(128, -4, "stairs:stair_sandstone"),
|
|
(129, -1, "default:stone_with_mese"),
|
|
(133, -1, "default:mese"),
|
|
(134, -4, "stairs:stair_wood"),
|
|
(135, -4, "stairs:stair_wood"),
|
|
(136, -4, "stairs:stair_junglewood"),
|
|
|
|
#Mesecons section
|
|
# Reference: https://github.com/Jeija/minetest-mod-mesecons/blob/master/mesecons_alias/init.lua
|
|
(25 , -1, "mesecons_noteblock:noteblock", "mesecons"),
|
|
(29 , -3, "mesecons_pistons:piston_sticky_off", "mesecons"),
|
|
(33 , -3, "mesecons_pistons:piston_normal_off", "mesecons"),
|
|
(55 , -1, "mesecons:wire_00000000_off", "mesecons"),
|
|
(69 , -3, "mesecons_walllever:wall_lever_off", "mesecons"),
|
|
(70 , -1, "mesecons_pressureplates:pressure_plate_stone_off", "mesecons"),
|
|
(72 , -1, "mesecons_pressureplates:pressure_plate_wood_off", "mesecons"),
|
|
(73 , -1, "default:stone_with_mese", "mesecons"),
|
|
(74 , -1, "default:stone_with_mese", "mesecons"),
|
|
(75 , -3, "mesecons_torch:torch_off", "mesecons"),
|
|
(76 , -3, "mesecons_torch:torch_on", "mesecons"),
|
|
(77 , -3, "mesecons_button:button_off", "mesecons"),
|
|
(93 , -3, "mesecons_delayer:delayer_off_1", "mesecons"),
|
|
(94 , -3, "mesecons_delayer:delayer_on_1", "mesecons"),
|
|
(123, -1, "mesecons_lightstone_red_off", "mesecons"),
|
|
(124, -1, "mesecons_lightstone_red_on", "mesecons"),
|
|
(137, -1, "mesecons_commandblock:commandblock_off", "mesecons"),
|
|
(151, -1, "mesecons_solarpanel:solar_panel_off", "mesecons"),
|
|
(152, -1, "default:mese", "mesecons"),
|
|
|
|
#Nether section
|
|
# Reference: https://github.com/PilzAdam/nether/blob/master/init.lua
|
|
(43 , 6, "nether:brick", "nether"),
|
|
(87 , -1, "nether:rack", "nether"),
|
|
(88 , -1, "nether:sand", "nether"),
|
|
(89 , -1, "nether:glowstone", "nether"),
|
|
(90 , -3, "nether:portal", "nether"),
|
|
|
|
#Riesenpilz Section
|
|
# Reference: https://github.com/HybridDog/riesenpilz/blob/master/init.lua
|
|
(39 , -1, "riesenpilz:brown", "riesenpilz"),
|
|
(40 , -1, "riesenpilz:red", "riesenpilz"),
|
|
(99 , -3, "riesenpilz:head_brown", "riesenpilz"),
|
|
(100, -3, "riesenpilz:head_brown", "riesenpilz"),
|
|
]
|
|
|
|
inputs = (
|
|
("Output filename", "string"),
|
|
("Enabled Mods", "label"),
|
|
("Mesecons", ("False", "True")),
|
|
("Nether", ("False", "True")),
|
|
("Riesenpilz", ("False", "True")),
|
|
)
|
|
|
|
def mc2mtFacedir(blockdata):
|
|
#Minetest
|
|
# x+ = 2
|
|
# x- = 3
|
|
# z+ = 1
|
|
# z- = 0
|
|
#Minecraft
|
|
# x+ = 3
|
|
# x- = 1
|
|
# z+ = 0
|
|
# z- = 2
|
|
tbl = {
|
|
3: 2,
|
|
1: 3,
|
|
0: 1,
|
|
2: 0,
|
|
}
|
|
return tbl.get(blockdata, 0)
|
|
|
|
def mc2mtstairs(tpl):
|
|
if tpl[1] >= 4:
|
|
return (tpl[0] + "upside_down", mc2mtFacedir(tpl[1] - 4))
|
|
else:
|
|
return (tpl[0], mc2mtFacedir(tpl[1]))
|
|
|
|
|
|
def findConversion(blockid, blockdata, mods):
|
|
if blockid == 0:
|
|
return None
|
|
for cnv in conversionTable:
|
|
if blockid != cnv[0]:
|
|
continue
|
|
if len(cnv) >= 4:
|
|
if mods.get(cnv[3], False) == False:
|
|
continue
|
|
if cnv[1] == -1:
|
|
return (cnv[2], 0)
|
|
elif cnv[1] == -2:
|
|
return (cnv[2], blockdata)
|
|
elif cnv[1] == -3:
|
|
return (cnv[2], mc2mtFacedir(blockdata))
|
|
elif cnv[1] == -4:
|
|
return mc2mtstairs((cnv[2], blockdata))
|
|
elif cnv[1] != blockdata:
|
|
continue
|
|
return (cnv[2], 0)
|
|
return None
|
|
|
|
# def perform(level, box, options):
|
|
# try:
|
|
# f = open("../" + options["Output filename"] + ".we", 'w')
|
|
# except:
|
|
# raise
|
|
#
|
|
# origin = (
|
|
# box.minx + int((box.maxx - box.minx) / 2),
|
|
# box.miny + int((box.maxy - box.miny) / 2),
|
|
# box.minz + int((box.maxz - box.minz) / 2),
|
|
# )
|
|
#
|
|
# mods = {}
|
|
# for arg in options.keys():
|
|
# if options[arg] == "True":
|
|
# mods[arg.lower()] = True
|
|
#
|
|
# for x in xrange(box.minx, box.maxx):
|
|
# for z in xrange(box.minz, box.maxz):
|
|
# for y in xrange(box.miny, box.maxy):
|
|
# c = findConversion(level.blockAt(x, y, z), level.blockDataAt(x, y, z), mods)
|
|
# if c == None:
|
|
# continue
|
|
# calcpos = (x - origin[0], y - origin[1], z - origin[2])
|
|
# fmttpl = calcpos + (c[0], level.blockLightAt(x, y, z), c[1])
|
|
# f.write("%d %d %d %s %d %d\n" % fmttpl)
|
|
#
|
|
# f.close()
|
|
|