minetest_shifted_blocks/init.lua

108 lines
4.1 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

-- 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