123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- local USES = 200
- local mode = {}
- local function parti(pos)
- minetest.add_particlespawner(25, 0.3,
- pos, pos,
- {x=2, y=0.2, z=2}, {x=-2, y=2, z=-2},
- {x=0, y=-6, z=0}, {x=0, y=-10, z=0},
- 0.2, 1,
- 0.2, 2,
- true, "mychisel_parti.png")
- end
- mode = "1"
- minetest.register_tool( "mychisel:chisel",{
- description = "Chisel",
- inventory_image = "mychisel_chisel.png",
- wield_image = "mychisel_chisel.png",
- on_use = function(itemstack, user, pointed_thing)
- if pointed_thing.type ~= "node" then
- return
- end
- local pos = pointed_thing.under
- local node = minetest.get_node(pos)
- local default_material = {
- {"default:cobble", "default_cobble", "Cobble"},
- {"default:sandstone","default_sandstone", "Sandstone"},
- {"default:clay","default_clay", "Clay"},
- {"default:coalblock","default_coal_block", "Coal Block"},
- {"default:stone","default_stone", "Stone"},
- {"default:desert_stone","default_desert_stone", "Desert Stone"},
- {"default:wood","default_wood", "Wood"},
- {"default:acacia_wood","default_acacia_wood", "Acacia Wood"},
- {"default:aspen_wood","default_aspen_wood", "Aspen Wood"},
- {"default:pine_wood","default_pine_wood", "Pine Wood"},
- {"default:desert_cobble","default_desert_cobble", "Desert Cobble"},
- {"default:junglewood","default_junglewood", "Jungle Wood"},
- {"default:sandstonebrick","default_sandstone_brick", "Sandstone Brick"},
- {"default:stonebrick","default_stone_brick", "Stone Brick"},
- {"default:desert_stonebrick","default_desert_stone_brick", "Desert Stone Brick"},
- }
- for i in ipairs (default_material) do
- local item = default_material [i][1]
- local mat = default_material [i][2]
- local desc = default_material [i][3]
- if pointed_thing.type ~= "node" then
- return
- end
- if minetest.is_protected(pos, user:get_player_name()) then
- minetest.record_protection_violation(pos, user:get_player_name())
- return
- end
- if mode == "1" then
- if node.name == item then
- minetest.set_node(pos,{name = "mychisel:chiseled_"..mat.."1", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:chiseled_"..mat.."1" then
- minetest.set_node(pos,{name = "mychisel:chiseled_"..mat.."2", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:chiseled_"..mat.."2" then
- minetest.set_node(pos,{name = "mychisel:chiseled_"..mat.."3", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:chiseled_"..mat.."3" then
- minetest.set_node(pos,{name = "mychisel:chiseled_"..mat.."4", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- end
- if mode == "2" then
- if node.name == item then
- minetest.set_node(pos,{name = "mychisel:horizontal_"..mat.."1", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:horizontal_"..mat.."1" then
- minetest.set_node(pos,{name = "mychisel:horizontal_"..mat.."2", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:horizontal_"..mat.."2" then
- minetest.set_node(pos,{name = "mychisel:horizontal_"..mat.."3", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:horizontal_"..mat.."3" then
- minetest.set_node(pos,{name = "mychisel:horizontal_"..mat.."4", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- end
- if mode == "3" then
- if node.name == item then
- minetest.set_node(pos,{name = "mychisel:vertical_"..mat.."1", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:vertical_"..mat.."1" then
- minetest.set_node(pos,{name = "mychisel:vertical_"..mat.."2", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:vertical_"..mat.."2" then
- minetest.set_node(pos,{name = "mychisel:vertical_"..mat.."3", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:vertical_"..mat.."3" then
- minetest.set_node(pos,{name = "mychisel:vertical_"..mat.."4", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- end
- if mode == "4" then
- if node.name == item then
- minetest.set_node(pos,{name = "mychisel:cross_"..mat.."1", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:cross_"..mat.."1" then
- minetest.set_node(pos,{name = "mychisel:cross_"..mat.."2", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:cross_"..mat.."2" then
- minetest.set_node(pos,{name = "mychisel:cross_"..mat.."3", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:cross_"..mat.."3" then
- minetest.set_node(pos,{name = "mychisel:cross_"..mat.."4", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- end
- if mode == "5" then
- if node.name == item then
- minetest.set_node(pos,{name = "mychisel:square_"..mat.."1", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:square_"..mat.."1" then
- minetest.set_node(pos,{name = "mychisel:square_"..mat.."2", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:square_"..mat.."2" then
- minetest.set_node(pos,{name = "mychisel:square_"..mat.."3", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- if node.name == "mychisel:square_"..mat.."3" then
- minetest.set_node(pos,{name = "mychisel:square_"..mat.."4", param2=minetest.dir_to_facedir(user:get_look_dir())})
- parti(pos)
- end
- end
- if mode == "6" then
- -- on_place = function(itemstack, placer, pointed_thing)
- local pt = pointed_thing
- if ( minetest.get_node({x=pt.under.x, y=pt.under.y+1, z=pt.under.z}).name == "air" ) then
- local wear = itemstack:get_wear()
- local direction = minetest.dir_to_facedir(user:get_look_dir())
- local meta1 = minetest.env:get_meta({x=pt.under.x, y=pt.under.y , z=pt.under.z})
- local meta2 = minetest.env:get_meta({x=pt.under.x, y=pt.under.y+1, z=pt.under.z})
- minetest.set_node({x=pt.under.x, y=pt.under.y+1, z=pt.under.z}, {name="mychisel:chisel_deco", param2=direction})
- meta1:set_int("wear", wear)
- meta2:set_int("wear", wear)
- itemstack:take_item()
- return itemstack
- end
- end
- end
- if not minetest.setting_getbool("creative_mode") then
- itemstack:add_wear(65535 / (USES - 1))
- end
- return itemstack
- end,
- on_place = function(itemstack, user, pointed_thing)
- local usr = user:get_player_name()
- if mode == "1" then
- mode = "2"
- minetest.chat_send_player(usr,"Horizontal Groove")
- elseif mode == "2" then
- mode = "3"
- minetest.chat_send_player(usr,"Vertical Groove")
- elseif mode == "3" then
- mode = "4"
- minetest.chat_send_player(usr,"Cross Grooves")
- elseif mode == "4" then
- mode = "5"
- minetest.chat_send_player(usr,"Square")
- elseif mode == "5" then
- mode = "6"
- minetest.chat_send_player(usr,"Place Tool")
- elseif mode == "6" then
- mode = "1"
- minetest.chat_send_player(usr,"Chisel 4 Edges")
- end
- if not minetest.setting_getbool("creative_mode") then
- itemstack:add_wear(65535 / (USES - 1))
- end
- return itemstack
- end
- })
- minetest.register_craft({
- output = "mychisel:chisel",
- recipe = {
- {"default:steel_ingot"},
- {"wool:brown"},
- },
- })
|