New features

master
bzt 2019-12-02 12:46:00 +01:00
parent fcbe326e50
commit 71316e6b27
17 changed files with 524 additions and 286 deletions

View File

@ -27,7 +27,8 @@ You can convert MTS files and generate preview images for them from a script wit
Interactive Mode
----------------
In case of a GUI, a picture can tell more than thousand words. [User Manual](https://gitlab.com/bztsrc/mtsedit/blob/master/docs/usage.md)
Actually the editor has two independent components. One is running outside of the game. In case of a GUI, a picture can tell more
than thousand words. Read the editor's [User Manual](https://gitlab.com/bztsrc/mtsedit/blob/master/docs/usage.md) for more details.
<img src="https://gitlab.com/bztsrc/mtsedit/raw/master/docs/mtsedit.png">
@ -35,6 +36,10 @@ The User Interface is translatable. It should detect your computer's language au
environment variable. Supported languages: "en" English, "hu" Magyar, "es" Español, "fr" Français, "de" Deutch, "pl" Polski,
"ru" русский. Note that block names are user provided, there's no translation for those.
The other component is a Minetest mod, under the [mt-mod](https://gitlab.com/bztsrc/mtsedit/tree/master/mt-mod) directory. This
small Lua script runs inside the game, and can import your edited MTS files into the game's world. It can also save MTS files
and capable of generating the blocks.csv for you.
Compilation
-----------

BIN
data/Spruce_Log_00.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,7 +1,7 @@
_Name,BlockID,Biome Specific,Mineclone2,Minetest Game
Acacia_Bark,,,mcl_core:acaciatree_bark,mcl_core:acaciatree_bark
Acacia_Bark_Slab,,,mcl_stairs:slab_acaciatree_bark,mcl_stairs:slab_acaciatree_bark
Acacia_Bark_Stair,,,mcl_stairs:stair_acaciatree_bark_outer,mcl_stairs:stair_acaciatree_bark
Acacia_Bark_Stair,,,mcl_stairs:stair_acaciatree_bark,mcl_stairs:stair_acaciatree_bark
Acacia_Button,,,mesecons_button:button_acaciawood_off,mesecons_button:button_acaciawood_off
Acacia_Fence,192,,mcl_fences:acacia_fence,default:fence_acacia_wood
Acacia_Fence_Gate,187,,mcl_fences:acacia_fence_gate,doors:gate_acacia_wood_closed
@ -19,7 +19,7 @@ Allium_Flower_Pot,,,mcl_flowerpots:flower_pot_allium,mcl_flowerpots:flower_pot_a
Allium,,,mcl_flowers:allium,mcl_flowers:allium
Andesite,,biome:node_stone,mcl_core:andesite,default:andesite
Andesite_Slab,,,mcl_stairs:slab_andesite,mcl_stairs:slab_andesite
Andesite_Stair,,,mcl_stairs:stair_andesite_inner,mcl_stairs:stair_andesite_outer
Andesite_Stair,,,mcl_stairs:stair_andesite,mcl_stairs:stair_andesite
Andesite_Wall,,,mcl_walls:andesite,mcl_walls:andesite
Anvil,145,,mcl_anvils:anvil,mcl_anvils:anvil
Azure_Bluet_Flower_Pot,,,mcl_flowerpots:flower_pot_azure_bluet,mcl_flowerpots:flower_pot_azure_bluet
@ -30,7 +30,7 @@ Bedrock,7,,mcl_core:bedrock,default:bedrock
Bell,,,mcl_core:bell,default:bell
Birch_Bark,,,mcl_core:birchtree_bark,mcl_core:birchtree_bark
Birch_Bark_Slab,,,mcl_stairs:slab_birchtree_bark,mcl_stairs:slab_birchtree_bark
Birch_Bark_Stair,,,mcl_stairs:stair_birchtree_bark,mcl_stairs:stair_birchtree_bark_inner
Birch_Bark_Stair,,,mcl_stairs:stair_birchtree_bark,mcl_stairs:stair_birchtree_bark
Birch_Button,,,mesecons_button:button_birchwood_off,mesecons_button:button_birchwood_off
Birch_Door,,,mcl_doors:birch_door,doors:door_wood_a
Birch_Fence,189,,mcl_fences:birch_fence,default:fence_wood
@ -49,7 +49,7 @@ Black_Carpet,,,mcl_wool:black_carpet,mcl_wool:black_carpet
Black_Concrete,,,mcl_colorblocks:concrete_black,mcl_colorblocks:concrete_black
Black_Concrete_Powder,,,mcl_colorblocks:concrete_powder_black,mcl_colorblocks:concrete_powder_black
Black_Concrete_Slab,,,mcl_stairs:slab_concrete_black,mcl_stairs:slab_concrete_black
Black_Concrete_Stair,,,mcl_stairs:stair_concrete_black,mcl_stairs:stair_concrete_black_inner
Black_Concrete_Stair,,,mcl_stairs:stair_concrete_black,mcl_stairs:stair_concrete_black
Black_Glazed_Terracotta,250,,mcl_colorblocks:glazed_terracotta_black,mcl_colorblocks:glazed_terracotta_black
Black_Shulker_Box,234,,mcl_chests:black_shulker_box,mcl_chests:black_shulker_box
Black_Stained_Glass,,,mcl_core:glass_black,xpanes:pane_black
@ -61,7 +61,7 @@ Blue_Carpet,,,mcl_wool:blue_carpet,mcl_wool:blue_carpet
Blue_Concrete,,,mcl_colorblocks:concrete_blue,mcl_colorblocks:concrete_blue
Blue_Concrete_Powder,,,mcl_colorblocks:concrete_powder_blue,mcl_colorblocks:concrete_powder_blue
Blue_Concrete_Slab,,,mcl_stairs:slab_concrete_blue,mcl_stairs:slab_concrete_blue
Blue_Concrete_Stair,,,mcl_stairs:stair_concrete_blue,mcl_stairs:stair_concrete_blue_inner
Blue_Concrete_Stair,,,mcl_stairs:stair_concrete_blue,mcl_stairs:stair_concrete_blue
Blue_Glazed_Terracotta,246,,mcl_colorblocks:glazed_terracotta_blue,mcl_colorblocks:glazed_terracotta_blue
Blue_Orchid_Flower_Pot,,,mcl_flowerpots:flower_pot_blue_orchid,mcl_flowerpots:flower_pot_blue_orchid
Blue_Orchid,,,mcl_flowers:blue_orchid,mcl_flowers:blue_orchid
@ -75,14 +75,14 @@ Bookshelf,47,,mcl_books:bookshelf,default:bookshelf
Brewing_Stand,117,,mcl_core:brewing_stand,default:brewing_stand
Brick_Block,45,,mcl_core:brick_block,default:brick
Brick_Slab,,,mcl_stairs:slab_brick_block,stairs:slab_brick
Brick_Stair,108,,mcl_stairs:stair_brick_block_inner,stairs:stair_brick
Brick_Stair,108,,mcl_stairs:stair_brick_block,stairs:stair_brick
Brick_Wall,,,mcl_walls:brick,mcl_walls:brick
Brown_Bed,,,mcl_beds:bed_brown_bottom,mcl_beds:bed_brown_bottom
Brown_Carpet,,,mcl_wool:brown_carpet,mcl_wool:brown_carpet
Brown_Concrete,,,mcl_colorblocks:concrete_brown,mcl_colorblocks:concrete_brown
Brown_Concrete_Powder,,,mcl_colorblocks:concrete_powder_brown,mcl_colorblocks:concrete_powder_brown
Brown_Concrete_Slab,,,mcl_stairs:slab_concrete_brown,mcl_stairs:slab_concrete_brown
Brown_Concrete_Stair,,,mcl_stairs:stair_concrete_brown,mcl_stairs:stair_concrete_brown_inner
Brown_Concrete_Stair,,,mcl_stairs:stair_concrete_brown,mcl_stairs:stair_concrete_brown
Brown_Glazed_Terracotta,247,,mcl_colorblocks:glazed_terracotta_brown,mcl_colorblocks:glazed_terracotta_brown
Brown_Mushroom,39,,mcl_mushrooms:mushroom_brown,flowers:mushroom_brown
Brown_Mushroom_Flower_Pot,,,mcl_flowerpots:flower_pot_mushroom_brown,mcl_flowerpots:flower_pot_mushroom_brown
@ -107,12 +107,12 @@ Coal_Ore,16,,mcl_core:stone_with_coal,default:stone_with_coal
Coarse_Dirt,,biome:node_filler,mcl_core:coarse_dirt,mcl_core:coarse_dirt
Cobblestone,4,,mcl_core:cobble,default:cobble
Cobblestone_Slab,,,mcl_stairs:slab_cobble,stairs:slab_cobble
Cobblestone_Stair,67,,mcl_stairs:stair_cobble_outer,stairs:stair_cobble
Cobblestone_Stair,67,,mcl_stairs:stair_cobble,stairs:stair_cobble
Cobblestone_Wall,139,,mcl_walls:cobble,walls:cobble
Cobweb,30,,mcl_core:cobweb,default:cobweb
Command_Block,137,,mesecons_commandblock:commandblock_off,mesecons_commandblock:commandblock_off
Cracked_Stone_Brick_Slab,,,mcl_stairs:slab_stonebrickcracked,mcl_stairs:slab_stonebrickcracked
Cracked_Stone_Brick_Stair,,,mcl_stairs:stair_stonebrickcracked,mcl_stairs:stair_stonebrickcracked_inner
Cracked_Stone_Brick_Stair,,,mcl_stairs:stair_stonebrickcracked,mcl_stairs:stair_stonebrickcracked
Crafting_Table,58,,mcl_crafting_table:crafting_table,default:crafting_table
Creeper_Head,,,mcl_heads:creeper,mcl_heads:creeper
Cut_Red_Sandstone,,,mcl_core:redsandstonesmooth,mcl_core:redsandstonesmooth
@ -121,7 +121,7 @@ Cyan_Carpet,,,mcl_wool:cyan_carpet,mcl_wool:cyan_carpet
Cyan_Concrete,,,mcl_colorblocks:concrete_cyan,mcl_colorblocks:concrete_cyan
Cyan_Concrete_Powder,,,mcl_colorblocks:concrete_powder_cyan,mcl_colorblocks:concrete_powder_cyan
Cyan_Concrete_Slab,,,mcl_stairs:slab_concrete_cyan,mcl_stairs:slab_concrete_cyan
Cyan_Concrete_Stair,,,mcl_stairs:stair_concrete_cyan,mcl_stairs:stair_concrete_cyan_inner
Cyan_Concrete_Stair,,,mcl_stairs:stair_concrete_cyan,mcl_stairs:stair_concrete_cyan
Cyan_Glazed_Terracotta,244,,mcl_colorblocks:glazed_terracotta_cyan,mcl_colorblocks:glazed_terracotta_cyan
Cyan_Shulker_Box,228,,mcl_chests:cyan_shulker_box,mcl_chests:cyan_shulker_box
Cyan_Stained_Glass,,,mcl_core:glass_cyan,xpanes:pane_cyan
@ -133,7 +133,7 @@ Dandelion_Flower_Pot,,,mcl_flowerpots:flower_pot_dandelion,mcl_flowerpots:flower
Dark_Oak,162,,mcl_core:darktree,mcl_core:darktree
Dark_Oak_Bark,,,mcl_core:darktree_bark,mcl_core:darktree_bark
Dark_Oak_Bark_Slab,,,mcl_stairs:slab_darktree_bark,mcl_stairs:slab_darktree_bark
Dark_Oak_Bark_Stair,,,mcl_stairs:stair_darktree_bark_outer,mcl_stairs:stair_darktree_bark
Dark_Oak_Bark_Stair,,,mcl_stairs:stair_darktree_bark,mcl_stairs:stair_darktree_bark
Dark_Oak_Button,,,mesecons_button:button_darkwood_off,mesecons_button:button_darkwood_off
Dark_Oak_Fence,191,,mcl_fences:dark_oak_fence,mcl_fences:dark_oak_fence
Dark_Oak_Fence_Gate,186,,mcl_fences:dark_oak_fence_gate,mcl_fences:dark_oak_fence_gate
@ -146,7 +146,7 @@ Dark_Oak_Slab,,,mcl_stairs:slab_darkwood,mcl_stairs:slab_darkwood
Dark_Oak_Stair,164,,mcl_stairs:stair_darkwood,mcl_stairs:stair_darkwood
Dark_Oak_Trapdoor,,,mcl_doors:dark_oak_trapdoor,mcl_doors:dark_oak_trapdoor
Dark_Prismarine_Slab,,,mcl_stairs:slab_prismarine_dark,mcl_stairs:slab_prismarine_dark
Dark_Prismarine_Stair,,,mcl_stairs:stair_prismarine_dark,mcl_stairs:stair_prismarine_dark_inner
Dark_Prismarine_Stair,,,mcl_stairs:stair_prismarine_dark,mcl_stairs:stair_prismarine_dark
Daylight_Sensor,151,,mesecons_solarpanel:solar_panel_on,mesecons_solarpanel:solar_panel_on
Dead_Bush,32,,mcl_core:deadbush,default:dry_grass
Dead_Bush_Flower_Pot,,,mcl_flowerpots:flower_pot_deadbush,mcl_flowerpots:flower_pot_deadbush
@ -156,7 +156,7 @@ Diamond_Block,57,,mcl_core:diamondblock,default:diamondblock
Diamond_Ore,56,,mcl_core:stone_with_diamond,default:stone_with_diamond
Diorite,,,mcl_core:diorite,mcl_core:diorite
Diorite_Slab,,,mcl_stairs:slab_diorite,mcl_stairs:slab_diorite
Diorite_Stair,,,mcl_stairs:stair_diorite,mcl_stairs:stair_diorite_inner
Diorite_Stair,,,mcl_stairs:stair_diorite,mcl_stairs:stair_diorite
Diorite_Wall,,,mcl_walls:diorite,mcl_walls:diorite
Dirt,3,biome:node_filler,mcl_core:dirt,default:dirt
Disabled_Hopper,,,mcl_hoppers:hopper_disabled,mcl_hoppers:hopper_disabled
@ -234,7 +234,7 @@ End_Rod,198,,mcl_end:end_rod,mcl_end:end_rod
End_Stone,121,,mcl_end:end_stone,mcl_end:end_stone
End_Stone_Brick,206,,mcl_end:end_bricks,mcl_end:end_bricks
End_Stone_Brick_Slab,,,mcl_stairs:slab_end_bricks,mcl_stairs:slab_end_bricks
End_Stone_Brick_Stair,,,mcl_stairs:stair_end_bricks_inner,mcl_stairs:stair_end_bricks
End_Stone_Brick_Stair,,,mcl_stairs:stair_end_bricks,mcl_stairs:stair_end_bricks
End_Stone_Brick_Wall,,,mcl_walls:endbricks,mcl_walls:endbricks
Eternal_Fire,,,mcl_fire:eternal_fire,mcl_fire:eternal_fire
Faceless_Pumpkin,,,mcl_farming:pumpkin,mcl_farming:pumpkin
@ -255,11 +255,11 @@ Glass_Pane,,,xpanes:pane_flat,xpanes:pane_flat
Glowstone,89,,mcl_nether:glowstone,mcl_nether:glowstone
Gold_Block,41,,mcl_core:goldblock,default:goldblock
Gold_Block_Slab,,,mcl_stairs:slab_goldblock,stairs:slab_goldblock
Gold_Block_Stair,,,mcl_stairs:stair_goldblock,mcl_stairs:stair_goldblock_outer
Gold_Block_Stair,,,mcl_stairs:stair_goldblock,mcl_stairs:stair_goldblock
Gold_Ore,14,,mcl_core:stone_with_gold,default:stone_with_gold
Granite,,,mcl_core:granite,mcl_core:granite
Granite_Slab,,,mcl_stairs:slab_granite,mcl_stairs:slab_granite
Granite_Stair,,,mcl_stairs:stair_granite_inner,mcl_stairs:stair_granite
Granite_Stair,,,mcl_stairs:stair_granite,mcl_stairs:stair_granite
Granite_Wall,,,mcl_walls:granite,mcl_walls:granite
Grass,31,,mcl_flowers:grass,default:grass
Grass_Block,2,biome:node_top,mcl_core:dirt_with_grass,default:dirt_with_grass
@ -270,7 +270,7 @@ Green_Carpet,,,mcl_wool:green_carpet,mcl_wool:green_carpet
Green_Concrete,,,mcl_colorblocks:concrete_green,mcl_colorblocks:concrete_green
Green_Concrete_Powder,,,mcl_colorblocks:concrete_powder_green,mcl_colorblocks:concrete_powder_green
Green_Concrete_Slab,,,mcl_stairs:slab_concrete_green,mcl_stairs:slab_concrete_green
Green_Concrete_Stair,,,mcl_stairs:stair_concrete_green,mcl_stairs:stair_concrete_green_inner
Green_Concrete_Stair,,,mcl_stairs:stair_concrete_green,mcl_stairs:stair_concrete_green
Green_Glazed_Terracotta,248,,mcl_colorblocks:glazed_terracotta_green,mcl_colorblocks:glazed_terracotta_green
Green_Shulker_Box,232,,mcl_chests:dark_green_shulker_box,mcl_chests:dark_green_shulker_box
Green_Stained_Glass,,,mcl_core:glass_green,xpanes:pane_green
@ -282,7 +282,7 @@ Grey_Carpet,,,mcl_wool:grey_carpet,mcl_wool:grey_carpet
Grey_Concrete,251,,mcl_colorblocks:concrete_grey,mcl_colorblocks:concrete_grey
Grey_Concrete_Powder,252,,mcl_colorblocks:concrete_powder_grey,mcl_colorblocks:concrete_powder_grey
Grey_Concrete_Slab,,,mcl_stairs:slab_concrete_grey,mcl_stairs:slab_concrete_grey
Grey_Concrete_Stair,,,mcl_stairs:stair_concrete_grey_inner,mcl_stairs:stair_concrete_grey_outer
Grey_Concrete_Stair,,,mcl_stairs:stair_concrete_grey,mcl_stairs:stair_concrete_grey
Grey_Glazed_Terracotta,242,,mcl_colorblocks:glazed_terracotta_grey,mcl_colorblocks:glazed_terracotta_grey
Grey_Shulker_Box,226,,mcl_chests:dark_grey_shulker_box,mcl_chests:dark_grey_shulker_box
Grey_Stained_Glass,,,mcl_core:glass_gray,xpanes:pane_gray
@ -312,7 +312,7 @@ Inverted_Daylight_Sensor,178,,mesecons_solarpanel:solar_panel_inverted_on,meseco
Iron_Bar,101,,xpanes:bar_flat,xpanes:bar_flat
Iron_Block,42,,mcl_core:ironblock,default:steelblock
Iron_Block_Slab,,,mcl_stairs:slab_ironblock,stairs:slab_steelblock
Iron_Block_Stair,,,mcl_stairs:stair_ironblock,mcl_stairs:stair_ironblock_inner
Iron_Block_Stair,,,mcl_stairs:stair_ironblock,mcl_stairs:stair_ironblock
Iron_Door,71,,mcl_doors:iron_door,doors:door_steel_a
Iron_Ore,15,,mcl_core:stone_with_iron,default:stone_with_iron
Iron_Trapdoor,167,,mcl_doors:iron_trapdoor,doors:trapdoor_steel_closed
@ -321,7 +321,7 @@ Jack_o_Lantern,91,,mcl_farming:pumpkin_face_light,mcl_farming:pumpkin_face_light
Jukebox,84,,mcl_jukebox:jukebox,default:jukebox
Jungle_Bark,,,mcl_core:jungletree_bark,mcl_core:jungletree_bark
Jungle_Bark_Slab,,,mcl_stairs:slab_jungletree_bark,mcl_stairs:slab_jungletree_bark
Jungle_Bark_Stair,,,mcl_stairs:stair_jungletree_bark,mcl_stairs:stair_jungletree_bark_inner
Jungle_Bark_Stair,,,mcl_stairs:stair_jungletree_bark,mcl_stairs:stair_jungletree_bark
Jungle_Button,,,mesecons_button:button_junglewood_off,mesecons_button:button_junglewood_off
Jungle_Fence,190,,mcl_fences:jungle_fence,default:fence_junglewood
Jungle_Fence_Gate,185,,mcl_fences:jungle_fence_gate,doors:gate_junglewood_open
@ -338,7 +338,7 @@ Ladder,65,,mcl_core:ladder,default:ladder
Lapis_Lazuli_Block,22,,mcl_core:lapisblock,default:lapisblock
Lapis_Lazuli_Ore,21,,mcl_core:stone_with_lapis,default:stone_with_lapis
Lapis_Lazuli_Slab,,,mcl_stairs:slab_lapisblock,mcl_stairs:slab_lapisblock
Lapis_Lazuli_Stair,,,mcl_stairs:stair_lapisblock,mcl_stairs:stair_lapisblock_outer
Lapis_Lazuli_Stair,,,mcl_stairs:stair_lapisblock,mcl_stairs:stair_lapisblock
Large_Fern,,,mcl_flowers:double_fern,mcl_flowers:double_fern_top
Lava_Source,10/11,,mcl_core:lava_source,default:lava_source
Leaves,18,,mcl_core:leaves,default:leaves
@ -348,7 +348,7 @@ Light_Blue_Carpet,,,mcl_wool:light_blue_carpet,mcl_wool:light_blue_carpet
Light_Blue_Concrete,,,mcl_colorblocks:concrete_light_blue,mcl_colorblocks:concrete_light_blue
Light_Blue_Concrete_Powder,,,mcl_colorblocks:concrete_powder_light_blue,mcl_colorblocks:concrete_powder_light_blue
Light_Blue_Concrete_Slab,,,mcl_stairs:slab_concrete_light_blue,mcl_stairs:slab_concrete_light_blue
Light_Blue_Concrete_Stair,,,mcl_stairs:stair_concrete_light_blue_outer,mcl_stairs:stair_concrete_light_blue
Light_Blue_Concrete_Stair,,,mcl_stairs:stair_concrete_light_blue,mcl_stairs:stair_concrete_light_blue
Light_Blue_Glazed_Terracotta,238,,mcl_colorblocks:glazed_terracotta_light_blue,mcl_colorblocks:glazed_terracotta_light_blue
Light_Blue_Shulker_Box,222,,mcl_chests:lightblue_shulker_box,mcl_chests:lightblue_shulker_box
Light_Blue_Stained_Glass,,,mcl_core:glass_light_blue,xpanes:pane_light_blue
@ -360,7 +360,7 @@ Light_Grey_Carpet,,,mcl_wool:silver_carpet,mcl_wool:silver_carpet
Light_Grey_Concrete,,,mcl_colorblocks:concrete_silver,mcl_colorblocks:concrete_silver
Light_Grey_Concrete_Powder,,,mcl_colorblocks:concrete_powder_silver,mcl_colorblocks:concrete_powder_silver
Light_Grey_Concrete_Slab,,,mcl_stairs:slab_concrete_silver,mcl_stairs:slab_concrete_silver
Light_Grey_Concrete_Stair,,,mcl_stairs:stair_concrete_silver,mcl_stairs:stair_concrete_silver_outer
Light_Grey_Concrete_Stair,,,mcl_stairs:stair_concrete_silver,mcl_stairs:stair_concrete_silver
Light_Grey_Glazed_Terracotta,243,,mcl_colorblocks:glazed_terracotta_silver,mcl_colorblocks:glazed_terracotta_silver
Light_Grey_Shulker_Box,227,,mcl_chests:grey_shulker_box,mcl_chests:grey_shulker_box
Light_Grey_Stained_Glass,,,mcl_core:glass_silver,xpanes:pane_silver
@ -373,7 +373,7 @@ Lime_Carpet,,,mcl_wool:lime_carpet,mcl_wool:lime_carpet
Lime_Concrete,,,mcl_colorblocks:concrete_lime,mcl_colorblocks:concrete_lime
Lime_Concrete_Powder,,,mcl_colorblocks:concrete_powder_lime,mcl_colorblocks:concrete_powder_lime
Lime_Concrete_Slab,,,mcl_stairs:slab_concrete_lime,mcl_stairs:slab_concrete_lime
Lime_Concrete_Stair,,,mcl_stairs:stair_concrete_lime_outer,mcl_stairs:stair_concrete_lime
Lime_Concrete_Stair,,,mcl_stairs:stair_concrete_lime,mcl_stairs:stair_concrete_lime
Lime_Glazed_Terracotta,240,,mcl_colorblocks:glazed_terracotta_lime,mcl_colorblocks:glazed_terracotta_lime
Lime_Shulker_Box,224,,mcl_chests:green_shulker_box,mcl_chests:green_shulker_box
Lime_Stained_Glass,,,mcl_core:glass_lime,xpanes:pane_lime
@ -386,7 +386,7 @@ Magenta_Carpet,,,mcl_wool:magenta_carpet,mcl_wool:magenta_carpet
Magenta_Concrete,,,mcl_colorblocks:concrete_magenta,mcl_colorblocks:concrete_magenta
Magenta_Concrete_Powder,,,mcl_colorblocks:concrete_powder_magenta,mcl_colorblocks:concrete_powder_magenta
Magenta_Concrete_Slab,,,mcl_stairs:slab_concrete_magenta,mcl_stairs:slab_concrete_magenta
Magenta_Concrete_Stair,,,mcl_stairs:stair_concrete_magenta,mcl_stairs:stair_concrete_magenta_outer
Magenta_Concrete_Stair,,,mcl_stairs:stair_concrete_magenta,mcl_stairs:stair_concrete_magenta
Magenta_Glazed_Terracotta,237,,mcl_colorblocks:glazed_terracotta_magenta,mcl_colorblocks:glazed_terracotta_magenta
Magenta_Shulker_Box,221,,mcl_chests:magenta_shulker_box,mcl_chests:magenta_shulker_box
Magenta_Stained_Glass,,,mcl_core:glass_magenta,xpanes:pane_magenta
@ -409,16 +409,16 @@ Mossy_Cobblestone,48,,mcl_core:mossycobble,default:mossycobble
Mossy_Cobblestone_Wall,,,mcl_walls:mossycobble,walls:mossycobble
Mossy_Stone_Brick,,,mcl_core:stonebrickmossy,mcl_core:stonebrickmossy
Mossy_Stone_Brick_Slab,,,mcl_stairs:slab_stonebrickmossy,mcl_stairs:slab_stonebrickmossy
Mossy_Stone_Brick_Stair,,,mcl_stairs:stair_stonebrickmossy_inner,mcl_stairs:stair_stonebrickmossy
Mossy_Stone_Brick_Stair,,,mcl_stairs:stair_stonebrickmossy,mcl_stairs:stair_stonebrickmossy
Mossy_Stone_Brick_Wall,,,mcl_walls:stonebrickmossy,mcl_walls:stonebrickmossy
Mossy_Stone_Slab,,,mcl_stairs:slab_mossycobble,mcl_stairs:slab_mossycobble
Mossy_Stone_Stair,,,mcl_stairs:stair_mossycobble_outer,mcl_stairs:stair_mossycobble
Mossy_Stone_Stair,,,mcl_stairs:stair_mossycobble,mcl_stairs:stair_mossycobble
Mycelium,110,biome:node_top,mcl_core:mycelium,mcl_core:mycelium
Nether_Brick_Block,112,,mcl_nether:nether_brick,mcl_nether:nether_brick
Nether_Brick_Fence,113,,mcl_fences:nether_brick_fence,mcl_fences:nether_brick_fence
Nether_Brick_Fence_Gate,,,mclx_fences:nether_brick_fence_gate,mclx_fences:nether_brick_fence_gate
Nether_Brick_Slab,,,mcl_stairs:slab_nether_brick,mcl_stairs:slab_nether_brick
Nether_Brick_Stair,114,,mcl_stairs:stair_nether_brick,mcl_stairs:stair_nether_brick_outer
Nether_Brick_Stair,114,,mcl_stairs:stair_nether_brick,mcl_stairs:stair_nether_brick
Nether_Brick_Wall,,,mcl_walls:netherbrick,mcl_walls:netherbrick
Nether_Lava_Source,,,mcl_nether:nether_lava_source,mcl_nether:nether_lava_source
Nether_Portal,90,,mcl_portals:portal,mcl_portals:portal
@ -429,7 +429,7 @@ Note_Block,25,,mesecons_noteblock:noteblock,mesecons_noteblock:noteblock
Oak,17,,mcl_core:tree,default:tree
Oak_Bark,,,mcl_core:tree_bark,mcl_core:tree_bark
Oak_Bark_Slab,,,mcl_stairs:slab_tree_bark,mcl_stairs:slab_tree_bark
Oak_Bark_Stair,,,mcl_stairs:stair_tree_bark_outer,mcl_stairs:stair_tree_bark
Oak_Bark_Stair,,,mcl_stairs:stair_tree_bark,mcl_stairs:stair_tree_bark
Oak_Button,143,,mesecons_button:button_wood_off,mesecons_button:button_wood_off
Oak_Door,64,,mcl_doors:wooden_door,doors:door_wood_a
Oak_Fence_Gate,107,,mcl_fences:fence_gate,mcl_fences:fence_gate
@ -453,7 +453,7 @@ Orange_Carpet,,,mcl_wool:orange_carpet,mcl_wool:orange_carpet
Orange_Concrete,,,mcl_colorblocks:concrete_orange,mcl_colorblocks:concrete_orange
Orange_Concrete_Powder,,,mcl_colorblocks:concrete_powder_orange,mcl_colorblocks:concrete_powder_orange
Orange_Concrete_Slab,,,mcl_stairs:slab_concrete_orange,mcl_stairs:slab_concrete_orange
Orange_Concrete_Stair,,,mcl_stairs:stair_concrete_orange_outer,mcl_stairs:stair_concrete_orange
Orange_Concrete_Stair,,,mcl_stairs:stair_concrete_orange,mcl_stairs:stair_concrete_orange
Orange_Glazed_Terracotta,236,,mcl_colorblocks:glazed_terracotta_orange,mcl_colorblocks:glazed_terracotta_orange
Orange_Shulker_Box,220,,mcl_chests:orange_shulker_box,mcl_chests:orange_shulker_box
Orange_Stained_Glass,,,mcl_core:glass_orange,xpanes:pane_orange
@ -472,7 +472,7 @@ Pink_Carpet,,,mcl_wool:pink_carpet,mcl_wool:pink_carpet
Pink_Concrete,,,mcl_colorblocks:concrete_pink,mcl_colorblocks:concrete_pink
Pink_Concrete_Powder,,,mcl_colorblocks:concrete_powder_pink,mcl_colorblocks:concrete_powder_pink
Pink_Concrete_Slab,,,mcl_stairs:slab_concrete_pink,mcl_stairs:slab_concrete_pink
Pink_Concrete_Stair,,,mcl_stairs:stair_concrete_pink,mcl_stairs:stair_concrete_pink_inner
Pink_Concrete_Stair,,,mcl_stairs:stair_concrete_pink,mcl_stairs:stair_concrete_pink
Pink_Glazed_Terracotta,241,,mcl_colorblocks:glazed_terracotta_pink,mcl_colorblocks:glazed_terracotta_pink
Pink_Shulker_Box,225,,mcl_chests:pink_shulker_box,mcl_chests:pink_shulker_box
Pink_Stained_Glass,,,mcl_core:glass_pink,xpanes:pane_pink
@ -485,13 +485,13 @@ Piston,33,,mesecons_pistons:piston_normal_off,mesecons_pistons:piston_normal_off
Podzol,,biome:node_top,mcl_core:podzol,mcl_core:podzol
Polished_Andesite,,,mcl_core:andesite_smooth,mcl_core:andesite_smooth
Polished_Andesite_Slab,,,mcl_stairs:slab_andesite_smooth,mcl_stairs:slab_andesite_smooth
Polished_Andesite_Stair,,,mcl_stairs:stair_andesite_smooth_inner,mcl_stairs:stair_andesite_smooth
Polished_Andesite_Stair,,,mcl_stairs:stair_andesite_smooth,mcl_stairs:stair_andesite_smooth
Polished_Diorite,,,mcl_core:diorite_smooth,mcl_core:diorite_smooth
Polished_Diorite_Slab,,,mcl_stairs:slab_diorite_smooth,mcl_stairs:slab_diorite_smooth
Polished_Diorite_Stair,,,mcl_stairs:stair_diorite_smooth,mcl_stairs:stair_diorite_smooth_outer
Polished_Diorite_Stair,,,mcl_stairs:stair_diorite_smooth,mcl_stairs:stair_diorite_smooth
Polished_Granite,,,mcl_core:granite_smooth,mcl_core:granite_smooth
Polished_Granite_Slab,,,mcl_stairs:slab_granite_smooth,mcl_stairs:slab_granite_smooth
Polished_Granite_Stair,,,mcl_stairs:stair_granite_smooth_inner,mcl_stairs:stair_granite_smooth_outer
Polished_Granite_Stair,,,mcl_stairs:stair_granite_smooth,mcl_stairs:stair_granite_smooth
Polished_Stone,,,mcl_core:stone_smooth,mcl_core:stone_smooth
Poppy,38,,mcl_flowers:poppy,default:poppy
Poppy_Flower_Pot,,,mcl_flowerpots:flower_pot_poppy,mcl_flowerpots:flower_pot_poppy
@ -501,10 +501,10 @@ Powered_Redstone_Trail,,,mesecons:wire_10000000_on,mesecons:wire_10010000_on
Prismarine,168,,mcl_ocean:prismarine,default:prismarine
Prismarine_Brick,,,mcl_ocean:prismarine_brick,default:prismarine_brick
Prismarine_Brick_Slab,,,mcl_stairs:slab_prismarine_brick,mcl_stairs:slab_prismarine_brick
Prismarine_Brick_Stair,,,mcl_stairs:stair_prismarine_brick_outer,mcl_stairs:stair_prismarine_brick_inner
Prismarine_Brick_Stair,,,mcl_stairs:stair_prismarine_brick,mcl_stairs:stair_prismarine_brick
Prismarine_Dark,,,mcl_ocean:prismarine_dark,default:prismarine_dark
Prismarine_Slab,,,mcl_stairs:slab_prismarine,mcl_stairs:slab_prismarine
Prismarine_Stair,,,mcl_stairs:stair_prismarine,mcl_stairs:stair_prismarine_outer
Prismarine_Stair,,,mcl_stairs:stair_prismarine,mcl_stairs:stair_prismarine
Prismarine_Wall,,,mcl_walls:prismarine,mcl_walls:prismarine
Pumpkin,86,,mcl_farming:pumpkin_face,mcl_farming:pumpkin_face
Purple_Bed,,,mcl_beds:bed_purple_bottom,mcl_beds:bed_purple_bottom
@ -512,7 +512,7 @@ Purple_Carpet,,,mcl_wool:purple_carpet,mcl_wool:purple_carpet
Purple_Concrete,,,mcl_colorblocks:concrete_purple,mcl_colorblocks:concrete_purple
Purple_Concrete_Powder,,,mcl_colorblocks:concrete_powder_purple,mcl_colorblocks:concrete_powder_purple
Purple_Concrete_Slab,,,mcl_stairs:slab_concrete_purple,mcl_stairs:slab_concrete_purple
Purple_Concrete_Stair,,,mcl_stairs:stair_concrete_purple,mcl_stairs:stair_concrete_purple_inner
Purple_Concrete_Stair,,,mcl_stairs:stair_concrete_purple,mcl_stairs:stair_concrete_purple
Purple_Glazed_Terracotta,245,,mcl_colorblocks:glazed_terracotta_purple,mcl_colorblocks:glazed_terracotta_purple
Purple_Shulker_Box,229,,mcl_chests:violet_shulker_box,mcl_chests:violet_shulker_box
Purple_Stained_Glass,,,mcl_core:glass_purple,xpanes:pane_purple
@ -522,10 +522,10 @@ Purple_Wool,,,mcl_wool:purple,mcl_wool:purple
Purpur_Block,201,,mcl_end:purpur_block,mcl_end:purpur_block
Purpur_Pillar,202,,mcl_end:purpur_pillar,mcl_end:purpur_pillar
Purpur_Slab,205,,mcl_stairs:slab_purpur_block,mcl_stairs:slab_purpur_block
Purpur_Stair,203,,mcl_stairs:stair_purpur_block_inner,mcl_stairs:stair_purpur_block
Purpur_Stair,203,,mcl_stairs:stair_purpur_block,mcl_stairs:stair_purpur_block
Quartz_Block,155,,mcl_nether:quartz_block,mcl_nether:quartz_block
Quartz_Slab,,,mcl_stairs:slab_quartzblock,mcl_stairs:slab_quartzblock
Quartz_Stair,156,,mcl_stairs:stair_quartzblock,mcl_stairs:stair_quartzblock_outer
Quartz_Stair,156,,mcl_stairs:stair_quartzblock,mcl_stairs:stair_quartzblock
Rail,66,,mcl_minecarts:rail,carts:rail
Realm_Barrier,,,mcl_core:realm_barrier,mcl_core:realm_barrier
Red_Bed,,,mcl_beds:bed_red_bottom,mcl_beds:bed_red_bottom
@ -533,7 +533,7 @@ Red_Carpet,,,mcl_wool:red_carpet,mcl_wool:red_carpet
Red_Concrete,,,mcl_colorblocks:concrete_red,mcl_colorblocks:concrete_red
Red_Concrete_Powder,,,mcl_colorblocks:concrete_powder_red,mcl_colorblocks:concrete_powder_red
Red_Concrete_Slab,,,mcl_stairs:slab_concrete_red,mcl_stairs:slab_concrete_red
Red_Concrete_Stair,,,mcl_stairs:stair_concrete_red,mcl_stairs:stair_concrete_red_inner
Red_Concrete_Stair,,,mcl_stairs:stair_concrete_red,mcl_stairs:stair_concrete_red
Red_Glazed_Terracotta,249,,mcl_colorblocks:glazed_terracotta_red,mcl_colorblocks:glazed_terracotta_red
Red_Mushroom,40,,mcl_mushrooms:mushroom_red,flowers:mushroom_red
Red_Mushroom_Flower_Pot,,,mcl_flowerpots:flower_pot_mushroom_red,mcl_flowerpots:flower_pot_mushroom_red
@ -541,12 +541,12 @@ Red_Nether_Brick_Block,215,,mcl_nether:red_nether_brick,mcl_nether:red_nether_br
Red_Nether_Brick_Fence_Gate,,,mclx_fences:red_nether_brick_fence_gate,mclx_fences:red_nether_brick_fence_gate
Red_Nether_Brick_Fence,,,mclx_fences:red_nether_brick_fence,mclx_fences:red_nether_brick_fence
Red_Nether_Brick_Slab,,,mcl_stairs:slab_red_nether_brick,mcl_stairs:slab_red_nether_brick
Red_Nether_Brick_Stair,,,mcl_stairs:stair_red_nether_brick_inner,mcl_stairs:stair_red_nether_brick
Red_Nether_Brick_Stair,,,mcl_stairs:stair_red_nether_brick,mcl_stairs:stair_red_nether_brick
Red_Nether_Brick_Wall,,,mcl_walls:rednetherbrick,mcl_walls:rednetherbrick
Red_Sand,,biome:node_riverbed,mcl_core:redsand,mcl_core:redsand
Red_Sandstone,179,,mcl_core:redsandstone,mcl_core:redsandstone
Red_Sandstone_Slab,182,,mcl_stairs:slab_redsandstone,mcl_stairs:slab_redsandstone
Red_Sandstone_Stair,180,,mcl_stairs:stair_redsandstone_outer,mcl_stairs:stair_redsandstone_inner
Red_Sandstone_Stair,180,,mcl_stairs:stair_redsandstone,mcl_stairs:stair_redsandstone
Red_Sandstone_Wall,,,mcl_walls:redsandstone,mcl_walls:redsandstone
Red_Shulker_Box,233,,mcl_chests:red_shulker_box,mcl_chests:red_shulker_box
Red_Stained_Glass,,,mcl_core:glass_red,xpanes:pane_red
@ -574,7 +574,7 @@ Sandstone,24,biome:node_stone,mcl_core:sandstone,default:sandstone
Sandstone_Carved,,,mcl_core:sandstonecarved,default:sandstonecarved
Sandstone_Slab,,,mcl_stairs:slab_sandstone,stairs:slab_sandstone
Sandstone_Smooth,,,mcl_core:sandstonesmooth,default:sandstonesmooth
Sandstone_Stair,128,,mcl_stairs:stair_sandstone_outer,stairs:stair_sandstone
Sandstone_Stair,128,,mcl_stairs:stair_sandstone,stairs:stair_sandstone
Sandstone_Wall,,,mcl_walls:sandstone,mcl_walls:sandstone
Sea_Lantern,169,,mcl_ocean:sea_lantern,default:sea_Lantern
Side_Hopper,,,mcl_hoppers:hopper_side,mcl_hoppers:hopper_side
@ -582,25 +582,26 @@ Skeleton_Skull,144,,mcl_heads:skeleton,mcl_heads:skeleton
Slime_Block,165,,mcl_core:slimeblock,mcl_core:slimeblock
Smooth_Quartz,,,mcl_nether:quartz_smooth,mcl_nether:quartz_smooth
Smooth_Quartz_Slab,,,mcl_stairs:slab_quartz_smooth,mcl_stairs:slab_quartz_smooth
Smooth_Quartz_Stair,,,mcl_stairs:stair_quartz_smooth_inner,mcl_stairs:stair_quartz_smooth_outer
Smooth_Quartz_Stair,,,mcl_stairs:stair_quartz_smooth,mcl_stairs:stair_quartz_smooth
Smooth_Red_Sandstone,,,mcl_core:redsandstonesmooth2,mcl_core:redsandstonesmooth2
Smooth_Red_Sandstone_Slab,,,mcl_stairs:slab_redsandstonesmooth2,mcl_stairs:slab_redsandstonesmooth2
Smooth_Red_Sandstone_Stair,,,mcl_stairs:stair_redsandstonesmooth2_inner,mcl_stairs:stair_redsandstonesmooth2_outer
Smooth_Red_Sandstone_Stair,,,mcl_stairs:stair_redsandstonesmooth2,mcl_stairs:stair_redsandstonesmooth2
Smooth_Sandstone,,,mcl_core:sandstonesmooth2,mcl_core:sandstonesmooth2
Smooth_Sandstone_Slab,,,mcl_stairs:slab_sandstonesmooth2,mcl_stairs:slab_sandstonesmooth2
Smooth_Sandstone_Stair,,,mcl_stairs:stair_sandstonesmooth2_inner,mcl_stairs:stair_sandstonesmooth2
Smooth_Sandstone_Stair,,,mcl_stairs:stair_sandstonesmooth2,mcl_stairs:stair_sandstonesmooth2
Snow_Block,80,biome:node_dust,mcl_core:snowblock,default:snow
Snow_Layer,78,,mcl_core:snow_layer,default:snow_layer
Soul_Sand,88,,mcl_nether:soul_sand,mcl_nether:soul_sand
Sponge,19,,mcl_sponges:sponge,default:sponge
Spruce_Bark,,,mcl_core:sprucetree_bark,mcl_core:sprucetree_bark
Spruce_Bark_Slab,,,mcl_stairs:slab_sprucetree_bark,mcl_stairs:slab_sprucetree_bark
Spruce_Bark_Stair,,,mcl_stairs:stair_sprucetree_bark_outer,mcl_stairs:stair_sprucetree_bark_inner
Spruce_Bark_Stair,,,mcl_stairs:stair_sprucetree_bark,mcl_stairs:stair_sprucetree_bark
Spruce_Button,,,mesecons_button:button_sprucewood_off,mesecons_button:button_sprucewood_off
Spruce_Fence,188,,mcl_fences:spruce_fence,default:spruce_fence
Spruce_Fence_Gate,183,,mcl_fences:spruce_fence_gate,mcl_fences:spruce_fence_gate
Spruce_Leaves,,,mcl_core:spruceleaves,mcl_core:spruceleaves
Spruce,,,mcl_core:sprucetree,mcl_core:sprucetree
Spruce_Log,,,mcl_core:sprucetree,mcl_core:sprucetree
Spruce,,,mcl_core:sprucewood,mcl_core:sprucewood
Spruce_Pressure_Plate,,,mesecons_pressureplates:pressure_plate_sprucewood_on,mesecons_pressureplates:pressure_plate_sprucewood_off
Spruce_Sapling_Flower_Pot,,,mcl_flowerpots:flower_pot_sprucesapling,mcl_flowerpots:flower_pot_sprucesapling
Spruce_Sapling,,,mcl_core:sprucesapling,mcl_core:sprucesapling
@ -615,7 +616,7 @@ Stone_Brick_Carved,,,mcl_core:stonebrickcarved,default:stonebrickcarved
Stone_Brick_Cracked,,,mcl_core:stonebrickcracked,default:stonebrickcracked
Stone_Brick_Slab,43,,mcl_stairs:slab_stonebrick,stairs:slab_stonebrick
Stone_Brick_Stair,109,,mcl_stairs:stair_stonebrick,stairs:stair_stonebrick
Stone_Brick_Stair,,,mcl_stairs:stair_stonebrick_outer,mcl_stairs:stair_stonebrick_inner
Stone_Brick_Stair,,,mcl_stairs:stair_stonebrick,mcl_stairs:stair_stonebrick
Stone_Brick_Wall,,,mcl_walls:stonebrick,default:wall_stonebrick
Stone_Button,77,,mesecons_button:button_stone_off,mesecons_button:button_stone_off
Stone_Pressure_Plate,70,,mesecons_pressureplates:pressure_plate_stone_off,mesecons_pressureplates:pressure_plate_stone_off
@ -639,7 +640,7 @@ White_Carpet,171,,mcl_wool:white_carpet,wool:white_carpet
White_Concrete,,,mcl_colorblocks:concrete_white,mcl_colorblocks:concrete_white
White_Concrete_Powder,,,mcl_colorblocks:concrete_powder_white,mcl_colorblocks:concrete_powder_white
White_Concrete_Slab,,,mcl_stairs:slab_concrete_white,mcl_stairs:slab_concrete_white
White_Concrete_Stair,,,mcl_stairs:stair_concrete_white,mcl_stairs:stair_concrete_white_inner
White_Concrete_Stair,,,mcl_stairs:stair_concrete_white,mcl_stairs:stair_concrete_white
White_Glass_Pane,102,,xpanes:pane_white,xpanes:pane_white
White_Glazed_Terracotta,235,,mcl_colorblocks:glazed_terracotta_white,mcl_colorblocks:glazed_terracotta_white
White_Shulker_Box,219,,mcl_chests:white_shulker_box,mcl_chests:white_shulker_box
@ -655,7 +656,7 @@ Yellow_Carpet,,,mcl_wool:yellow_carpet,mcl_wool:yellow_carpet
Yellow_Concrete,,,mcl_colorblocks:concrete_yellow,mcl_colorblocks:concrete_yellow
Yellow_Concrete_Powder,,,mcl_colorblocks:concrete_powder_yellow,mcl_colorblocks:concrete_powder_yellow
Yellow_Concrete_Slab,,,mcl_stairs:slab_concrete_yellow,mcl_stairs:slab_concrete_yellow
Yellow_Concrete_Stair,,,mcl_stairs:stair_concrete_yellow,mcl_stairs:stair_concrete_yellow_inner
Yellow_Concrete_Stair,,,mcl_stairs:stair_concrete_yellow,mcl_stairs:stair_concrete_yellow
Yellow_Glazed_Terracotta,239,,mcl_colorblocks:glazed_terracotta_yellow,mcl_colorblocks:glazed_terracotta_yellow
Yellow_Shulker_Box,223,,mcl_chests:yellow_shulker_box,mcl_chests:yellow_shulker_box
Yellow_Stained_Glass,,,mcl_core:glass_yellow,xpanes:pane_yellow

1 _Name BlockID Biome Specific Mineclone2 Minetest Game
2 Acacia_Bark mcl_core:acaciatree_bark mcl_core:acaciatree_bark
3 Acacia_Bark_Slab mcl_stairs:slab_acaciatree_bark mcl_stairs:slab_acaciatree_bark
4 Acacia_Bark_Stair mcl_stairs:stair_acaciatree_bark_outer mcl_stairs:stair_acaciatree_bark mcl_stairs:stair_acaciatree_bark
5 Acacia_Button mesecons_button:button_acaciawood_off mesecons_button:button_acaciawood_off
6 Acacia_Fence 192 mcl_fences:acacia_fence default:fence_acacia_wood
7 Acacia_Fence_Gate 187 mcl_fences:acacia_fence_gate doors:gate_acacia_wood_closed
19 Allium mcl_flowers:allium mcl_flowers:allium
20 Andesite biome:node_stone mcl_core:andesite default:andesite
21 Andesite_Slab mcl_stairs:slab_andesite mcl_stairs:slab_andesite
22 Andesite_Stair mcl_stairs:stair_andesite_inner mcl_stairs:stair_andesite mcl_stairs:stair_andesite_outer mcl_stairs:stair_andesite
23 Andesite_Wall mcl_walls:andesite mcl_walls:andesite
24 Anvil 145 mcl_anvils:anvil mcl_anvils:anvil
25 Azure_Bluet_Flower_Pot mcl_flowerpots:flower_pot_azure_bluet mcl_flowerpots:flower_pot_azure_bluet
30 Bell mcl_core:bell default:bell
31 Birch_Bark mcl_core:birchtree_bark mcl_core:birchtree_bark
32 Birch_Bark_Slab mcl_stairs:slab_birchtree_bark mcl_stairs:slab_birchtree_bark
33 Birch_Bark_Stair mcl_stairs:stair_birchtree_bark mcl_stairs:stair_birchtree_bark_inner mcl_stairs:stair_birchtree_bark
34 Birch_Button mesecons_button:button_birchwood_off mesecons_button:button_birchwood_off
35 Birch_Door mcl_doors:birch_door doors:door_wood_a
36 Birch_Fence 189 mcl_fences:birch_fence default:fence_wood
49 Black_Concrete mcl_colorblocks:concrete_black mcl_colorblocks:concrete_black
50 Black_Concrete_Powder mcl_colorblocks:concrete_powder_black mcl_colorblocks:concrete_powder_black
51 Black_Concrete_Slab mcl_stairs:slab_concrete_black mcl_stairs:slab_concrete_black
52 Black_Concrete_Stair mcl_stairs:stair_concrete_black mcl_stairs:stair_concrete_black_inner mcl_stairs:stair_concrete_black
53 Black_Glazed_Terracotta 250 mcl_colorblocks:glazed_terracotta_black mcl_colorblocks:glazed_terracotta_black
54 Black_Shulker_Box 234 mcl_chests:black_shulker_box mcl_chests:black_shulker_box
55 Black_Stained_Glass mcl_core:glass_black xpanes:pane_black
61 Blue_Concrete mcl_colorblocks:concrete_blue mcl_colorblocks:concrete_blue
62 Blue_Concrete_Powder mcl_colorblocks:concrete_powder_blue mcl_colorblocks:concrete_powder_blue
63 Blue_Concrete_Slab mcl_stairs:slab_concrete_blue mcl_stairs:slab_concrete_blue
64 Blue_Concrete_Stair mcl_stairs:stair_concrete_blue mcl_stairs:stair_concrete_blue_inner mcl_stairs:stair_concrete_blue
65 Blue_Glazed_Terracotta 246 mcl_colorblocks:glazed_terracotta_blue mcl_colorblocks:glazed_terracotta_blue
66 Blue_Orchid_Flower_Pot mcl_flowerpots:flower_pot_blue_orchid mcl_flowerpots:flower_pot_blue_orchid
67 Blue_Orchid mcl_flowers:blue_orchid mcl_flowers:blue_orchid
75 Brewing_Stand 117 mcl_core:brewing_stand default:brewing_stand
76 Brick_Block 45 mcl_core:brick_block default:brick
77 Brick_Slab mcl_stairs:slab_brick_block stairs:slab_brick
78 Brick_Stair 108 mcl_stairs:stair_brick_block_inner mcl_stairs:stair_brick_block stairs:stair_brick
79 Brick_Wall mcl_walls:brick mcl_walls:brick
80 Brown_Bed mcl_beds:bed_brown_bottom mcl_beds:bed_brown_bottom
81 Brown_Carpet mcl_wool:brown_carpet mcl_wool:brown_carpet
82 Brown_Concrete mcl_colorblocks:concrete_brown mcl_colorblocks:concrete_brown
83 Brown_Concrete_Powder mcl_colorblocks:concrete_powder_brown mcl_colorblocks:concrete_powder_brown
84 Brown_Concrete_Slab mcl_stairs:slab_concrete_brown mcl_stairs:slab_concrete_brown
85 Brown_Concrete_Stair mcl_stairs:stair_concrete_brown mcl_stairs:stair_concrete_brown_inner mcl_stairs:stair_concrete_brown
86 Brown_Glazed_Terracotta 247 mcl_colorblocks:glazed_terracotta_brown mcl_colorblocks:glazed_terracotta_brown
87 Brown_Mushroom 39 mcl_mushrooms:mushroom_brown flowers:mushroom_brown
88 Brown_Mushroom_Flower_Pot mcl_flowerpots:flower_pot_mushroom_brown mcl_flowerpots:flower_pot_mushroom_brown
107 Coarse_Dirt biome:node_filler mcl_core:coarse_dirt mcl_core:coarse_dirt
108 Cobblestone 4 mcl_core:cobble default:cobble
109 Cobblestone_Slab mcl_stairs:slab_cobble stairs:slab_cobble
110 Cobblestone_Stair 67 mcl_stairs:stair_cobble_outer mcl_stairs:stair_cobble stairs:stair_cobble
111 Cobblestone_Wall 139 mcl_walls:cobble walls:cobble
112 Cobweb 30 mcl_core:cobweb default:cobweb
113 Command_Block 137 mesecons_commandblock:commandblock_off mesecons_commandblock:commandblock_off
114 Cracked_Stone_Brick_Slab mcl_stairs:slab_stonebrickcracked mcl_stairs:slab_stonebrickcracked
115 Cracked_Stone_Brick_Stair mcl_stairs:stair_stonebrickcracked mcl_stairs:stair_stonebrickcracked_inner mcl_stairs:stair_stonebrickcracked
116 Crafting_Table 58 mcl_crafting_table:crafting_table default:crafting_table
117 Creeper_Head mcl_heads:creeper mcl_heads:creeper
118 Cut_Red_Sandstone mcl_core:redsandstonesmooth mcl_core:redsandstonesmooth
121 Cyan_Concrete mcl_colorblocks:concrete_cyan mcl_colorblocks:concrete_cyan
122 Cyan_Concrete_Powder mcl_colorblocks:concrete_powder_cyan mcl_colorblocks:concrete_powder_cyan
123 Cyan_Concrete_Slab mcl_stairs:slab_concrete_cyan mcl_stairs:slab_concrete_cyan
124 Cyan_Concrete_Stair mcl_stairs:stair_concrete_cyan mcl_stairs:stair_concrete_cyan_inner mcl_stairs:stair_concrete_cyan
125 Cyan_Glazed_Terracotta 244 mcl_colorblocks:glazed_terracotta_cyan mcl_colorblocks:glazed_terracotta_cyan
126 Cyan_Shulker_Box 228 mcl_chests:cyan_shulker_box mcl_chests:cyan_shulker_box
127 Cyan_Stained_Glass mcl_core:glass_cyan xpanes:pane_cyan
133 Dark_Oak 162 mcl_core:darktree mcl_core:darktree
134 Dark_Oak_Bark mcl_core:darktree_bark mcl_core:darktree_bark
135 Dark_Oak_Bark_Slab mcl_stairs:slab_darktree_bark mcl_stairs:slab_darktree_bark
136 Dark_Oak_Bark_Stair mcl_stairs:stair_darktree_bark_outer mcl_stairs:stair_darktree_bark mcl_stairs:stair_darktree_bark
137 Dark_Oak_Button mesecons_button:button_darkwood_off mesecons_button:button_darkwood_off
138 Dark_Oak_Fence 191 mcl_fences:dark_oak_fence mcl_fences:dark_oak_fence
139 Dark_Oak_Fence_Gate 186 mcl_fences:dark_oak_fence_gate mcl_fences:dark_oak_fence_gate
146 Dark_Oak_Stair 164 mcl_stairs:stair_darkwood mcl_stairs:stair_darkwood
147 Dark_Oak_Trapdoor mcl_doors:dark_oak_trapdoor mcl_doors:dark_oak_trapdoor
148 Dark_Prismarine_Slab mcl_stairs:slab_prismarine_dark mcl_stairs:slab_prismarine_dark
149 Dark_Prismarine_Stair mcl_stairs:stair_prismarine_dark mcl_stairs:stair_prismarine_dark_inner mcl_stairs:stair_prismarine_dark
150 Daylight_Sensor 151 mesecons_solarpanel:solar_panel_on mesecons_solarpanel:solar_panel_on
151 Dead_Bush 32 mcl_core:deadbush default:dry_grass
152 Dead_Bush_Flower_Pot mcl_flowerpots:flower_pot_deadbush mcl_flowerpots:flower_pot_deadbush
156 Diamond_Ore 56 mcl_core:stone_with_diamond default:stone_with_diamond
157 Diorite mcl_core:diorite mcl_core:diorite
158 Diorite_Slab mcl_stairs:slab_diorite mcl_stairs:slab_diorite
159 Diorite_Stair mcl_stairs:stair_diorite mcl_stairs:stair_diorite_inner mcl_stairs:stair_diorite
160 Diorite_Wall mcl_walls:diorite mcl_walls:diorite
161 Dirt 3 biome:node_filler mcl_core:dirt default:dirt
162 Disabled_Hopper mcl_hoppers:hopper_disabled mcl_hoppers:hopper_disabled
234 End_Stone 121 mcl_end:end_stone mcl_end:end_stone
235 End_Stone_Brick 206 mcl_end:end_bricks mcl_end:end_bricks
236 End_Stone_Brick_Slab mcl_stairs:slab_end_bricks mcl_stairs:slab_end_bricks
237 End_Stone_Brick_Stair mcl_stairs:stair_end_bricks_inner mcl_stairs:stair_end_bricks mcl_stairs:stair_end_bricks
238 End_Stone_Brick_Wall mcl_walls:endbricks mcl_walls:endbricks
239 Eternal_Fire mcl_fire:eternal_fire mcl_fire:eternal_fire
240 Faceless_Pumpkin mcl_farming:pumpkin mcl_farming:pumpkin
255 Glowstone 89 mcl_nether:glowstone mcl_nether:glowstone
256 Gold_Block 41 mcl_core:goldblock default:goldblock
257 Gold_Block_Slab mcl_stairs:slab_goldblock stairs:slab_goldblock
258 Gold_Block_Stair mcl_stairs:stair_goldblock mcl_stairs:stair_goldblock_outer mcl_stairs:stair_goldblock
259 Gold_Ore 14 mcl_core:stone_with_gold default:stone_with_gold
260 Granite mcl_core:granite mcl_core:granite
261 Granite_Slab mcl_stairs:slab_granite mcl_stairs:slab_granite
262 Granite_Stair mcl_stairs:stair_granite_inner mcl_stairs:stair_granite mcl_stairs:stair_granite
263 Granite_Wall mcl_walls:granite mcl_walls:granite
264 Grass 31 mcl_flowers:grass default:grass
265 Grass_Block 2 biome:node_top mcl_core:dirt_with_grass default:dirt_with_grass
270 Green_Concrete mcl_colorblocks:concrete_green mcl_colorblocks:concrete_green
271 Green_Concrete_Powder mcl_colorblocks:concrete_powder_green mcl_colorblocks:concrete_powder_green
272 Green_Concrete_Slab mcl_stairs:slab_concrete_green mcl_stairs:slab_concrete_green
273 Green_Concrete_Stair mcl_stairs:stair_concrete_green mcl_stairs:stair_concrete_green_inner mcl_stairs:stair_concrete_green
274 Green_Glazed_Terracotta 248 mcl_colorblocks:glazed_terracotta_green mcl_colorblocks:glazed_terracotta_green
275 Green_Shulker_Box 232 mcl_chests:dark_green_shulker_box mcl_chests:dark_green_shulker_box
276 Green_Stained_Glass mcl_core:glass_green xpanes:pane_green
282 Grey_Concrete 251 mcl_colorblocks:concrete_grey mcl_colorblocks:concrete_grey
283 Grey_Concrete_Powder 252 mcl_colorblocks:concrete_powder_grey mcl_colorblocks:concrete_powder_grey
284 Grey_Concrete_Slab mcl_stairs:slab_concrete_grey mcl_stairs:slab_concrete_grey
285 Grey_Concrete_Stair mcl_stairs:stair_concrete_grey_inner mcl_stairs:stair_concrete_grey mcl_stairs:stair_concrete_grey_outer mcl_stairs:stair_concrete_grey
286 Grey_Glazed_Terracotta 242 mcl_colorblocks:glazed_terracotta_grey mcl_colorblocks:glazed_terracotta_grey
287 Grey_Shulker_Box 226 mcl_chests:dark_grey_shulker_box mcl_chests:dark_grey_shulker_box
288 Grey_Stained_Glass mcl_core:glass_gray xpanes:pane_gray
312 Iron_Bar 101 xpanes:bar_flat xpanes:bar_flat
313 Iron_Block 42 mcl_core:ironblock default:steelblock
314 Iron_Block_Slab mcl_stairs:slab_ironblock stairs:slab_steelblock
315 Iron_Block_Stair mcl_stairs:stair_ironblock mcl_stairs:stair_ironblock_inner mcl_stairs:stair_ironblock
316 Iron_Door 71 mcl_doors:iron_door doors:door_steel_a
317 Iron_Ore 15 mcl_core:stone_with_iron default:stone_with_iron
318 Iron_Trapdoor 167 mcl_doors:iron_trapdoor doors:trapdoor_steel_closed
321 Jukebox 84 mcl_jukebox:jukebox default:jukebox
322 Jungle_Bark mcl_core:jungletree_bark mcl_core:jungletree_bark
323 Jungle_Bark_Slab mcl_stairs:slab_jungletree_bark mcl_stairs:slab_jungletree_bark
324 Jungle_Bark_Stair mcl_stairs:stair_jungletree_bark mcl_stairs:stair_jungletree_bark_inner mcl_stairs:stair_jungletree_bark
325 Jungle_Button mesecons_button:button_junglewood_off mesecons_button:button_junglewood_off
326 Jungle_Fence 190 mcl_fences:jungle_fence default:fence_junglewood
327 Jungle_Fence_Gate 185 mcl_fences:jungle_fence_gate doors:gate_junglewood_open
338 Lapis_Lazuli_Block 22 mcl_core:lapisblock default:lapisblock
339 Lapis_Lazuli_Ore 21 mcl_core:stone_with_lapis default:stone_with_lapis
340 Lapis_Lazuli_Slab mcl_stairs:slab_lapisblock mcl_stairs:slab_lapisblock
341 Lapis_Lazuli_Stair mcl_stairs:stair_lapisblock mcl_stairs:stair_lapisblock_outer mcl_stairs:stair_lapisblock
342 Large_Fern mcl_flowers:double_fern mcl_flowers:double_fern_top
343 Lava_Source 10/11 mcl_core:lava_source default:lava_source
344 Leaves 18 mcl_core:leaves default:leaves
348 Light_Blue_Concrete mcl_colorblocks:concrete_light_blue mcl_colorblocks:concrete_light_blue
349 Light_Blue_Concrete_Powder mcl_colorblocks:concrete_powder_light_blue mcl_colorblocks:concrete_powder_light_blue
350 Light_Blue_Concrete_Slab mcl_stairs:slab_concrete_light_blue mcl_stairs:slab_concrete_light_blue
351 Light_Blue_Concrete_Stair mcl_stairs:stair_concrete_light_blue_outer mcl_stairs:stair_concrete_light_blue mcl_stairs:stair_concrete_light_blue
352 Light_Blue_Glazed_Terracotta 238 mcl_colorblocks:glazed_terracotta_light_blue mcl_colorblocks:glazed_terracotta_light_blue
353 Light_Blue_Shulker_Box 222 mcl_chests:lightblue_shulker_box mcl_chests:lightblue_shulker_box
354 Light_Blue_Stained_Glass mcl_core:glass_light_blue xpanes:pane_light_blue
360 Light_Grey_Concrete mcl_colorblocks:concrete_silver mcl_colorblocks:concrete_silver
361 Light_Grey_Concrete_Powder mcl_colorblocks:concrete_powder_silver mcl_colorblocks:concrete_powder_silver
362 Light_Grey_Concrete_Slab mcl_stairs:slab_concrete_silver mcl_stairs:slab_concrete_silver
363 Light_Grey_Concrete_Stair mcl_stairs:stair_concrete_silver mcl_stairs:stair_concrete_silver_outer mcl_stairs:stair_concrete_silver
364 Light_Grey_Glazed_Terracotta 243 mcl_colorblocks:glazed_terracotta_silver mcl_colorblocks:glazed_terracotta_silver
365 Light_Grey_Shulker_Box 227 mcl_chests:grey_shulker_box mcl_chests:grey_shulker_box
366 Light_Grey_Stained_Glass mcl_core:glass_silver xpanes:pane_silver
373 Lime_Concrete mcl_colorblocks:concrete_lime mcl_colorblocks:concrete_lime
374 Lime_Concrete_Powder mcl_colorblocks:concrete_powder_lime mcl_colorblocks:concrete_powder_lime
375 Lime_Concrete_Slab mcl_stairs:slab_concrete_lime mcl_stairs:slab_concrete_lime
376 Lime_Concrete_Stair mcl_stairs:stair_concrete_lime_outer mcl_stairs:stair_concrete_lime mcl_stairs:stair_concrete_lime
377 Lime_Glazed_Terracotta 240 mcl_colorblocks:glazed_terracotta_lime mcl_colorblocks:glazed_terracotta_lime
378 Lime_Shulker_Box 224 mcl_chests:green_shulker_box mcl_chests:green_shulker_box
379 Lime_Stained_Glass mcl_core:glass_lime xpanes:pane_lime
386 Magenta_Concrete mcl_colorblocks:concrete_magenta mcl_colorblocks:concrete_magenta
387 Magenta_Concrete_Powder mcl_colorblocks:concrete_powder_magenta mcl_colorblocks:concrete_powder_magenta
388 Magenta_Concrete_Slab mcl_stairs:slab_concrete_magenta mcl_stairs:slab_concrete_magenta
389 Magenta_Concrete_Stair mcl_stairs:stair_concrete_magenta mcl_stairs:stair_concrete_magenta_outer mcl_stairs:stair_concrete_magenta
390 Magenta_Glazed_Terracotta 237 mcl_colorblocks:glazed_terracotta_magenta mcl_colorblocks:glazed_terracotta_magenta
391 Magenta_Shulker_Box 221 mcl_chests:magenta_shulker_box mcl_chests:magenta_shulker_box
392 Magenta_Stained_Glass mcl_core:glass_magenta xpanes:pane_magenta
409 Mossy_Cobblestone_Wall mcl_walls:mossycobble walls:mossycobble
410 Mossy_Stone_Brick mcl_core:stonebrickmossy mcl_core:stonebrickmossy
411 Mossy_Stone_Brick_Slab mcl_stairs:slab_stonebrickmossy mcl_stairs:slab_stonebrickmossy
412 Mossy_Stone_Brick_Stair mcl_stairs:stair_stonebrickmossy_inner mcl_stairs:stair_stonebrickmossy mcl_stairs:stair_stonebrickmossy
413 Mossy_Stone_Brick_Wall mcl_walls:stonebrickmossy mcl_walls:stonebrickmossy
414 Mossy_Stone_Slab mcl_stairs:slab_mossycobble mcl_stairs:slab_mossycobble
415 Mossy_Stone_Stair mcl_stairs:stair_mossycobble_outer mcl_stairs:stair_mossycobble mcl_stairs:stair_mossycobble
416 Mycelium 110 biome:node_top mcl_core:mycelium mcl_core:mycelium
417 Nether_Brick_Block 112 mcl_nether:nether_brick mcl_nether:nether_brick
418 Nether_Brick_Fence 113 mcl_fences:nether_brick_fence mcl_fences:nether_brick_fence
419 Nether_Brick_Fence_Gate mclx_fences:nether_brick_fence_gate mclx_fences:nether_brick_fence_gate
420 Nether_Brick_Slab mcl_stairs:slab_nether_brick mcl_stairs:slab_nether_brick
421 Nether_Brick_Stair 114 mcl_stairs:stair_nether_brick mcl_stairs:stair_nether_brick_outer mcl_stairs:stair_nether_brick
422 Nether_Brick_Wall mcl_walls:netherbrick mcl_walls:netherbrick
423 Nether_Lava_Source mcl_nether:nether_lava_source mcl_nether:nether_lava_source
424 Nether_Portal 90 mcl_portals:portal mcl_portals:portal
429 Oak 17 mcl_core:tree default:tree
430 Oak_Bark mcl_core:tree_bark mcl_core:tree_bark
431 Oak_Bark_Slab mcl_stairs:slab_tree_bark mcl_stairs:slab_tree_bark
432 Oak_Bark_Stair mcl_stairs:stair_tree_bark_outer mcl_stairs:stair_tree_bark mcl_stairs:stair_tree_bark
433 Oak_Button 143 mesecons_button:button_wood_off mesecons_button:button_wood_off
434 Oak_Door 64 mcl_doors:wooden_door doors:door_wood_a
435 Oak_Fence_Gate 107 mcl_fences:fence_gate mcl_fences:fence_gate
453 Orange_Concrete mcl_colorblocks:concrete_orange mcl_colorblocks:concrete_orange
454 Orange_Concrete_Powder mcl_colorblocks:concrete_powder_orange mcl_colorblocks:concrete_powder_orange
455 Orange_Concrete_Slab mcl_stairs:slab_concrete_orange mcl_stairs:slab_concrete_orange
456 Orange_Concrete_Stair mcl_stairs:stair_concrete_orange_outer mcl_stairs:stair_concrete_orange mcl_stairs:stair_concrete_orange
457 Orange_Glazed_Terracotta 236 mcl_colorblocks:glazed_terracotta_orange mcl_colorblocks:glazed_terracotta_orange
458 Orange_Shulker_Box 220 mcl_chests:orange_shulker_box mcl_chests:orange_shulker_box
459 Orange_Stained_Glass mcl_core:glass_orange xpanes:pane_orange
472 Pink_Concrete mcl_colorblocks:concrete_pink mcl_colorblocks:concrete_pink
473 Pink_Concrete_Powder mcl_colorblocks:concrete_powder_pink mcl_colorblocks:concrete_powder_pink
474 Pink_Concrete_Slab mcl_stairs:slab_concrete_pink mcl_stairs:slab_concrete_pink
475 Pink_Concrete_Stair mcl_stairs:stair_concrete_pink mcl_stairs:stair_concrete_pink_inner mcl_stairs:stair_concrete_pink
476 Pink_Glazed_Terracotta 241 mcl_colorblocks:glazed_terracotta_pink mcl_colorblocks:glazed_terracotta_pink
477 Pink_Shulker_Box 225 mcl_chests:pink_shulker_box mcl_chests:pink_shulker_box
478 Pink_Stained_Glass mcl_core:glass_pink xpanes:pane_pink
485 Podzol biome:node_top mcl_core:podzol mcl_core:podzol
486 Polished_Andesite mcl_core:andesite_smooth mcl_core:andesite_smooth
487 Polished_Andesite_Slab mcl_stairs:slab_andesite_smooth mcl_stairs:slab_andesite_smooth
488 Polished_Andesite_Stair mcl_stairs:stair_andesite_smooth_inner mcl_stairs:stair_andesite_smooth mcl_stairs:stair_andesite_smooth
489 Polished_Diorite mcl_core:diorite_smooth mcl_core:diorite_smooth
490 Polished_Diorite_Slab mcl_stairs:slab_diorite_smooth mcl_stairs:slab_diorite_smooth
491 Polished_Diorite_Stair mcl_stairs:stair_diorite_smooth mcl_stairs:stair_diorite_smooth_outer mcl_stairs:stair_diorite_smooth
492 Polished_Granite mcl_core:granite_smooth mcl_core:granite_smooth
493 Polished_Granite_Slab mcl_stairs:slab_granite_smooth mcl_stairs:slab_granite_smooth
494 Polished_Granite_Stair mcl_stairs:stair_granite_smooth_inner mcl_stairs:stair_granite_smooth mcl_stairs:stair_granite_smooth_outer mcl_stairs:stair_granite_smooth
495 Polished_Stone mcl_core:stone_smooth mcl_core:stone_smooth
496 Poppy 38 mcl_flowers:poppy default:poppy
497 Poppy_Flower_Pot mcl_flowerpots:flower_pot_poppy mcl_flowerpots:flower_pot_poppy
501 Prismarine 168 mcl_ocean:prismarine default:prismarine
502 Prismarine_Brick mcl_ocean:prismarine_brick default:prismarine_brick
503 Prismarine_Brick_Slab mcl_stairs:slab_prismarine_brick mcl_stairs:slab_prismarine_brick
504 Prismarine_Brick_Stair mcl_stairs:stair_prismarine_brick_outer mcl_stairs:stair_prismarine_brick mcl_stairs:stair_prismarine_brick_inner mcl_stairs:stair_prismarine_brick
505 Prismarine_Dark mcl_ocean:prismarine_dark default:prismarine_dark
506 Prismarine_Slab mcl_stairs:slab_prismarine mcl_stairs:slab_prismarine
507 Prismarine_Stair mcl_stairs:stair_prismarine mcl_stairs:stair_prismarine_outer mcl_stairs:stair_prismarine
508 Prismarine_Wall mcl_walls:prismarine mcl_walls:prismarine
509 Pumpkin 86 mcl_farming:pumpkin_face mcl_farming:pumpkin_face
510 Purple_Bed mcl_beds:bed_purple_bottom mcl_beds:bed_purple_bottom
512 Purple_Concrete mcl_colorblocks:concrete_purple mcl_colorblocks:concrete_purple
513 Purple_Concrete_Powder mcl_colorblocks:concrete_powder_purple mcl_colorblocks:concrete_powder_purple
514 Purple_Concrete_Slab mcl_stairs:slab_concrete_purple mcl_stairs:slab_concrete_purple
515 Purple_Concrete_Stair mcl_stairs:stair_concrete_purple mcl_stairs:stair_concrete_purple_inner mcl_stairs:stair_concrete_purple
516 Purple_Glazed_Terracotta 245 mcl_colorblocks:glazed_terracotta_purple mcl_colorblocks:glazed_terracotta_purple
517 Purple_Shulker_Box 229 mcl_chests:violet_shulker_box mcl_chests:violet_shulker_box
518 Purple_Stained_Glass mcl_core:glass_purple xpanes:pane_purple
522 Purpur_Block 201 mcl_end:purpur_block mcl_end:purpur_block
523 Purpur_Pillar 202 mcl_end:purpur_pillar mcl_end:purpur_pillar
524 Purpur_Slab 205 mcl_stairs:slab_purpur_block mcl_stairs:slab_purpur_block
525 Purpur_Stair 203 mcl_stairs:stair_purpur_block_inner mcl_stairs:stair_purpur_block mcl_stairs:stair_purpur_block
526 Quartz_Block 155 mcl_nether:quartz_block mcl_nether:quartz_block
527 Quartz_Slab mcl_stairs:slab_quartzblock mcl_stairs:slab_quartzblock
528 Quartz_Stair 156 mcl_stairs:stair_quartzblock mcl_stairs:stair_quartzblock_outer mcl_stairs:stair_quartzblock
529 Rail 66 mcl_minecarts:rail carts:rail
530 Realm_Barrier mcl_core:realm_barrier mcl_core:realm_barrier
531 Red_Bed mcl_beds:bed_red_bottom mcl_beds:bed_red_bottom
533 Red_Concrete mcl_colorblocks:concrete_red mcl_colorblocks:concrete_red
534 Red_Concrete_Powder mcl_colorblocks:concrete_powder_red mcl_colorblocks:concrete_powder_red
535 Red_Concrete_Slab mcl_stairs:slab_concrete_red mcl_stairs:slab_concrete_red
536 Red_Concrete_Stair mcl_stairs:stair_concrete_red mcl_stairs:stair_concrete_red_inner mcl_stairs:stair_concrete_red
537 Red_Glazed_Terracotta 249 mcl_colorblocks:glazed_terracotta_red mcl_colorblocks:glazed_terracotta_red
538 Red_Mushroom 40 mcl_mushrooms:mushroom_red flowers:mushroom_red
539 Red_Mushroom_Flower_Pot mcl_flowerpots:flower_pot_mushroom_red mcl_flowerpots:flower_pot_mushroom_red
541 Red_Nether_Brick_Fence_Gate mclx_fences:red_nether_brick_fence_gate mclx_fences:red_nether_brick_fence_gate
542 Red_Nether_Brick_Fence mclx_fences:red_nether_brick_fence mclx_fences:red_nether_brick_fence
543 Red_Nether_Brick_Slab mcl_stairs:slab_red_nether_brick mcl_stairs:slab_red_nether_brick
544 Red_Nether_Brick_Stair mcl_stairs:stair_red_nether_brick_inner mcl_stairs:stair_red_nether_brick mcl_stairs:stair_red_nether_brick
545 Red_Nether_Brick_Wall mcl_walls:rednetherbrick mcl_walls:rednetherbrick
546 Red_Sand biome:node_riverbed mcl_core:redsand mcl_core:redsand
547 Red_Sandstone 179 mcl_core:redsandstone mcl_core:redsandstone
548 Red_Sandstone_Slab 182 mcl_stairs:slab_redsandstone mcl_stairs:slab_redsandstone
549 Red_Sandstone_Stair 180 mcl_stairs:stair_redsandstone_outer mcl_stairs:stair_redsandstone mcl_stairs:stair_redsandstone_inner mcl_stairs:stair_redsandstone
550 Red_Sandstone_Wall mcl_walls:redsandstone mcl_walls:redsandstone
551 Red_Shulker_Box 233 mcl_chests:red_shulker_box mcl_chests:red_shulker_box
552 Red_Stained_Glass mcl_core:glass_red xpanes:pane_red
574 Sandstone_Carved mcl_core:sandstonecarved default:sandstonecarved
575 Sandstone_Slab mcl_stairs:slab_sandstone stairs:slab_sandstone
576 Sandstone_Smooth mcl_core:sandstonesmooth default:sandstonesmooth
577 Sandstone_Stair 128 mcl_stairs:stair_sandstone_outer mcl_stairs:stair_sandstone stairs:stair_sandstone
578 Sandstone_Wall mcl_walls:sandstone mcl_walls:sandstone
579 Sea_Lantern 169 mcl_ocean:sea_lantern default:sea_Lantern
580 Side_Hopper mcl_hoppers:hopper_side mcl_hoppers:hopper_side
582 Slime_Block 165 mcl_core:slimeblock mcl_core:slimeblock
583 Smooth_Quartz mcl_nether:quartz_smooth mcl_nether:quartz_smooth
584 Smooth_Quartz_Slab mcl_stairs:slab_quartz_smooth mcl_stairs:slab_quartz_smooth
585 Smooth_Quartz_Stair mcl_stairs:stair_quartz_smooth_inner mcl_stairs:stair_quartz_smooth mcl_stairs:stair_quartz_smooth_outer mcl_stairs:stair_quartz_smooth
586 Smooth_Red_Sandstone mcl_core:redsandstonesmooth2 mcl_core:redsandstonesmooth2
587 Smooth_Red_Sandstone_Slab mcl_stairs:slab_redsandstonesmooth2 mcl_stairs:slab_redsandstonesmooth2
588 Smooth_Red_Sandstone_Stair mcl_stairs:stair_redsandstonesmooth2_inner mcl_stairs:stair_redsandstonesmooth2 mcl_stairs:stair_redsandstonesmooth2_outer mcl_stairs:stair_redsandstonesmooth2
589 Smooth_Sandstone mcl_core:sandstonesmooth2 mcl_core:sandstonesmooth2
590 Smooth_Sandstone_Slab mcl_stairs:slab_sandstonesmooth2 mcl_stairs:slab_sandstonesmooth2
591 Smooth_Sandstone_Stair mcl_stairs:stair_sandstonesmooth2_inner mcl_stairs:stair_sandstonesmooth2 mcl_stairs:stair_sandstonesmooth2
592 Snow_Block 80 biome:node_dust mcl_core:snowblock default:snow
593 Snow_Layer 78 mcl_core:snow_layer default:snow_layer
594 Soul_Sand 88 mcl_nether:soul_sand mcl_nether:soul_sand
595 Sponge 19 mcl_sponges:sponge default:sponge
596 Spruce_Bark mcl_core:sprucetree_bark mcl_core:sprucetree_bark
597 Spruce_Bark_Slab mcl_stairs:slab_sprucetree_bark mcl_stairs:slab_sprucetree_bark
598 Spruce_Bark_Stair mcl_stairs:stair_sprucetree_bark_outer mcl_stairs:stair_sprucetree_bark mcl_stairs:stair_sprucetree_bark_inner mcl_stairs:stair_sprucetree_bark
599 Spruce_Button mesecons_button:button_sprucewood_off mesecons_button:button_sprucewood_off
600 Spruce_Fence 188 mcl_fences:spruce_fence default:spruce_fence
601 Spruce_Fence_Gate 183 mcl_fences:spruce_fence_gate mcl_fences:spruce_fence_gate
602 Spruce_Leaves mcl_core:spruceleaves mcl_core:spruceleaves
603 Spruce Spruce_Log mcl_core:sprucetree mcl_core:sprucetree
604 Spruce mcl_core:sprucewood mcl_core:sprucewood
605 Spruce_Pressure_Plate mesecons_pressureplates:pressure_plate_sprucewood_on mesecons_pressureplates:pressure_plate_sprucewood_off
606 Spruce_Sapling_Flower_Pot mcl_flowerpots:flower_pot_sprucesapling mcl_flowerpots:flower_pot_sprucesapling
607 Spruce_Sapling mcl_core:sprucesapling mcl_core:sprucesapling
616 Stone_Brick_Cracked mcl_core:stonebrickcracked default:stonebrickcracked
617 Stone_Brick_Slab 43 mcl_stairs:slab_stonebrick stairs:slab_stonebrick
618 Stone_Brick_Stair 109 mcl_stairs:stair_stonebrick stairs:stair_stonebrick
619 Stone_Brick_Stair mcl_stairs:stair_stonebrick_outer mcl_stairs:stair_stonebrick mcl_stairs:stair_stonebrick_inner mcl_stairs:stair_stonebrick
620 Stone_Brick_Wall mcl_walls:stonebrick default:wall_stonebrick
621 Stone_Button 77 mesecons_button:button_stone_off mesecons_button:button_stone_off
622 Stone_Pressure_Plate 70 mesecons_pressureplates:pressure_plate_stone_off mesecons_pressureplates:pressure_plate_stone_off
640 White_Concrete mcl_colorblocks:concrete_white mcl_colorblocks:concrete_white
641 White_Concrete_Powder mcl_colorblocks:concrete_powder_white mcl_colorblocks:concrete_powder_white
642 White_Concrete_Slab mcl_stairs:slab_concrete_white mcl_stairs:slab_concrete_white
643 White_Concrete_Stair mcl_stairs:stair_concrete_white mcl_stairs:stair_concrete_white_inner mcl_stairs:stair_concrete_white
644 White_Glass_Pane 102 xpanes:pane_white xpanes:pane_white
645 White_Glazed_Terracotta 235 mcl_colorblocks:glazed_terracotta_white mcl_colorblocks:glazed_terracotta_white
646 White_Shulker_Box 219 mcl_chests:white_shulker_box mcl_chests:white_shulker_box
656 Yellow_Concrete mcl_colorblocks:concrete_yellow mcl_colorblocks:concrete_yellow
657 Yellow_Concrete_Powder mcl_colorblocks:concrete_powder_yellow mcl_colorblocks:concrete_powder_yellow
658 Yellow_Concrete_Slab mcl_stairs:slab_concrete_yellow mcl_stairs:slab_concrete_yellow
659 Yellow_Concrete_Stair mcl_stairs:stair_concrete_yellow mcl_stairs:stair_concrete_yellow_inner mcl_stairs:stair_concrete_yellow
660 Yellow_Glazed_Terracotta 239 mcl_colorblocks:glazed_terracotta_yellow mcl_colorblocks:glazed_terracotta_yellow
661 Yellow_Shulker_Box 223 mcl_chests:yellow_shulker_box mcl_chests:yellow_shulker_box
662 Yellow_Stained_Glass mcl_core:glass_yellow xpanes:pane_yellow

View File

@ -21,15 +21,14 @@ All values are stored in __BIG endian__ format.
| Offset | Length | Description |
|--------:|-------:|------------------------------------------|
| 0 | 4 | magic "MTSM" |
| 4 | 2 | file format version, currently 3 or 4 |
| 4 | 2 | file format version, currently 4 |
| 6 | 2 | size X |
| 8 | 2 | size Y |
| 10 | 2 | size Z |
| 12 | Y | layer probability values, only if ver 4 |
| 12 | Y | layer probability values |
| 12/12+Y | 2 | number of strings in Name-ID table |
Layer probability values: an unsigned char for each layer, bit 7 is reserved and must be zero, meaning 0x1F maps to 100%. This
block only exists if the file version is 4 and not 3.
Layer probability values: an unsigned char for each layer, bit 7 is reserved and must be zero, meaning 0x1F maps to 100%.
The header is followed by the Name-ID Table, which is followed by the Block Definitons section.
@ -59,13 +58,15 @@ the format is as follows:
| 2*X*Y*Z | X*Y*Z | probability values (param1) |
| 3*X*Y*Z | X*Y*Z | rotation info (param2) |
To get the block ID from `param0` for a given coordinate (x,y,z), you should calculate the index param0\[z*Z*Y + y*X + x\].
Each block ID is stored on a big endian 2 bytes, although I haven't seen any MTS files yet that used more than 255 block types
per file. Also most files store "air" block type in the first type (block ID being 0), but this is not mandatory unfortunately.
To get the block ID from `param0` for a given coordinate (x,y,z), you should calculate the index param0\[(Z-z)*Z*Y + y*X + x\].
That is right, Z axis is mirrored for some reason unknown to me. Each block ID is stored on a big endian 2 bytes, although I
haven't seen any MTS files yet that used more than 255 block types per file. Also most files store "air" block type in the first
type (block ID being 0), but this is not mandatory unfortunately.
Orientation is NOT defined in any way, there's absolutely no convention. MTSEdit however prefers to save schematics in a
standardized way, that is, the entrance is on the South side. You can use the "Change Oriantation" icon in the editor to
set that right before you save. In the editor's isometric view, South is on the bottom left corner.
set that right before you save. In the editor's isometric view, South is on the bottom left corner, and North is on the top
right. This aligns with the Lua API place_schematics(rotation=0).
Probability values in `param1` are encoded on 8-bits. They are indexed the same way as block IDs. Version 3 ranges from 0 to 0xFF,
while version 4 uses the same values as for layer probability, from 0 to 0x7F. According to the spec, in version 4 bit 7 means node

View File

@ -66,6 +66,7 @@ Main editor window:
| <kbd>Shift</kbd> + <kbd>S</kbd> | open save as window |
| <kbd>P</kbd> | save preview PNG |
| <kbd>Shift</kbd> + <kbd>P</kbd> | save preview with structure cut in half |
| <kbd>F</kbd> | flip the entire structure along the Z axis |
| <kbd>R</kbd> | change orientation, rotate entire structure CCW |
| <kbd>Shift</kbd> + <kbd>R</kbd> | change orientation, rotate entire structure CW |
| <kbd>M</kbd> / <kbd>Tab</kbd> | open block map, search all available blocks |

View File

@ -1,33 +1,86 @@
MTSEdit Minetest Mod
====================
This is a little mod that adds the "mtseditexport" chat command to Minetest. With that, you can generate the
This is a little mod that connects MTSEdit to Minetest. With the "/mtsedit" chat command, you can generate the
[blocks.csv](https://gitlab.com/bztsrc/mtsedit/blob/master/docs/blocks.md), which is used to correlate block types
between different games.
between different Minetest games and Minecraft.
You can also save and MTS files from your world, but most importantly, you can load the MTS files that you edited with MTSEdit.
Installation
------------
Just copy this directory to you Minetest mod directory, for example "~/.minetest/mods".
Just copy this directory to your Minetest mod directory, for example "~/.minetest/mods".
### Dependencies
None. This mod works on its own, has absolutely zero dependency.
__IMPORTANT__: the Lua API can't access files outside of the world directory, so you have to copy your existing blocks.csv
there (on Linux "~/.minetest/worlds/(world name)"), run the chat command, then copy the result back to /usr/share/mtsedit.
Likewise, you have to place your schematic files under "(world directory)/schems/".
Usage
-----
Enable the mod. It does not depend on any other mods, not even on default, so that you can use it with any games. Start
your world, then go to the chat (probably <kbd>F10</kbd>). In the chat window issue the following command
Enable the mod. It does not depend on any game mods, so that you can use it with all games. Start your world, then go to
the chat (probably <kbd>F10</kbd> if you haven't changed the shortcut).
Type
```
/mtsedit
```
or
```
/mtsedit help
```
to get help. When you first issue this command, it will give you a "MTSEdit Magic Placement Wand Tool" (TM) :-)
### Exporting node data for MTSEdit
In the chat window issue the following command
```
/mtseditexport Minetest Game
/mtsedit export Minetest Game
```
Where the argument is one of the coloumns in block.csv, so called node palette. If the csv exists, then this mod will read
it, and it will only update one coloumn. If the file does not exists, then it will be created. If it exists, but there's
no such coloumn as specified in the argument, then a new palette will be created.
The Lua script tries to figure out which node is which, but because you can enable lots of mods in Minetest, each allowed to
register it's own node types, that's not an easy task. It does a pretty decent job though, usually about 80% of the records
is correct, and only 20% percent requires manual fixing. For Mineclone2, I've provided an almost entirely complete blocks.csv,
which also contains the Minecraft NBT .schematic files Block IDs.
The Lua script tries to figure out which node is which, but because you can enable lots of mods in Minetest (each allowed to
register it's own node types), that's not an easy task. It does a pretty decent job though, usually about 80% of the records
are correct, and only 20% percent requires manual fixing. For Mineclone2, I've provided an almost entirely complete blocks.csv,
which also contains the Minecraft NBT .schematic files' Block IDs.
### Importing MTS files
For that, enter chat and issue
```
/mtsedit load (file name)
```
Exit chat (with <kbd>Esc</kbd>) and use the mtsedit wand with right clicking on a node where you want to build the structure.
That's all. Depending on which direction you're looking at your punched node, the structure's orientation will change. You can
repeat this right click as many times as you want. The same structure will be placed until you issue another "/mtsedit load"
command.
To help you with the files,
```
/mtsedit list
```
will list the contents of your world directory's "schems" sub-dir.
### Exporting MTS files
First, select one corner of the area that you want to save. Left click on that node with the mtsedit wand. Then go to the
opposite corner of the area (you probably want to fly priv), and left click on the air (without selecting any particular nodes).
A green selection cube will appear arround the area. You can modify it as many times as you'd like. When you're satisfied, go
to the chat window, and
```
/mtsedit save (file name)
```
will save that area into an MTS file. After that you can open it with MTSEdit outside of the game.
__IMPORTANT__: the Lua API can't access files outside of the world directory, so you have to copy your existing blocks.csv
there (on Linux "~/.minetest/worlds/(world name)"), run the chat command, then copy the result back to /usr/share/mtsedit.

View File

@ -1,14 +1,11 @@
# Minetest mod: mtsedit
## Description
This will add some chat commands (“mtseditexport” and “mtseditimgs”) to
export data to MTSEdit. The first reads in (world folder)/blocks.csv, adds a
This will add chat commands (“mtsedit”) to export data to MTSEdit and import
MTS files into the world. The first reads in (world folder)/blocks.csv, adds a
coloumn to it then saves it back. If the file do not exists, it will be created.
Then you can use this blocks.csv with MTSEdit. The second simply writes
(world folder)/blockimgs.csv with node texture information.
This does not load or save MTS files; for that, I'd suggest Sokomine's excelent
handle_schematics mod, or you can try the bit more complex worldedit mod.
Then you can use this blocks.csv with MTSEdit. The import reads in MTS files from
the (world folder)/schems/ directory, which you can place with a placement tool.
Version: 1.0.0

View File

@ -23,16 +23,18 @@
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-- DEALINGS IN THE SOFTWARE.
--
-- @brief Minetest mod that exports data/blocks.csv
-- @brief Minetest mod that adds support for exporting node spec to MTSEDit and import MTS files
-- https://gitlab.com/bztsrc/mtsedit
--
local S = minetest.get_translator("mtsedit")
mtsedit = { loadstat = {}, savestat = {} }
-- translations for some common Minetest nodes to Minecraft names as used by MTSEdit
-- both technical names and human readable names can be used as key, but spaces must
-- be converted to underscores '_' in the latter. Otherwise exact match expected.
local translate = {
mtsedit.translate = {
["Air"] = "",
["Cave_Ice"] = "Packed_Ice",
["Lily_Pad"] = "Waterlily",
@ -45,9 +47,9 @@ local translate = {
["Slab_of_Iron"] = "Iron_Block_Slab"
}
-- these will be substituted in names
local replacements = {
["_Tree"] = "",
mtsedit.replacements = {
["_Wood"] = "",
["_Tree"] = "_Log",
["_Bars"] = "_Bar",
["_Bricks"] = "_Brick",
["_Stairs"] = "_Stair",
@ -60,12 +62,13 @@ local replacements = {
["Moss_"] = "Mossy_",
["Mese_"] = "Redstone_"
}
local replacements2 = {
mtsedit.replacements2 = {
["Block_of_"] = "_Block",
["Slab_of_"] = "_Slab",
["Stair_of_"] = "_Stair",
["Stairs_of_"] = "_Stair"
}
-- helper function to parse a CSV line into table
local function parsecsv(line)
local csv = {}
@ -106,8 +109,8 @@ end
-- helper to generate a block id name
local function getblockid(name, str)
-- if there's a known translation for the technical name
if (translate[name] ~= nil) then return translate[name] end
local blockid = string.gsub(string.sub(str, "'", "_"), " ", "_")
if (mtsedit.translate[name] ~= nil) then return mtsedit.translate[name] end
local blockid = string.gsub(string.gsub(str, "'", "_"), " ", "_")
-- cut off that I don't know what part
if string.sub(blockid,1,1) == "\27" then
local start2p,end2p = string.find(blockid,"\27",2)
@ -116,180 +119,311 @@ local function getblockid(name, str)
blockid = string.sub(blockid,start1p+1,start2p-1)
end
-- if there's a translation for the name
if (translate[blockid] ~= nil) then blockid = translate[blockid] end
for from,to in pairs(replacements2) do
if (mtsedit.translate[blockid] ~= nil) then blockid = mtsedit.translate[blockid] end
for from,to in pairs(mtsedit.replacements2) do
if (string.sub(blockid,1,string.len(from)) == from) then
blockid = string.sub(blockid, string.len(from)+1)..to
end
end
for from,to in pairs(replacements) do blockid = string.gsub(blockid, from, to) end
for from,to in pairs(mtsedit.replacements) do blockid = string.gsub(blockid, from, to) end
return blockid
end
-- Register chat commands
do
minetest.register_chatcommand("mtseditexport", {
description = S("Export node data to <palette> column of \"(world directory)/blocks.csv\""),
params = S("<palette>"),
func = function(name, param)
if param == nil or param == "" then return false, S("Specify <palette> (like \"Mineclone2\", \"Minetest Game\" etc.)") end
-- Export node data into CSV
function mtsedit.export(param)
minetest.chat_send_player(name, "mtseditEXP: " .. param)
if param == nil or param == "" then
return false, S("Specify <palette> (like \"Mineclone2\", \"Minetest Game\" etc.)")
end
local fn = minetest.get_worldpath() .. "/blocks.csv"
local defpalettes = { "_Name", "BlockID", "Biome Specific", param }
local palettes = {}
local nodes = {}
local known = {}
local s = {}
local line
local fn = minetest.get_worldpath() .. "/blocks.csv"
local defpalettes = { "_Name", "BlockID", "Biome Specific", param }
local palettes, nodes, known, s = {}, {}, {}, {}
local line, node, i, cnt, idx = 0, "", 0, 1, 0
-- read in csv if exists
local file,err = io.open(fn, "r")
if file == nil or err then
palettes = defpalettes
file = nil
else
palettes = parsecsv(file:read())
if palettes == nil then
palettes = defpalettes
end
end
for i,t in ipairs(palettes) do if (cnt > 3 and t == param) then idx = i end cnt = cnt + 1 end
if (idx == 0) then
table.insert(palettes, param)
idx = cnt
end
idx = idx - 1
cnt = cnt - 1
if (file ~= nil) then
while true do
local node
local i
local cnt = 1
local idx = 0
line = parsecsv(file:read())
if (line == nil) then break end
node = string.gsub(string.gsub(table.remove(line, 1), "'", "_"), " ", "_")
nodes[node] = line
if (line[idx] ~= nil) then known[line[idx]] = node end
end
file:close()
end
-- read in csv if exists
local file,err = io.open(fn, "r")
if file == nil or err then
palettes = defpalettes
file = nil
-- add nodes which are defined in this game (nodes defined in enabled mods included)
for node,t in pairs(minetest.registered_nodes) do
local blockid
if (known[node] ~= nil) then
blockid = known[node]
else
blockid = getblockid(node, t["description"])
end
if (blockid ~= nil and blockid ~= "") then
-- if new node
if (nodes[blockid] == nil) then
i = 3
nodes[blockid] = { "", "" }
while (i < cnt) do table.insert(nodes[blockid], node) i = i + 1 end
end
-- if no biome specific name given already check if there's one
if (node ~= "air" and node ~= "ignore" and t["drawtype"] ~= "airlike" and
(nodes[blockid][2] == nil or nodes[blockid][2] == "")) then
for name,biome in pairs(minetest.registered_biomes) do
for propname,propval in pairs(biome) do
if (string.sub(propname,1,5) == "node_" and propval == node) then
nodes[blockid][2] = "biome:"..propname
break
end
end
end
end
-- replace block names
i = 3
while (i < cnt) do
if (i == idx or nodes[blockid][i] == nil or nodes[blockid][i] == "") then nodes[blockid][i] = node end
i = i + 1
end
end
end
-- write out updated blocks.csv
file,err = io.open(fn, "wb")
if (file == nil or err) then return false, S("Unable to write @1", fn) end
for i,t in ipairs(palettes) do
local start1p,end1p = string.find(t,",")
local start2p,end2p = string.find(t,'"')
if (i > 1) then file:write(",") end
if (start1p or start2p) then
file:write(string.format("%q", t))
else
file:write(t)
end
end
file:write("\r\n")
for node,t in pairs(nodes) do table.insert(s, node) end
table.sort(s)
for _,node in ipairs(s) do
local start1p,end1p = string.find(node,",")
local start2p,end2p = string.find(node,'"')
if (start1p or start2p) then
file:write(string.format("%q", node))
else
file:write(node)
end
for _,n in ipairs(nodes[node]) do
local startp,endp = string.find(n,",")
if (startp) then
file:write(","..string.format("%q", n))
else
palettes = parsecsv(file:read())
if palettes == nil then
palettes = defpalettes
end
end
for i,t in ipairs(palettes) do if (cnt > 3 and t == param) then idx = i end cnt = cnt + 1 end
if (idx == 0) then
table.insert(palettes, param)
idx = cnt
end
idx = idx - 1
cnt = cnt - 1
if (file ~= nil) then
while true do
local node
line = parsecsv(file:read())
if (line == nil) then break end
node = string.gsub(string.gsub(table.remove(line, 1), "'", "_"), " ", "_")
nodes[node] = line
if (line[idx] ~= nil) then known[line[idx]] = node end
end
file:close()
file:write(","..n)
end
end
file:write("\r\n")
end
file:close()
return true, S("@1 saved.", fn)
end
-- add nodes which are defined in this game (nodes defined in enabled mods included)
for node,t in pairs(minetest.registered_nodes) do
local blockid
if (known[node] ~= nil) then
blockid = known[node]
else
blockid = getblockid(node, t["description"])
end
if (blockid ~= nil and blockid ~= "") then
-- if new node
if (nodes[blockid] == nil) then
i = 3
nodes[blockid] = { "", "" }
while (i < cnt) do table.insert(nodes[blockid], node) i = i + 1 end
end
-- if no biome specific name given already check if there's one
if (node ~= "air" and t["drawtype"] ~= "airlike" and (nodes[blockid][2] == nil or nodes[blockid][2] == "")) then
for name,biome in pairs(minetest.registered_biomes) do
for propname,propval in pairs(biome) do
if (string.sub(propname,1,5) == "node_" and propval == node) then
nodes[blockid][2] = "biome:"..propname
break
end
end
end
end
-- replace block names
i = 3
while (i < cnt) do
if (i == idx or nodes[blockid][i] == nil or nodes[blockid][i] == "") then
nodes[blockid][i] = node
end
i = i + 1
end
end
-- Export node textures data
function mtsedit.imgs()
local fn = minetest.get_worldpath() .. "/blockimgs.csv"
local file,err = io.open(fn, "wb")
if err then return false, S("Unable to write @1", fn) end
-- write out blockimgs.csv
for node,t in pairs(minetest.registered_nodes) do
local blockid = getblockid(node, t["description"])
if (blockid ~= nil and blockid ~= "" and t["tiles"] ~= nil) then
file:write(string.format("%q", blockid)..","..string.format("%q", node))
if (t["drawtype"] == nil) then
file:write(",normal")
else
file:write(","..t["drawtype"])
end
-- write out updated blocks.csv
file,err = io.open(fn, "wb")
if (file == nil or err) then return false, S("Unable to write @1", fn) end
for i,t in ipairs(palettes) do
local start1p,end1p = string.find(t,",")
local start2p,end2p = string.find(t,'"')
if (i > 1) then file:write(",") end
if (start1p or start2p) then
file:write(string.format("%q", t))
else
file:write(t)
end
if (t["mod_origin"] == nil or t["mod_origin"] == "") then
file:write(",")
else
file:write(","..string.format("%q", minetest.get_modpath(t["mod_origin"])..""))
end
if (type(t["tiles"]) == "table") then
for _,tile in pairs(t["tiles"]) do
if (type(tile) == "table") then
file:write(","..string.format("%q", table.concat(tile,",")))
else
file:write(","..string.format("%q", tile..""))
end
end
else
file:write(","..string.format("%q", t["tiles"]..""))
end
file:write("\r\n")
for node,t in pairs(nodes) do table.insert(s, node) end
table.sort(s)
for _,node in ipairs(s) do
local start1p,end1p = string.find(node,",")
local start2p,end2p = string.find(node,'"')
if (start1p or start2p) then
file:write(string.format("%q", node))
else
file:write(node)
end
for _,n in ipairs(nodes[node]) do
local startp,endp = string.find(n,",")
if (startp) then
file:write(","..string.format("%q", n))
else
file:write(","..n)
end
end
file:write("\r\n")
end
file:close()
return true, S("@1 saved.", fn)
end,
})
minetest.register_chatcommand("mtseditimgs", {
description = S("Export node texture data to \"(world directory)/blockimgs.csv\""),
params = "",
func = function(name, param)
local fn = minetest.get_worldpath() .. "/blockimgs.csv"
local file,err = io.open(fn, "wb")
if err then return false, S("Unable to write @1", fn) end
-- write out blockimgs.csv
for node,t in pairs(minetest.registered_nodes) do
local blockid = getblockid(node, t["description"])
if (blockid ~= nil and blockid ~= "" and t["tiles"] ~= nil) then
file:write(string.format("%q", blockid)..","..string.format("%q", node))
if (t["drawtype"] == nil) then
file:write(",normal")
else
file:write(","..t["drawtype"])
end
if (t["mod_origin"] == nil or t["mod_origin"] == "") then
file:write(",")
else
file:write(","..string.format("%q", minetest.get_modpath(t["mod_origin"])..""))
end
if (type(t["tiles"]) == "table") then
for _,tile in pairs(t["tiles"]) do
if (type(tile) == "table") then
file:write(","..string.format("%q", table.concat(tile,",")))
else
file:write(","..string.format("%q", tile..""))
end
end
else
file:write(","..string.format("%q", t["tiles"]..""))
end
file:write("\r\n")
end
end
file:close()
return true, S("@1 saved.", fn)
end,
})
end
end
file:close()
return true, S("@1 saved.", fn)
end
-- Load schematics into the World
function mtsedit.load(name, param)
if param == nil or param == "" then
return false, S("Specify <schematic> file")
end
-- do not let the user use the parent directory reference in the filename
local fn = minetest.get_worldpath() .. "/schems/" .. param .. ".mts"
local magic, x, z
if param:find("^[%w%s%^&'@{}%[%],%$=!%-#%(%)%%%.%+~_]+$") then
local file,err = io.open(fn, "rb")
if file ~= nil and err == nil then
magic = file:read(12)
file:close()
-- Fck Lua, string.unpack crashes Minetest
x = string.byte(string.sub(magic, 8, 8)) + string.byte(string.sub(magic, 7, 7)) * 256
z = string.byte(string.sub(magic, 12, 12)) + string.byte(string.sub(magic, 11, 11)) * 256
end
end
if magic == nil or string.sub(magic, 1, 4) ~= "MTSM" then return false, S("Failed to load @1", fn) end
mtsedit.loadstat[name] = { fn, x, z }
return true, S("Schematic loaded, use right click with the placement tool in your inventory")
end
-- List available schematic files
function mtsedit.list(name)
local path = minetest.get_worldpath() .. "/schems/"
local list = minetest.get_dir_list(path, false)
minetest.chat_send_player(name, "mtsedit: *.mts; PATH=" .. path)
for i,n in pairs(list) do
local l = string.len(n) - 4
if string.sub(n, l+1) == ".mts" then minetest.chat_send_player(name, " " .. string.sub(n, 1, l)) end
end
end
-- Save selected area into schematic file
function mtsedit.save(name, param)
if param == nil or param == "" then
return false, S("Specify <schematic> file")
end
if mtsedit.savestat[name] == nil then
return false, S("Select an area first by left clicking with the placement tool")
end
mtsedit.savestat[name][1]:remove()
mtsedit.savestat[name][1] = nil
local fn = minetest.get_worldpath() .. "/schems/" .. param .. ".mts"
if param:find("^[%w%s%^&'@{}%[%],%$=!%-#%(%)%%%.%+~_]+$") and minetest.create_schematic(mtsedit.savestat[name][2], mtsedit.savestat[name][3], nil, fn) ~= nil then
minetest.chat_send_player(name, "mtsedit: " .. S("Area") .. " " .. minetest.pos_to_string(mtsedit.savestat[name][2]).. " - " .. minetest.pos_to_string(mtsedit.savestat[name][3]))
return true, S("@1 saved.", fn)
end
return false, S("Unable to write @1", fn)
end
-- Register selected area marker
minetest.register_entity(":mtsedit:selection", {
initial_properties = {
visual = "cube",
visual_size = {x=1.3, y=1.3, z=1.3},
textures = {"mtsedit_select.png", "mtsedit_select.png", "mtsedit_select.png",
"mtsedit_select.png", "mtsedit_select.png", "mtsedit_select.png"},
physical = false,
use_texture_alpha = true,
backface_culling = false,
static_save = false,
glow = 0.5
},
})
-- Register placement tool
minetest.register_tool("mtsedit:place", {
description = S("Place the loaded structure"),
inventory_image = "mtsedit_place.png",
range = 8.0,
on_use = function(itemstack, user, pointed_thing)
local name = user:get_player_name()
local pos = user:get_pos()
pos.x, pos.y, pos.z = math.floor(pos.x + 0.5), math.floor(pos.y + 0.5), math.floor(pos.z + 0.5)
if pointed_thing.type == "node" or mtsedit.savestat[name] == nil then
if pointed_thing.type == "node" then pos = pointed_thing.under end
if mtsedit.savestat[name] ~= nil then mtsedit.savestat[name][1]:remove() end
mtsedit.savestat[name] = { minetest.add_entity(pointed_thing.under, "mtsedit:selection"), pos }
elseif mtsedit.savestat[name] ~= nil then
local p1, p2, mp = {}, {}, mtsedit.savestat[name][2]
p1 = { x = math.min(mp.x, pos.x), y = math.min(mp.y, pos.y), z = math.min(mp.z, pos.z) }
p2 = { x = math.max(mp.x, pos.x), y = math.max(mp.y, pos.y), z = math.max(mp.z, pos.z) }
mp = { x = math.floor((1 + p2.x - p1.x) / 2) + p1.x, y = math.floor((1 + p2.y - p1.y) / 2) + p1.y, z = math.floor((1 + p2.z - p1.z) / 2) + p1.z}
mtsedit.savestat[name][1]:set_pos(mp)
mtsedit.savestat[name][1]:set_properties({visual_size={x=p2.x-p1.x, y=p2.y-p1.y, z=p2.z-p1.z}})
mtsedit.savestat[name][3] = pos
end
return nil
end,
on_place = function(itemstack, user, pointed_thing)
local name = user:get_player_name()
if pointed_thing.type == "node" then
if mtsedit.loadstat[name] ~= nil then
local pos, dir, st = pointed_thing.above, user:get_look_dir(), mtsedit.loadstat[name]
local d, r, x, z = "z", 0, math.abs(dir.x), math.abs(dir.z)
if x > z then
if dir.x > 0 then r = 90 else r = 270; pos.x = pos.x - st[2] end
else
if dir.z < 0 then r = 180; pos.z = pos.z - st[3]; end; d = "x"
end
if minetest.place_schematic(pos, st[1], r, {}, true, {["place_center_"..d] = true}) == nil then
minetest.chat_send_player(name, "mtsedit: " .. S("Failed to place the schematic @1", fn))
end
else
minetest.chat_send_player(name, "mtsedit: " .. S("First use the \"/mtsedit load\" chat command to load a schematic"))
end
end
end,
})
-- Register chat commands
minetest.register_chatcommand("mtsedit", {
description = S("Load and save MTS files easily or export MTSEdit block data"),
params = S("[load|list|save|export|imgs|help] [file]"),
func = function(name, param)
-- give placement tool
local structitem = ItemStack("mtsedit:place")
local inv = minetest.get_inventory({type="player",name=name})
if not inv:contains_item("main", "mtsedit:place") and not inv:contains_item("hand", "mtsedit:place") then
local left = inv:add_item("hand", structitem)
if not left:is_empty() then left = inv:add_item("main", left) end
end
-- parse arguments
if param == nil or param == "" or param == "help" then
minetest.chat_send_player(name, " /mtsedit load <mts> - " .. S("Load an MTS file from \"(world directory)/schems/<schematic>.mts\" into the world"))
minetest.chat_send_player(name, " /mtsedit list - " .. S("Show available schematic files"))
minetest.chat_send_player(name, " /mtsedit save <mts> - " .. S("Save the selected area into an MTS file"))
minetest.chat_send_player(name, " /mtsedit export <palette> - " .. S("Export node data to <palette> column of \"(world directory)/blocks.csv\""))
minetest.chat_send_player(name, " /mtsedit imgs - " .. S("Export node texture data to \"(world directory)/blockimgs.csv\""))
else
local startp,endp = string.find(param .. " ", " ", 3)
local arg = string.sub(param, startp+1)
if string.sub(param, 1, 4) == "load" then return mtsedit.load(name, arg)
elseif string.sub(param, 1, 4) == "list" then return mtsedit.list(name)
elseif string.sub(param, 1, 4) == "save" then return mtsedit.save(name, arg)
elseif string.sub(param, 1, 6) == "export" then return mtsedit.export(arg)
elseif string.sub(param, 1, 4) == "imgs" then return mtsedit.imgs()
else return false, S("Unknown mtsedit command") end
end
return false, ""
end,
})

View File

@ -1,7 +1,19 @@
# textdomain: mtsedit
Load and save MTS files easily or export MTSEdit block data=
[load|export|imgs|help] [file]=
Load an MTS file from "(world directory)/schems/<schematic>.mts" into the world=
Show available schematic files=
Save the selected area into an MTS file=
Export node data to <palette> column of "(world directory)/blocks.csv"=
<palette>=
Export node texture data to "(world directory)/blockimgs.csv"=
Unknown mtsedit command=
Specify <palette> (like "Mineclone2", "Minetest Game" etc.)=
Unable to write @1=
@1 saved.=
Export node texture data to "(world directory)/blockimgs.csv"=
Specify <schematic> file=
Failed to load @1=
Schematic loaded, use the placement tool in your inventory=
Failed to place the schematic @1=
First use the "/mtsedit load" chat command to load a schematic=
Select an area first by left clicking with the placement tool
Area=

View File

@ -1,6 +1,5 @@
name=mtsedit
description=Add commands to export data to MTSEdit
optional_depends=handle_schematics
description=Add commands to export data to MTSEdit and import MTS files
release = 1000
title = MTSEdit Export
title = MTSEdit
author = bzt

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 B

View File

@ -239,10 +239,10 @@ void parseblocks()
blocks[j].img[k] = (unsigned char*)stbi__png_load(&sc, &w, &h, &l, 0, &ri);
if(blocks[j].img[k]) {
l++;
if(!dx || !dz) {
if(!dx || !dz || !memcmp(blocks[j].name, "Cobblestone", 12)) {
detcube(32, 32, blocks[j].img[k]);
dx = x1 - x0;
dz = y1 - y0 + 1;
dz = y1 - y0;
}
}
free(img);

View File

@ -64,7 +64,7 @@
#define MAXPATHLEN 1024
#endif
#define HISTORYMAX 128
#define HISTORYMAX 1024
#ifdef __WIN32__
extern char binary_icons_png_start;
@ -164,9 +164,10 @@ void schem_load(unsigned char *data, unsigned int size);
void mts_load(unsigned char *data, unsigned int size);
int mts_save();
int mts_view(int type);
int mts_dump();
void mts_layerprob(int diff);
void mts_rotate(int ccw);
void mts_flip();
int mts_dump();
/* sdl.c */
void sdlprint(int x, int y, int fg, int bg, char *s);

View File

@ -51,12 +51,12 @@ int mix = 255, max = 0, miy = 255, may = 0, miz = 255, maz = 0;
*/
int mts_getbounds(int sanitize, unsigned short *tr, unsigned short *tr2)
{
int x, y, z, j, k;
int x, y, z, j;
/* get boundind box and block ID translation tables, sanitize probability values */
j = 1; mix = 255; max = 0; miy = 255; may = 0; miz = 255; maz = 0;
for(y = 0; y < 256; y++) {
for(z = k = 0; z < 256; z++)
for(z = 0; z < 256; z++)
for(x = 0; x < 256; x++) {
if(nodes[y][z][x].param0) {
if(tr && tr2 && !tr2[nodes[y][z][x].param0]) {
@ -69,16 +69,14 @@ int mts_getbounds(int sanitize, unsigned short *tr, unsigned short *tr2)
if(y > may) may = y;
if(z < miz) miz = z;
if(z > maz) maz = z;
if(sanitize) {
if(!nodes[y][z][x].param1) nodes[y][z][x].param1 = 127;
if(!layerprob[y]) layerprob[y] = 127;
k = 1;
}
} else if(sanitize)
nodes[y][z][x].param1 = 0;
if(sanitize && !nodes[y][z][x].param1) nodes[y][z][x].param1 = 127;
} else
if(sanitize) nodes[y][z][x].param1 = 0;
}
if(sanitize && !k) layerprob[y] = 0;
}
if(sanitize)
for(y = miy; y <= may; y++)
if(!layerprob[y]) layerprob[y] = 127;
return j;
}
@ -144,17 +142,17 @@ void mts_load(unsigned char *data, unsigned int size)
for(z = 0, b = buff; z < mts_z; z++)
for(y = 0; y < mts_y; y++)
for(x = 0; x < mts_x; x++, b += 2) {
nodes[y+min_y][z+min_z][x+min_x].param0 = tr[(b[0] << 8) | b[1]];
blocks[nodes[y+min_y][z+min_z][x+min_x].param0].numref++;
nodes[y+min_y][mts_z+min_z-z][x+min_x].param0 = tr[(b[0] << 8) | b[1]];
blocks[nodes[y+min_y][mts_z+min_z-z][x+min_x].param0].numref++;
}
for(z = 0; z < mts_z; z++)
for(y = 0; y < mts_y; y++)
for(x = 0; x < mts_x; x++, b++)
nodes[y+min_y][z+min_z][x+min_x].param1 = data[5] == 3 ? b[0] >> 1 : b[0];
nodes[y+min_y][mts_z+min_z-z][x+min_x].param1 = data[5] == 3 ? b[0] >> 1 : b[0];
for(z = 0; z < mts_z; z++)
for(y = 0; y < mts_y; y++)
for(x = 0; x < mts_x; x++, b++)
nodes[y+min_y][z+min_z][x+min_x].param2 = b[0];
nodes[y+min_y][mts_z+min_z-z][x+min_x].param2 = b[0];
gndlayer = currlayer = min_y;
for(y = 0; y < mts_y; y++)
for(z = 0; z < mts_z; z++)
@ -244,14 +242,12 @@ int mts_save()
/* write header */
memcpy(hdr, "MTSM", 4);
for(hdr[5] = 3, y = miy; y <= may; y++)
if(layerprob[y] != 127) { hdr[5] = 4; break; }
hdr[5] = 4;
hdr[7] = max-mix+1;
hdr[9] = may-miy+1;
hdr[11] = maz-miz+1;
fwrite(hdr, 12, 1, f);
if(hdr[5] == 4)
fwrite(layerprob + miy, may-miy+1, 1, f);
fwrite(layerprob + miy, may-miy+1, 1, f);
/* write Name-ID table */
hdr[0] = 0; hdr[1] = j;
@ -270,17 +266,17 @@ int mts_save()
for(z = miz, b2 = b; z <= maz; z++)
for(y = miy; y <= may; y++)
for(x = mix; x <= max; x++, b2 += 2) {
b2[0] = tr2[nodes[y][z][x].param0] >> 8;
b2[1] = tr2[nodes[y][z][x].param0] & 0xFF;
b2[0] = tr2[nodes[y][maz+miz-z][x].param0] >> 8;
b2[1] = tr2[nodes[y][maz+miz-z][x].param0] & 0xFF;
}
for(z = miz; z <= maz; z++)
for(y = miy; y <= may; y++)
for(x = mix; x <= max; x++, b2++)
*b2 = hdr[5] == 4 ? nodes[y][z][x].param1 : ((nodes[y][z][x].param1 << 1) | (nodes[y][z][x].param1 ? 1 : 0));
*b2 = nodes[y][maz+miz-z][x].param1;
for(z = miz; z <= maz; z++)
for(y = miy; y <= may; y++)
for(x = mix; x <= max; x++, b2++)
*b2 = nodes[y][z][x].param2;
*b2 = nodes[y][maz+miz-z][x].param2;
/* compress and save */
x = 1;
b2 = stbi_zlib_compress(b, (max-mix+1) * (may-miy+1) * (maz-miz+1) * 4, &i, 9);
@ -303,7 +299,7 @@ int mts_save()
int mts_view(int type)
{
int i, j, w, h, x, y, z, lh = 0;
int r = 0, k, n;
int r = 0, k, n, l;
char pngfile[MAXPATHLEN], *c;
unsigned char *buff = NULL;
SDL_Surface *preview, *blk;
@ -318,7 +314,8 @@ int mts_view(int type)
n = (max - mix) + (maz - miz) + 1;
w = n * dx + 16;
lh = n * dz + 32 - dz;
h = lh + (may - miy) * (32 - 2*dz);
l = 32 - 2*(y0 + dz);
h = lh + (may - miy) * l;
blk = SDL_CreateRGBSurfaceFrom(NULL, 32, 32, 32, 32*4, 0xFF, 0xFF00, 0xFF0000, 0xFF000000);
preview = SDL_CreateRGBSurface(0, w, h, 32, 0xFF, 0xFF00, 0xFF0000, 0xFF000000);
src.x = src.y = 0; src.w = src.h = dst.w = dst.h = 32;
@ -331,7 +328,7 @@ int mts_view(int type)
for(x = mix; x <= max - r; x++) {
if(nodes[y][z][x].param0) {
dst.x = dx * ((x-mix) - (z-miz)) + (maz-miz) * dx;
dst.y = h - lh + dz * ((z-miz) + (x-mix)) - (y-miy) * (32 - 2*dz);
dst.y = h - lh + dz * ((z-miz) + (x-mix)) - (y-miy) * l;
i = nodes[y][z][x].param0;
j = nodes[y][z][x].param2 & 0x1F;
if(i && !blocks[i].img[j]) j = 0;
@ -430,6 +427,30 @@ void mts_rotate(int ccw)
}
}
/**
* Flip the entire MTS structure along the Z axis
*/
void mts_flip()
{
int x, y, z;
node_t layer[256][256];
mts_getbounds(0, NULL, NULL);
if(mix > max) return;
for(y = miy; y <= may; y++) {
memcpy(layer, nodes[y], sizeof(node_t)*256*256);
for(z = miz; z <= maz; z++)
for(x = mix; x <= max; x++) {
memcpy(&nodes[y][z][x], &layer[maz-z+miz][x], sizeof(node_t));
if(nodes[y][z][x].param0) {
edit_rotate(y, z, x, 0);
edit_rotate(y, z, x, 0);
}
}
}
}
/**
* Dump structure
*/

View File

@ -215,6 +215,16 @@ void sdldorotate(int ccw)
SDL_SetCursor(pointer);
}
/**
* UI for fliping
*/
void sdldoflip()
{
SDL_SetCursor(working);
mts_flip();
SDL_SetCursor(pointer);
}
/**
* The main SDL loop
*/
@ -415,8 +425,10 @@ void sdlmain()
systemcursor = 0;
activetool = -1;
} else search_key(&event);
} else
if(event.key.keysym.sym == SDLK_m || event.key.keysym.sym == SDLK_TAB) activetool = 4;
} else {
if(event.key.keysym.sym == SDLK_f) sdldoflip(); else
if(event.key.keysym.sym == SDLK_m || event.key.keysym.sym == SDLK_TAB) activetool = 4;
}
if(shift && event.key.keysym.sym == SDLK_s) activetool = 1;
sdlredraw();
break;

View File

@ -70,7 +70,7 @@ void readschem()
unsigned int size = 0;
int x, y, z;
status = lang[ERR_LOAD];
status = NULL;
mts_x = mts_y = mts_z = 0; currlayer = 127;
memset(layerprob, 127, sizeof(layerprob));
memset(nodes, 0, sizeof(nodes));
@ -84,6 +84,7 @@ void readschem()
f = fopen(mtsfile, "rb");
if(f) {
status = lang[ERR_LOAD];
fseek(f, 0L, SEEK_END);
size = (unsigned int)ftell(f);
fseek(f, 0L, SEEK_SET);
@ -274,14 +275,14 @@ int stairgen()
memset(stair, 0, w * h * 4);
for(i = x0; i <= x1; i++) {
l = (y1 - y0) * (i - x0) / (x1 - x0);
for(j = y0; j < y1 + (y3 - y1) + l; j++)
for(j = y0; j < y1 + (y3 - y1)*3/4 + l; j++)
*((uint32_t*)(stair + (j+(y3 - y1)/4+1)*w*4 + i*4)) = *((uint32_t*)(block + j*w*4 + i*4));
for(j = y3 + l; j < h; j++)
*((uint32_t*)(stair + j*w*4 + i*4)) = *((uint32_t*)(block + j*w*4 + i*4));
}
for(i = x1+1; i <= x2; i++) {
l = (y1 - y0) * ((x2-i+1) - x1) / (x2 - x1);
for(j = y0; j < y2 + (y3 - y1) + l; j++)
for(j = y0; j < y2 + (y3 - y1)*3/4 + l; j++)
*((uint32_t*)(stair + (j+(y3 - y1)/4+1)*w*4 + i*4)) = *((uint32_t*)(block + j*w*4 + i*4));
for(j = y4 + l; j < h; j++)
*((uint32_t*)(stair + j*w*4 + i*4)) = *((uint32_t*)(block + j*w*4 + i*4));