551 lines
14 KiB
Diff
551 lines
14 KiB
Diff
|
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"},
|
||
|
> },
|
||
|
> })
|