mirror of
https://github.com/Sokomine/colormachine.git
synced 2024-11-13 22:20:17 +01:00
67 lines
2.1 KiB
Lua
67 lines
2.1 KiB
Lua
-- This is based upon the paint_roller mod by Krock.
|
|
|
|
-- if the old color of the block can be identified and is supported, its
|
|
-- corresponding dye is added to the player's inventory;
|
|
-- if at all possible, the block is colored with the dye that is found in
|
|
-- the player's inventory to the right of the paintroller
|
|
minetest.register_tool("colormachine:paint_roller", {
|
|
description = "Paint roller",
|
|
inventory_image = "paint_roller.png",
|
|
on_use = function(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type ~= "node" then
|
|
return
|
|
end
|
|
local idx = placer:get_wield_index() + 1
|
|
if idx > 7 then --copied from explorer tools moo-ha-ha
|
|
return
|
|
end
|
|
if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
|
|
minetest.record_protection_violation(pointed_thing.under, placer:get_player_name())
|
|
return
|
|
end
|
|
local node = minetest.get_node(pointed_thing.under);
|
|
local node_name = node.name
|
|
|
|
local inv = placer:get_inventory()
|
|
local stack = inv:get_stack("main", idx) --dye
|
|
local stack_name = stack:get_name()
|
|
|
|
local res = colormachine.get_node_name_painted( node_name, stack_name, node.param2 );
|
|
|
|
if( not( res) or not( res.possible ) or #res.possible < 1 or (#res.possible==1 and res.possible[1]==node_name and node.param2==res.param2)) then
|
|
return;
|
|
end
|
|
local index = 1;
|
|
for i,v in ipairs( res.possible ) do
|
|
if( v==node_name and i < #res.possible and #res.possible[i+1]) then
|
|
index = i+1;
|
|
end
|
|
end
|
|
|
|
-- return the old dye
|
|
if( res.old_dye and res.old_dye ~= stack_name ) then
|
|
inv:add_item( 'main', res.old_dye..' 1' );
|
|
end
|
|
|
|
-- consume one dye
|
|
if( stack_name and stack_name ~= '' and (not(res.old_dye) or res.old_dye~=stack_name)) then
|
|
inv:remove_item( 'main', stack_name..' 1');
|
|
end
|
|
|
|
-- paint the node
|
|
minetest.set_node(pointed_thing.under, {name=res.possible[ index ], param2=res.param2})
|
|
|
|
--itemstack:add_wear( 65535 / 30 );
|
|
return itemstack
|
|
end
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "colormachine:paint_roller",
|
|
recipe = {
|
|
{"wool:white", "wool:white", "default:steel_ingot"},
|
|
{"", "default:steel_ingot", ""},
|
|
{"", "default:steel_ingot", ""},
|
|
}
|
|
})
|