108 lines
4.1 KiB
Lua
108 lines
4.1 KiB
Lua
-- Load support for intllib.
|
||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||
local S, NS = dofile(MP.."/intllib.lua")
|
||
|
||
-- doc_items support
|
||
local help_default
|
||
if minetest.get_modpath("doc_items") then
|
||
help_default = S("A shifted block is a variant of a block which has been visually moved by a half block length.")
|
||
end
|
||
|
||
shifted_blocks = {}
|
||
|
||
local on_rotate
|
||
if minetest.get_modpath("screwdriver") then
|
||
on_rotate = function(pos, node, user, mode, new_param2)
|
||
if mode == screwdriver.ROTATE_FACE then
|
||
if node.param2 == 0 then
|
||
node.param2 = 3
|
||
elseif node.param2 ~= 14 then
|
||
node.param2 = 0
|
||
end
|
||
minetest.set_node(pos, node)
|
||
return true
|
||
elseif mode == screwdriver.ROTATE_AXIS then
|
||
if node.param2 == 0 or node.param2 == 3 then
|
||
node.param2 = 14
|
||
else
|
||
node.param2 = 0
|
||
end
|
||
minetest.set_node(pos, node)
|
||
return true
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
end
|
||
|
||
-- Shifted blocks
|
||
|
||
shifted_blocks.register_shifted_block = function(itemstring, original_block, description, side_texture, help, block_texture, no_craft, free_rotation)
|
||
local stone = side_texture or minetest.registered_nodes[original_block].tiles[1]
|
||
local normal = block_texture or minetest.registered_nodes[original_block].tiles[1]
|
||
|
||
-- FIXME/TEST: Does this work with textures other than 16×16?
|
||
local combine = "[combine:16x16:-8,0="..normal..":8,0="..normal
|
||
|
||
if minetest.get_modpath("doc_items") then
|
||
if help == nil then
|
||
help = help_default
|
||
end
|
||
else
|
||
help = nil
|
||
end
|
||
|
||
local rotate = on_rotate
|
||
local place_param2 = 0
|
||
if free_rotation then
|
||
rotate = nil
|
||
place_param2 = nil
|
||
end
|
||
|
||
minetest.register_node(itemstring, {
|
||
description = description,
|
||
_doc_items_longdesc = help,
|
||
on_rotate = rotate,
|
||
paramtype2 = "facedir",
|
||
-- TODO: Place node according to view direction (restrict param2 to 0 or 3)
|
||
place_param2 = place_param2,
|
||
tiles = {combine, combine, stone, stone, combine.."^[transformFX", combine},
|
||
is_ground_content = false,
|
||
groups = minetest.registered_nodes[original_block].groups,
|
||
sounds = minetest.registered_nodes[original_block].sounds,
|
||
})
|
||
|
||
if not no_craft then
|
||
-- Recipes to add shifted block
|
||
minetest.register_craft({
|
||
output = itemstring.." 2",
|
||
recipe = { { original_block, original_block } },
|
||
})
|
||
-- Reverse recipe
|
||
minetest.register_craft({
|
||
output = original_block.." 2",
|
||
recipe = { { itemstring, itemstring} },
|
||
})
|
||
end
|
||
end
|
||
|
||
|
||
-- Register shifted blocks for Minetest Game
|
||
|
||
if minetest.get_modpath("default") then
|
||
-- Stone blocks
|
||
shifted_blocks.register_shifted_block("shifted_blocks:stone_block_shifted", "default:stone_block", S("Shifted Stone Block"), "default_stone.png")
|
||
shifted_blocks.register_shifted_block("shifted_blocks:desert_stone_block_shifted", "default:desert_stone_block", S("Shifted Desert Stone Block"), "default_desert_stone.png")
|
||
shifted_blocks.register_shifted_block("shifted_blocks:sandstone_block_shifted", "default:sandstone_block", S("Shifted Sandstone Block"), "default_sandstone.png")
|
||
shifted_blocks.register_shifted_block("shifted_blocks:desert_sandstone_block_shifted", "default:desert_sandstone_block", S("Shifted Desert Sandstone Block"), "default_desert_sandstone.png")
|
||
shifted_blocks.register_shifted_block("shifted_blocks:silver_sandstone_block_shifted", "default:silver_sandstone_block", S("Shifted Silver Sandstone Block"), "default_silver_sandstone.png")
|
||
shifted_blocks.register_shifted_block("shifted_blocks:obsidian_block_shifted", "default:obsidian_block", S("Shifted Obsidian Block"), "default_obsidian.png")
|
||
|
||
-- Metal blocks
|
||
shifted_blocks.register_shifted_block("shifted_blocks:gold_block_shifted", "default:goldblock", S("Shifted Gold Block"))
|
||
shifted_blocks.register_shifted_block("shifted_blocks:bronze_block_shifted", "default:bronzeblock", S("Shifted Bronze Block"))
|
||
shifted_blocks.register_shifted_block("shifted_blocks:tin_block_shifted", "default:tinblock", S("Shifted Tin Block"))
|
||
shifted_blocks.register_shifted_block("shifted_blocks:copper_block_shifted", "default:copperblock", S("Shifted Copper Block"))
|
||
shifted_blocks.register_shifted_block("shifted_blocks:steel_block_shifted", "default:steelblock", S("Shifted Steel Block"))
|
||
end
|