a7b84724c8
- Smoke API uses expandable options param instead of positional - Separate burst qty from automatically adjusted rate - Backward compat with old API for now - Standardize burst of smoke puffs for crafting - Torches emit small smoke particles at increasing rate as they start to wear out, to warn players holding them to light another - Torches now emit a puff of smoke upon snuffing
125 lines
3.7 KiB
Lua
125 lines
3.7 KiB
Lua
-- LUALOCALS < ---------------------------------------------------------
|
|
local ItemStack, minetest, nodecore, pairs
|
|
= ItemStack, minetest, nodecore, pairs
|
|
-- LUALOCALS > ---------------------------------------------------------
|
|
|
|
local modname = minetest.get_current_modname()
|
|
|
|
minetest.register_tool(modname .. ":stylus", {
|
|
description = "Stone-Tipped Stylus",
|
|
tool_wears_to = "nc_tree:stick",
|
|
inventory_image = modname .. "_tool_stylus.png",
|
|
groups = {
|
|
flammable = 2,
|
|
nc_doors_pummel_first = 1
|
|
},
|
|
tool_capabilities = nodecore.toolcaps({
|
|
scratchy = 3
|
|
}),
|
|
on_ignite = "nc_stonework:chip",
|
|
sounds = nodecore.sounds("nc_terrain_stony"),
|
|
on_stack_touchtip = function(stack, desc)
|
|
local patt = stack:get_meta():get_string("pattern")
|
|
if not patt then return desc end
|
|
for _, def in pairs(nodecore.registered_concrete_patterns) do
|
|
if patt == def.name and def.description then
|
|
return desc .. "\n" .. def.description
|
|
end
|
|
end
|
|
return desc
|
|
end
|
|
})
|
|
|
|
for _, patt in pairs(nodecore.registered_concrete_patterns) do
|
|
nodecore.translate_inform(patt.description)
|
|
end
|
|
|
|
nodecore.register_craft({
|
|
label = "assemble stylus",
|
|
normal = {y = 1},
|
|
indexkeys = {"nc_stonework:chip"},
|
|
nodes = {
|
|
{match = "nc_stonework:chip", replace = "air"},
|
|
{y = -1, match = "nc_tree:stick", replace = "air"},
|
|
},
|
|
after = function(pos)
|
|
pos.y = pos.y - 1
|
|
local item = ItemStack(modname .. ":stylus")
|
|
item:get_meta():set_string("pattern",
|
|
nodecore.pickrand(nodecore.registered_concrete_patterns).name)
|
|
return nodecore.item_eject(pos, item)
|
|
end
|
|
})
|
|
|
|
local function getdefs(node)
|
|
local def = minetest.registered_items[node.name] or {}
|
|
return def.pattern_def, def.etch_def
|
|
end
|
|
|
|
nodecore.register_craft({
|
|
label = "stylus etch",
|
|
action = "pummel",
|
|
toolgroups = {scratchy = 1},
|
|
indexkeys = {"group:concrete_etchable"},
|
|
nodes = {
|
|
{
|
|
match = {groups = {concrete_etchable = true}}
|
|
}
|
|
},
|
|
after = function(pos, data)
|
|
local pattdef, etchdef = getdefs(minetest.get_node(pos))
|
|
if not (pattdef and etchdef) then return end
|
|
local setpref = modname .. ":" .. etchdef.name .. "_"
|
|
|
|
local wield = data.wield
|
|
if (not wield) or wield:is_empty() then return end
|
|
local wieldpatt = wield:get_meta():get_string("pattern")
|
|
if wieldpatt and wieldpatt ~= "" and wieldpatt ~= pattdef.name then
|
|
nodecore.set_loud(pos, {name = setpref .. wieldpatt .. "_ply"})
|
|
return
|
|
end
|
|
|
|
local nxpatt = pattdef.next.name
|
|
nodecore.set_loud(pos, {name = setpref .. nxpatt .. "_ply"})
|
|
wield:get_meta():set_string("pattern", nxpatt)
|
|
if data.crafter then
|
|
nodecore.player_discover(data.crafter, "stylus train")
|
|
data.crafter:set_wielded_item(data.wield)
|
|
elseif data.presstoolpos then
|
|
nodecore.witness(pos, "stylus train")
|
|
nodecore.stack_set(data.presstoolpos, wield)
|
|
end
|
|
end
|
|
})
|
|
|
|
nodecore.register_soaking_abm({
|
|
label = "pliable concrete cure",
|
|
interval = 1,
|
|
nodenames = {"group:concrete_etchable"},
|
|
fieldname = "plycuring",
|
|
arealoaded = 1,
|
|
soakrate = function(pos)
|
|
if minetest.find_node_near(pos,
|
|
1, {"group:concrete_flow", "group:water"}) then
|
|
return false
|
|
end
|
|
local found = nodecore.find_nodes_around(pos, "group:igniter", 1)
|
|
return #found + 1
|
|
end,
|
|
soakcheck = function(data, pos)
|
|
if data.total < 100 then
|
|
nodecore.smokefx(pos, 1, data.rate)
|
|
return
|
|
end
|
|
local pattdef, etchdef = getdefs(minetest.get_node(pos))
|
|
if not (pattdef and etchdef) then return end
|
|
local curename = modname .. ":" .. etchdef.name .. "_" .. pattdef.name
|
|
if pattdef.blank then curename = etchdef.basename end
|
|
nodecore.smokeburst(pos)
|
|
nodecore.dynamic_shade_add(pos, 1)
|
|
nodecore.set_loud(pos, {name = curename})
|
|
nodecore.witness(pos, "cure pliant concrete")
|
|
return false
|
|
end
|
|
})
|