minetest-madblocks/nocrafts.lua

328 lines
12 KiB
Lua

local like = minetest.require("madblocks","like")("madblocks")
local soundNode = minetest.require("madblocks","sound")("madblocks")
-- ***********************************************************************************
-- NEW METALLIC ITEMS **************************************************
-- ***********************************************************************************
like.metal('brushedmetal','Brushed Metal',true)
like.metal('yellow_rustedmetal','Yellow Painted Rusted Metal',true)
like.metal('texturedmetal','Textured Metal')
like.metal('metalbulkhead','Metal Bulkhead')
like.metal('stripedmetal','Caution Striped Metal')
like.brick('brownmedistonebrick','Mediterranean Stonebrick (Brown Tones)')
-- ***********************************************************************************
-- RIVEN/MYST (DECO) NODES **************************************************
-- ***********************************************************************************
soundNode('riven1','Riven Art (1)','signlike')
soundNode('riven2','Riven Art (2)','signlike')
soundNode('riven3','Riven Art (3)','signlike')
like.metal('rivenwood','Riven Wood')
like.metal('rivenwoodblue','Riven Wood (Blue)')
like.metal('rivenstone1','Riven Stone (1)')
like.metal('rivenstone2','Riven Stone (2)')
like.metal('rivenstoneblue','Riven Stone (Blue)')
like.metal('rivenmetal','Riven Rusted Metal')
like.metal('rivenbulkhead','Riven Metal Bulkhead')
like.metal('rivengoldstone1','Riven Gold Stone (1)')
like.metal('rivengoldstone2','Riven Gold Stone (2)')
minetest.register_node("madblocks:rivenbeetle", {
description = "Sign",
drawtype = "signlike",
tile_images = {"madblocks_rivenbeetle.png"},
inventory_image = "madblocks_rivenbeetle.png",
wield_image = "madblocks_rivenbeetle.png",
paramtype = "light",
paramtype2 = "wallmounted",
light_propagates = true,
sunlight_propagates = true,
light_source = 10,
walkable = false,
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
})
minetest.register_node("madblocks:rivendagger", {
description = "Sign",
drawtype = "signlike",
tile_images = {"madblocks_rivendagger.png"},
inventory_image = "madblocks_rivendagger.png",
wield_image = "madblocks_rivendagger.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
metadata_name = "sign",
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
on_construct = function(pos)
--local n = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec", "hack:sign_text_input")
meta:set_string("infotext", "\"\"")
end,
on_receive_fields = function(pos, formname, fields, sender)
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
local meta = minetest.env:get_meta(pos)
fields.text = fields.text or ""
print((sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos))
meta:set_string("text", fields.text)
meta:set_string("infotext", '"'..fields.text..'"')
end,
})
minetest.register_tool("madblocks:riventool", {
description = "Riven Dagger (tool)",
inventory_image = "madblocks_riventool.png",
tool_capabilities = {
full_punch_interval = 0.5,
max_drop_level=3,
groupcaps={
fleshy={times={[1]=6.00, [2]=3, [3]=1}, uses=10, maxlevel=3},
cracky={times={[1]=0.1, [2]=0.1, [3]=0.1}, uses=5000, maxlevel=3},
crumbly={times={[1]=0.1, [2]=0.1, [3]=0.1}, uses=5000, maxlevel=3},
snappy={times={[1]=0.1, [2]=0.1, [3]=0.1}, uses=5000, maxlevel=3}
}
},
})
-- ***********************************************************************************
-- RIVEN/MYST LINKING BOOKS **************************************************
-- ***********************************************************************************
local linkingbook = {}
linkingbook.sounds = {}
linkingbook_sound = function(p)
local wanted_sound = {name="linkingbook", gain=1.5}
linkingbook.sounds[minetest.hash_node_position(p)] = {
handle = minetest.sound_play(wanted_sound, {pos=p, loop=false}),
name = wanted_sound.name,
}
end
local function has_linkingbook_privilege(meta, player)
if player:get_player_name() ~= meta:get_string("owner") then
return false
end
return true
end
minetest.register_node("madblocks:linkingbook", {
description = "Linking Book",
drawtype = "signlike",
tile_images = {"madblocks_linkingbook.png"},
inventory_image = "madblocks_linkingbook.png",
wield_image = "madblocks_linkingbook.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
metadata_name = "sign",
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
on_punch = function(pos,node,puncher)
local player = puncher:get_player_name()-- or ""
local meta = minetest.env:get_meta(pos)
local stringpos = meta:get_string("text")
local p = {}
p.x, p.y, p.z = string.match(stringpos, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
if p.x and p.y and p.z then
teleportee = minetest.env:get_player_by_name(player)
linkingbook_sound(pos)
teleportee:setpos(p)
linkingbook_sound(p)
end
end,
on_construct = function(pos)
--local n = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec", "hack:sign_text_input")
meta:set_string("infotext", "Linking Book")
-- new material
meta:set_string("owner", "")
end,
on_receive_fields = function(pos, formname, fields, sender)
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
local meta = minetest.env:get_meta(pos)
-- new material
if not has_linkingbook_privilege(meta, sender) then return end
fields.text = fields.text or ""
print((sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos))
meta:set_string("text", fields.text)
-- meta:set_string("infotext", '"'..fields.text..'"')
end,
after_place_node = function(pos, placer)
local meta = minetest.env:get_meta(pos)
meta:set_string("owner", placer:get_player_name() or "")
end,
can_dig = function(pos,player)
meta = minetest.env:get_meta(pos)
return has_linkingbook_privilege(meta, player)
end,
})
minetest.register_node("madblocks:plinkingbook", {
description = "Private Linking Book",
drawtype = "signlike",
tile_images = {"madblocks_plinkingbook.png"},
inventory_image = "madblocks_plinkingbook.png",
wield_image = "madblocks_plinkingbook.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
metadata_name = "sign",
selection_box = {
type = "wallmounted",
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
},
groups = {choppy=2,dig_immediate=2},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
on_punch = function(pos,node,puncher)
local meta = minetest.env:get_meta(pos)
if not has_linkingbook_privilege(meta, puncher) then return end
local player = puncher:get_player_name()-- or ""
local stringpos = meta:get_string("text")
local p = {}
p.x, p.y, p.z = string.match(stringpos, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
if p.x and p.y and p.z then
teleportee = minetest.env:get_player_by_name(player)
linkingbook_sound(pos)
teleportee:setpos(p)
linkingbook_sound(p)
end
end,
on_construct = function(pos)
--local n = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec", "hack:sign_text_input")
meta:set_string("infotext", "Linking Book")
-- new material
meta:set_string("owner", "")
end,
on_receive_fields = function(pos, formname, fields, sender)
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
local meta = minetest.env:get_meta(pos)
-- new material
if not has_linkingbook_privilege(meta, sender) then return end
fields.text = fields.text or ""
print((sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos))
meta:set_string("text", fields.text)
-- meta:set_string("infotext", '"'..fields.text..'"')
end,
after_place_node = function(pos, placer)
local meta = minetest.env:get_meta(pos)
meta:set_string("owner", placer:get_player_name() or "")
end,
can_dig = function(pos,player)
meta = minetest.env:get_meta(pos)
return has_linkingbook_privilege(meta, player)
end,
})
-- ***********************************************************************************
-- PALM TREES **************************************************
-- ***********************************************************************************
minetest.register_node("madblocks:palmleaves", {
description = "Rail",
drawtype = "raillike",
tile_images = {"madblocks_palmleaves.png", "madblocks_palmleaves_top.png", "madblocks_palmleaves_top.png", "madblocks_palmleaves_top.png"},
inventory_image = "madblocks_palmleaves.png",
wield_image = "madblocks_palmleaves.png",
paramtype = "light",
is_ground_content = true,
walkable = false,
selection_box = {
type = "fixed",
--fixed = <default>
},
groups = {bendy=2,snappy=1,dig_immediate=2},
})
like.plant('palmtree','Palmtree Sapling','veg')
minetest.register_abm({
nodenames = { "madblocks:palmtree" },
interval = 120,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
minetest.env:add_node({x=pos.x,y=pos.y,z=pos.z},{type="node",name="madblocks:slimtree_wood"})
minetest.env:add_node({x=pos.x,y=pos.y+1,z=pos.z},{type="node",name="madblocks:slimtree_wood"})
minetest.env:add_node({x=pos.x,y=pos.y+2,z=pos.z},{type="node",name="madblocks:slimtree_wood"})
minetest.env:add_node({x=pos.x,y=pos.y+3,z=pos.z},{type="node",name="madblocks:slimtree_wood"})
minetest.env:add_node({x=pos.x,y=pos.y+4,z=pos.z},{type="node",name="madblocks:slimtree_wood"})
minetest.env:add_node({x=pos.x,y=pos.y+5,z=pos.z},{type="node",name="madblocks:slimtree_wood"})
minetest.env:add_node({x=pos.x,y=pos.y+6,z=pos.z},{type="node",name="madblocks:slimtree_wood"})
minetest.env:add_node({x=pos.x,y=pos.y+7,z=pos.z},{type="node",name="madblocks:slimtree_wood"})
minetest.env:add_node({x=pos.x,y=pos.y+8,z=pos.z},{type="node",name="madblocks:slimtree_wood"})
minetest.env:add_node({x=pos.x+2,y=pos.y+8,z=pos.z},{type="node",name="madblocks:palmleaves"})
minetest.env:add_node({x=pos.x-2,y=pos.y+8,z=pos.z},{type="node",name="madblocks:palmleaves"})
minetest.env:add_node({x=pos.x,y=pos.y+8,z=pos.z+2},{type="node",name="madblocks:palmleaves"})
minetest.env:add_node({x=pos.x,y=pos.y+8,z=pos.z-2},{type="node",name="madblocks:palmleaves"})
minetest.env:add_node({x=pos.x,y=pos.y+9,z=pos.z},{type="node",name="madblocks:palmleaves"})
minetest.env:add_node({x=pos.x+1,y=pos.y+9,z=pos.z},{type="node",name="madblocks:palmleaves"})
minetest.env:add_node({x=pos.x-1,y=pos.y+9,z=pos.z},{type="node",name="madblocks:palmleaves"})
minetest.env:add_node({x=pos.x,y=pos.y+9,z=pos.z+1},{type="node",name="madblocks:palmleaves"})
minetest.env:add_node({x=pos.x,y=pos.y+9,z=pos.z-1},{type="node",name="madblocks:palmleaves"})
end
})
-- ***********************************************************************************
-- HOLO NODES **************************************************
-- ***********************************************************************************
minetest.register_node("madblocks:holocobble", {
description = "Holographic Cobblestone",
tile_images = {"default_cobble.png"},
is_ground_content = true,
walkable = false,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("madblocks:holostone", {
description = "Holographic Stone",
tile_images = {"default_stone.png"},
is_ground_content = true,
walkable = false,
groups = {cracky=3},
--drop = 'default:cobble',
legacy_mineral = true,
sounds = default.node_sound_stone_defaults(),
})