2,11c2 < local color = '#FF6700' < local TechnicMaxCharge = 300000 < chisel = {} < < chisel.materials = {} < chisel.mods = {} < chisel.selected = {} < chisel.active = {} < chisel.program = {} < chisel.mode = {} --- > local mode = {} 12a4,12 > 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 13a14 > mode = "1" 14a16,19 > minetest.register_tool( "mychisel:chisel",{ > description = "Chisel", > inventory_image = "mychisel_chisel.png", > wield_image = "mychisel_chisel.png", 16c21 < local wehavetechnic = minetest.get_modpath("technic") --- > on_use = function(itemstack, user, pointed_thing) 17a23,25 > if pointed_thing.type ~= "node" then > return > end 19,20c27,28 < < --- > local pos = pointed_thing.under > local node = minetest.get_node(pos) 22c30 < local default_material = { --- > local default_material = { 40,185d47 < -- Chatcommand to show loaded mods with names and number of styles < < minetest.register_chatcommand("chisel", { < params = "", < description = "Shows supported mods in mychisel", < privs = {interact = true}, < func = function(name, poi_name) < < for i in ipairs (chisel.mods) do < < minetest.chat_send_player(name,core.colorize(color,i..") modname :"..chisel.mods[i][1].." styles: "..chisel.mods[i][2])) < end < < end, < }) < < -- global API < < function chisel.register_node(modname, prefix, raw, design) -- global function to register new stuff < local counter = chisel.count_stuff() +1 < chisel.materials [counter] = {} < chisel.materials [counter][1] = modname < chisel.materials [counter][2] = prefix < chisel.materials [counter][3] = raw < chisel.materials [counter][4] = design < end < < < function chisel.add_mod(modname,number) -- global function to init a new mod for the chisel. < local counter = chisel.count_mods() +1 < chisel.mods [counter] = {} < chisel.mods [counter][1] = modname < chisel.mods [counter][2] = number < minetest.log("action","[CHISEL] Added mod "..modname .. " with " .. number.." styles to mychisel") -- log loaded mods to debug.txt < end < < < < function chisel.count_stuff() -- how many materials have been registered already ? < local counter = 0 < for i in ipairs (chisel.materials) do counter = counter +1 end < return counter < end < < < < function chisel.count_mods() -- how many different mods are registered ? < < local counter = 0 < for i in ipairs (chisel.mods) do counter = counter +1 end < return counter < end < < < < < -- init chisel for each player joining < < local function chiselinit(name) < chisel.selected[name] = 1 < chisel.active[name] = "default" < chisel.program[name] = 1 < chisel.mode[name] = "1" < end < < minetest.register_on_joinplayer(function(player) < chiselinit(player:get_player_name()) < end) < < -- end init < < < < < 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 < < < < < local function chiselcut(pos,user,node) < local name = user:get_player_name() < < for i in ipairs (chisel.materials) do < < if chisel.materials[i][1] == chisel.active[name] then < if node.name == chisel.materials[i][3] and chisel.materials[i][4] == chisel.materials[chisel.program[name]][4] then < < minetest.set_node(pos, {name=chisel.materials[i][1]..":"..chisel.materials[i][2].."_"..chisel.materials[i][4], param2=minetest.dir_to_facedir(user:get_look_dir())}) < end < end < end < end < < < local function change_mode(user, choice) < < local name = user:get_player_name() < < < if choice then < if chisel.mode[name] == "1" then < chisel.mode[name] = "2" < minetest.chat_send_player(name,core.colorize(color, "Horizontal Groove")) < < elseif chisel.mode[name] == "2" then < chisel.mode[name] = "3" < minetest.chat_send_player(name,core.colorize(color, "Vertical Groove")) < < elseif chisel.mode[name] == "3" then < chisel.mode[name] = "4" < minetest.chat_send_player(name, core.colorize(color, "Cross Grooves")) < < elseif chisel.mode[name] == "4" then < chisel.mode[name] = "5" < minetest.chat_send_player(name, core.colorize(color, "Square")) < < elseif chisel.mode[name] == "5" then < chisel.mode[name] = "1" < minetest.chat_send_player(name, core.colorize(color, "Chisel 4 Edges")) < end < else < chisel.program[name] = chisel.program[name] +1 < if chisel.program[name] > chisel.mods [chisel.selected[name]][2] then chisel.program[name] = 1 end < minetest.chat_send_player(name, core.colorize(color, chisel.materials [chisel.program[name]][4])) < end < < end < < < < < local function chiselme(pos, user, node) < < < local name = user:get_player_name() < < < 190d51 < 192c53,62 < if chisel.mode[name] == "1" then --- > 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 197d66 < 203d71 < 209d76 < 215d81 < 217,218d82 < < 221c85 < if chisel.mode[name] == "2" then --- > if mode == "2" then 226d89 < 232d94 < 238d99 < 244d104 < 246d105 < 249c108 < if chisel.mode[name] == "3" then --- > if mode == "3" then 254d112 < 260d117 < 266d122 < 272d127 < 274d128 < 277c131 < if chisel.mode[name] == "4" then --- > if mode == "4" then 282d135 < 288d140 < 294d145 < 300d150 < 302d151 < 305c154 < if chisel.mode[name] == "5" then --- > if mode == "5" then 310d158 < 316d163 < 322d168 < 328d173 < 330d174 < 332a177,192 > 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 > 334,335d193 < < end 337,338c195,197 < < if not wehavetechnic then --- > if not minetest.setting_getbool("creative_mode") then > itemstack:add_wear(65535 / (USES - 1)) > end 340,531c199,221 < 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 feedback = false < local name = user:get_player_name() < < < < < if minetest.is_protected(pos, user:get_player_name()) then < minetest.record_protection_violation(pos, user:get_player_name()) < return < end < < < if chisel.active[name] == "default" then < chiselme(pos,user,node) < < else < < chiselcut(pos,user,node) < < 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 number = chisel.count_mods() < local keys = user:get_player_control() < local name = user:get_player_name() < < < < -- change design mode of chisel by pressing sneak while right-clicking < if( not( keys["sneak"] )) then < if chisel.active[name] == "default" then < change_mode(user,true) < else < < change_mode(user,false) < < end < else < chisel.selected[name] = chisel.selected[name] +1 < if chisel.selected[name] > chisel.count_mods() then chisel.selected[name] = 1 end < < chisel.active[name] = chisel.mods[chisel.selected[name]][1] < minetest.chat_send_player(user:get_player_name(), core.colorize(color, " ***>>> switched to mod: "..chisel.active[name])) < < end < < return itemstack < < end < < }) < < minetest.register_craft({ < output = "mychisel:chisel", < recipe = { < {"default:steel_ingot"}, < {"wool:brown"}, < }, < }) < < < < < else < < < local S = technic.getter < < technic.register_power_tool("mychisel:chisel",TechnicMaxCharge) < local chisel_charge_per_node =math.floor( TechnicMaxCharge / USES ) < < < minetest.register_tool("mychisel:chisel", { < description = S("Chisel"), < inventory_image = "mychisel_chisel.png", < stack_max = 1, < wear_represents = "technic_RE_charge", < on_refill = technic.refill_RE_charge, < 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 name = user:get_player_name() < < < < if minetest.is_protected(pos, user:get_player_name()) then < minetest.record_protection_violation(pos, user:get_player_name()) < return < end < < -- < < local meta = minetest.deserialize(itemstack:get_metadata()) < if not meta or not meta.charge or < meta.charge < chisel_charge_per_node then < return < end < < if chisel.active[name] == "default" then < chiselme(pos,user,node) < meta.charge = meta.charge - chisel_charge_per_node < else < < chiselcut(pos,user,node) < meta.charge = meta.charge - chisel_charge_per_node < end < < < < if not technic.creative_mode then < technic.set_RE_wear(itemstack, meta.charge, TechnicMaxCharge) < itemstack:set_metadata(minetest.serialize(meta)) < end < < return itemstack < < < end, < < on_place = function(itemstack, user, pointed_thing) < < local number = chisel.count_mods() < local keys = user:get_player_control() < local name = user:get_player_name() < < < < -- change design mode of chisel by pressing sneak while right-clicking < if( not( keys["sneak"] )) then < if chisel.active[name] == "default" then < change_mode(user,true) < else < < change_mode(user,false) < < end < else < chisel.selected[name] = chisel.selected[name] +1 < if chisel.selected[name] > chisel.count_mods() then chisel.selected[name] = 1 end < < chisel.active[name] = chisel.mods[chisel.selected[name]][1] < minetest.chat_send_player(user:get_player_name(),core.colorize(color, " ***>>> switched to mod: "..chisel.active[name])) < < end < < return itemstack < < end < }) < < < minetest.register_craft({ < output = "mychisel:chisel", < recipe = { < {"default:diamond", "default:diamond" , "default:diamond" }, < {"", "technic:stainless_steel_ingot", ""}, < {"", "technic:battery", ""}, < } < }) < < < < 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") 533c223,247 < chisel.add_mod("default",5) \ No newline at end of file --- > 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"}, > }, > })