New features
parent
fcbe326e50
commit
71316e6b27
|
@ -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
|
||||
-----------
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
103
data/blocks.csv
103
data/blocks.csv
|
@ -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
|
||||
|
|
|
|
@ -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
|
||||
|
|
|
@ -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 |
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
})
|
||||
|
|
|
@ -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=
|
||||
|
|
|
@ -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 |
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
71
src/mts.c
71
src/mts.c
|
@ -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
|
||||
*/
|
||||
|
|
16
src/sdl.c
16
src/sdl.c
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue