Compare commits

...

10 Commits

Author SHA1 Message Date
loosewheel
fcf6b7b6ff Add files via upload 2022-08-09 19:50:22 +10:00
loosewheel
156b47f8b9 Add files via upload 2022-08-09 19:47:29 +10:00
loosewheel
fed7295111 Add files via upload 2022-08-09 19:44:22 +10:00
loosewheel
391d8e1393 Add files via upload 2022-07-12 19:58:17 +10:00
loosewheel
108abd4485 Add files via upload 2022-07-12 19:56:18 +10:00
loosewheel
6fd2af5e17 Add files via upload 2022-06-19 02:28:52 +10:00
loosewheel
85e5a877c6 Add files via upload 2022-05-23 20:01:18 +10:00
loosewheel
e3a53dcb61 Add files via upload 2022-03-08 20:11:38 +10:00
loosewheel
78f9fe2ef0 Add files via upload 2022-03-08 20:07:00 +10:00
loosewheel
dcc13da758 Add files via upload 2022-03-08 20:03:58 +10:00
42 changed files with 2410 additions and 411 deletions

27
.luacheckrc Normal file
View File

@@ -0,0 +1,27 @@
unused_args = false
allow_defined_top = true
max_comment_line_length = 999
read_globals = {
"DIR_DELIM",
"minetest", "core",
"unpack",
"dump",
table = { fields = { "copy", "getn" } },
"vector", "nodeupdate",
"VoxelManip", "VoxelArea",
"PseudoRandom", "ItemStack",
"default",
"lwcomponents",
"intllib",
"mesecon",
"digiline",
"digilines",
"hopper",
"pipeworks",
"unifieddyes",
"digistuff",
}
globals = {
}

View File

@@ -12,7 +12,7 @@ local break_interval = 1.0
local function get_breaker_side (pos, param2, side)
local base = nil
local base
if side == "left" then
base = { x = -1, y = pos.y, z = 0 }
@@ -138,7 +138,7 @@ local function can_break_node (pos, breakpos)
if node_def then
-- try tool first
local tool = get_tool (pos)
local dig_params = nil
local dig_params
if tool then
local tool_def = minetest.registered_items[tool:get_name ()]
@@ -253,8 +253,13 @@ end
local function break_node (pos, range)
local node = minetest.get_node_or_nil (pos)
local meta = minetest.get_meta (pos)
if node then
if meta and minetest.is_protected (pos, meta:get_string ("owner")) then
return
end
local breakpos = get_break_pos (pos, node.param2, range)
if breakpos then
@@ -516,7 +521,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
minetest.remove_node (pos)
end
@@ -713,7 +717,7 @@ end
local breaker_groups = { cracky = 3 }
local breaker_groups = { cracky = 3, wires_connect = 1 }
if utils.pipeworks_supported then
breaker_groups.tubedevice = 1
breaker_groups.tubedevice_receiver = 1
@@ -721,7 +725,7 @@ end
local breaker_on_groups = { cracky = 3, not_in_creative_inventory = 1 }
local breaker_on_groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 }
if utils.pipeworks_supported then
breaker_on_groups.tubedevice = 1
breaker_on_groups.tubedevice_receiver = 1

View File

@@ -121,7 +121,7 @@ local function camera_scan (pos, resolution, distance)
local horz = (x - (resolution / 2)) * scale * view
local vert = (y - (resolution / 2)) * scale * view
local tpos = nil
local tpos
if dir.x ~= 0 then
tpos = vector.round ({ x = (dist * dir.x) + pos.x, y = pos.y - vert, z = horz + pos.z })
else
@@ -146,9 +146,9 @@ local function camera_scan (pos, resolution, distance)
last_color = string.format ("0000%02X", color)
image[y][x] = last_color
else
local node = utils.get_far_node (tpos)
local tnode = utils.get_far_node (tpos)
if node and node.name ~= "air" then
if tnode and tnode.name ~= "air" then
local color = (((distance - dist) / distance) * 98) + 30
last_color = string.format ("%02X%02X%02X", color, color, color)
@@ -293,7 +293,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
minetest.remove_node (pos)
end

View File

@@ -29,18 +29,6 @@ end
local function get_barrel_pos (pos)
local barrel = get_cannon_barrel (pos)
if barrel then
return barrel:get_pos ()
end
return nil
end
local function get_barrel_angle (pos)
local node = minetest.get_node_or_nil (pos)
local barrel = get_cannon_barrel (pos)
@@ -181,11 +169,7 @@ end
local function aim_barrel_delayed (pos, aimpos)
local x = tonumber (aimpos.x) or 0
local y = tonumber (aimpos.y) or 0
local z = tonumber (aimpos.z) or 0
if z < 1 then
if (tonumber (aimpos.z) or 0) < 1 then
return
end
@@ -230,7 +214,8 @@ local function fire_cannon (pos)
if ammo_pos and ammo_angle then
local dir = vector.rotate ({ x = 0, y = 0, z = -1 }, ammo_angle)
local owner = meta:get_string ("owner")
local obj, cancel = nil, false
local obj = nil
local cancel
local spawn_pos = { x = ammo_pos.x + dir.x,
y = ammo_pos.y + dir.y,
z = ammo_pos.z + dir.z }
@@ -464,7 +449,7 @@ local function on_place (itemstack, placer, pointed_thing)
minetest.set_node (pos, { name = "lwcomponents:cannon", param1 = 0, param2 = param2 })
after_place_node (pos, placer, itemstack, pointed_thing)
if not utils.is_creative (player) then
if not utils.is_creative (placer) then
itemstack:set_count (itemstack:get_count () - 1)
end
end
@@ -499,7 +484,7 @@ local function on_place_locked (itemstack, placer, pointed_thing)
minetest.set_node (pos, { name = "lwcomponents:cannon_locked", param1 = 0, param2 = param2 })
after_place_node_locked (pos, placer, itemstack, pointed_thing)
if not utils.is_creative (player) then
if not utils.is_creative (placer) then
itemstack:set_count (itemstack:get_count () - 1)
end
end
@@ -621,7 +606,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
on_destruct (pos)
minetest.remove_node (pos)
@@ -939,7 +923,7 @@ end
local cannon_groups = { cracky = 3 }
local cannon_groups = { cracky = 3, wires_connect = 1 }
if utils.pipeworks_supported then
cannon_groups.tubedevice = 1
cannon_groups.tubedevice_receiver = 1

View File

@@ -161,3 +161,26 @@ v0.1.26
* Added destroyer.
* Cleaned up hopper code.
* Fixed recipe for solid conductor blocks.
v0.1.27
* Bug fixes and code cleanup.
* Fixed receptor state in detector.
* Improved receptor state in digiswitch.
v0.1.28
* Added support for lwwires. Wires will not connect to conduits.
v0.1.29
* Fixed piston moving piston blanks.
v0.1.30
* Added quantity field to droppers.
* Added 'Use player when placing' setting.
v0.1.31
* Added crafter.

View File

@@ -316,7 +316,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
on_destruct (pos)
minetest.remove_node (pos)

View File

@@ -300,7 +300,6 @@ local function send_to_target (pos, target, slot)
local stack = inv:get_stack ("main", slot)
if stack and not stack:is_empty () then
local name = stack:get_name ()
local item = ItemStack (stack)
target = (target and tostring (target)) or
@@ -447,7 +446,7 @@ local function send_inventory_message (pos)
if stack and not stack:is_empty () then
local name = stack:get_name ()
local description = nil
local description
local custom = false
local pallet_index = nil
local tstack = stack:to_table ()
@@ -737,7 +736,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
on_destruct (pos)
minetest.remove_node (pos)
@@ -1026,7 +1024,7 @@ end
local conduit_groups = { cracky = 3 }
local conduit_groups = { cracky = 3, wires_connect = 1 }
if utils.pipeworks_supported then
conduit_groups.tubedevice = 1
conduit_groups.tubedevice_receiver = 1
@@ -1036,13 +1034,14 @@ end
minetest.register_node("lwcomponents:conduit", {
description = S("Conduit"),
short_description = S("Conduit"),
tiles = { "lwconduit.png" },
drawtype = "nodebox",
node_box = {
type = "connected",
fixed = { -0.375, -0.375, -0.375, 0.375, 0.375, 0.375 }, -- body
connect_top = { -0.3125, 0.3125, -0.3125, 0.3125, 0.5, 0.3125 }, -- top
connect_bottom = {-0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125}, -- down
connect_bottom = { -0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125 }, -- down
connect_front = { -0.3125, -0.3125, -0.5, 0.3125, 0.3125, -0.3125 }, -- front
connect_back = { -0.3125, -0.3125, 0.5, 0.3125, 0.3125, 0.3125 }, -- back
connect_left = { -0.5, -0.3125, -0.3125, -0.3125, 0.3125, 0.3125 }, -- left
@@ -1058,7 +1057,7 @@ minetest.register_node("lwcomponents:conduit", {
type = "connected",
fixed = { -0.375, -0.375, -0.375, 0.375, 0.375, 0.375 }, -- body
connect_top = { -0.3125, 0.3125, -0.3125, 0.3125, 0.5, 0.3125 }, -- top
connect_bottom = {-0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125}, -- down
connect_bottom = { -0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125 }, -- down
connect_front = { -0.3125, -0.3125, -0.5, 0.3125, 0.3125, -0.3125 }, -- front
connect_back = { -0.3125, -0.3125, 0.5, 0.3125, 0.3125, 0.3125 }, -- back
connect_left = { -0.5, -0.3125, -0.3125, -0.3125, 0.3125, 0.3125 }, -- left
@@ -1068,7 +1067,7 @@ minetest.register_node("lwcomponents:conduit", {
type = "connected",
fixed = { -0.375, -0.375, -0.375, 0.375, 0.375, 0.375 }, -- body
connect_top = { -0.3125, 0.3125, -0.3125, 0.3125, 0.5, 0.3125 }, -- top
connect_bottom = {-0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125}, -- down
connect_bottom = { -0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125 }, -- down
connect_front = { -0.3125, -0.3125, -0.5, 0.3125, 0.3125, -0.3125 }, -- front
connect_back = { -0.3125, -0.3125, 0.5, 0.3125, 0.3125, 0.3125 }, -- back
connect_left = { -0.5, -0.3125, -0.3125, -0.3125, 0.3125, 0.3125 }, -- left
@@ -1106,13 +1105,14 @@ minetest.register_node("lwcomponents:conduit", {
minetest.register_node("lwcomponents:conduit_locked", {
description = S("Conduit (locked)"),
short_description = S("Conduit (locked)"),
tiles = { "lwconduit.png" },
drawtype = "nodebox",
node_box = {
type = "connected",
fixed = { -0.375, -0.375, -0.375, 0.375, 0.375, 0.375 }, -- body
connect_top = { -0.3125, 0.3125, -0.3125, 0.3125, 0.5, 0.3125 }, -- top
connect_bottom = {-0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125}, -- down
connect_bottom = { -0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125 }, -- down
connect_front = { -0.3125, -0.3125, -0.5, 0.3125, 0.3125, -0.3125 }, -- front
connect_back = { -0.3125, -0.3125, 0.5, 0.3125, 0.3125, 0.3125 }, -- back
connect_left = { -0.5, -0.3125, -0.3125, -0.3125, 0.3125, 0.3125 }, -- left
@@ -1128,7 +1128,7 @@ minetest.register_node("lwcomponents:conduit_locked", {
type = "connected",
fixed = { -0.375, -0.375, -0.375, 0.375, 0.375, 0.375 }, -- body
connect_top = { -0.3125, 0.3125, -0.3125, 0.3125, 0.5, 0.3125 }, -- top
connect_bottom = {-0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125}, -- down
connect_bottom = { -0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125 }, -- down
connect_front = { -0.3125, -0.3125, -0.5, 0.3125, 0.3125, -0.3125 }, -- front
connect_back = { -0.3125, -0.3125, 0.5, 0.3125, 0.3125, 0.3125 }, -- back
connect_left = { -0.5, -0.3125, -0.3125, -0.3125, 0.3125, 0.3125 }, -- left
@@ -1138,7 +1138,7 @@ minetest.register_node("lwcomponents:conduit_locked", {
type = "connected",
fixed = { -0.375, -0.375, -0.375, 0.375, 0.375, 0.375 }, -- body
connect_top = { -0.3125, 0.3125, -0.3125, 0.3125, 0.5, 0.3125 }, -- top
connect_bottom = {-0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125}, -- down
connect_bottom = { -0.3125, -0.5, -0.3125, 0.3125, -0.3125, 0.3125 }, -- down
connect_front = { -0.3125, -0.3125, -0.5, 0.3125, 0.3125, -0.3125 }, -- front
connect_back = { -0.3125, -0.3125, 0.5, 0.3125, 0.3125, 0.3125 }, -- back
connect_left = { -0.5, -0.3125, -0.3125, -0.3125, 0.3125, 0.3125 }, -- left

1583
crafter.lua Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,4 @@
local utils = ...
local S = utils.S
@@ -61,6 +60,26 @@ minetest.register_craft( {
})
minetest.register_craft( {
output = "lwcomponents:crafter",
recipe = {
{ "default:steel_ingot", "group:wood", "default:steel_ingot" },
{ "group:wood", "", "group:wood" },
{ "default:copper_ingot", "group:wood", "default:chest" },
},
})
minetest.register_craft( {
output = "lwcomponents:crafter_locked",
recipe = {
{ "default:steel_ingot", "group:wood", "default:steel_ingot" },
{ "group:wood", "", "group:wood" },
{ "default:copper_ingot", "group:wood", "default:chest_locked" },
},
})
minetest.register_craft( {
output = "lwcomponents:force_field",
recipe = {

5
crafting_mods.lua Normal file
View File

@@ -0,0 +1,5 @@
return
{
-- ["mod:crafted_item"] = { add = { "mod:name n", "mod:name n" }, remove = { "mod:name n", "mod:name n" } },
["farming:pineapple_ring"] = { add = { "farming:pineapple_top" } }
}

View File

@@ -6,3 +6,4 @@ intllib?
hopper?
digistuff?
pipeworks?
lwwires?

View File

@@ -73,13 +73,18 @@ end
local function place_node (item, pos)
local function place_node (item, pos, owner)
local node = minetest.get_node_or_nil ({ x = pos.x, y = pos.y - 1, z = pos.z })
if not node then
return false
end
if (utils.settings.use_player_when_placing and minetest.is_protected (pos, owner)) or
(not utils.settings.use_player_when_placing and minetest.is_protected (pos, "")) then
return false
end
local nodedef = utils.find_item_def (node.name)
if node.name == "air" or not nodedef or (nodedef and nodedef.buildable_to) then
@@ -95,7 +100,7 @@ local function place_node (item, pos)
nodedef = utils.find_item_def (node.name)
if node.name ~= "air" then
if not nodedef or not nodedef.buildable_to or minetest.is_protected (pos, "") then
if not nodedef or not nodedef.buildable_to then
return false
end
end
@@ -121,8 +126,14 @@ local function place_node (item, pos)
}
end
local placer
if owner ~= "" and utils.settings.use_player_when_placing then
placer = minetest.get_player_by_name (owner)
end
if itemdef and itemdef.on_place then
local result, leftover = pcall (itemdef.on_place, stack, nil, pointed_thing)
local result, leftover = pcall (itemdef.on_place, stack, placer, pointed_thing)
placed = result
@@ -145,7 +156,7 @@ local function place_node (item, pos)
if not result then
if utils.settings.alert_handler_errors then
minetest.log ("error", "after_place_node handler for "..nodename.." crashed - "..msg)
minetest.log ("error", "after_place_node handler for "..stack:get_name ().." crashed - "..msg)
end
end
end
@@ -221,7 +232,7 @@ local function deploy_item (pos, node, slot, range)
local deploypos = get_deploy_pos (pos, node.param2, range)
if item and deploypos then
if place_node (stack, deploypos) then
if place_node (stack, deploypos, meta:get_string ("owner")) then
stack:set_count (stack:get_count () - 1)
inv:set_stack ("main", slot, stack)
@@ -262,7 +273,7 @@ end
local function deployer_on (pos, node, slot, range)
local function deployer_on (pos, _node, slot, range)
local node = minetest.get_node (pos)
range = tonumber (range) or 1
@@ -428,7 +439,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
minetest.remove_node (pos)
end
@@ -631,7 +641,7 @@ end
local deployer_groups = { cracky = 3 }
local deployer_groups = { cracky = 3, wires_connect = 1 }
if utils.pipeworks_supported then
deployer_groups.tubedevice = 1
deployer_groups.tubedevice_receiver = 1
@@ -639,7 +649,7 @@ end
local deployer_on_groups = { cracky = 3, not_in_creative_inventory = 1 }
local deployer_on_groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 }
if utils.pipeworks_supported then
deployer_on_groups.tubedevice = 1
deployer_on_groups.tubedevice_receiver = 1

View File

@@ -21,7 +21,12 @@ local function mesecons_on (pos)
local node = utils.get_far_node (pos)
if node then
node.param1 = 1
if node.name == "lwcomponents:detector_locked_on" then
node.name = "lwcomponents:detector_locked_on_on"
elseif node.name == "lwcomponents:detector_on" then
node.name = "lwcomponents:detector_on_on"
end
minetest.swap_node (pos, node)
end
end
@@ -40,7 +45,12 @@ local function mesecons_off (pos)
local node = utils.get_far_node (pos)
if node then
node.param1 = 0
if node.name == "lwcomponents:detector_locked_on_on" then
node.name = "lwcomponents:detector_locked_on"
elseif node.name == "lwcomponents:detector_on_on" then
node.name = "lwcomponents:detector_on"
end
minetest.swap_node (pos, node)
end
end
@@ -145,7 +155,7 @@ local function get_entity_height (objref)
local entity = objref:get_luaentity ()
if entity and entity.name then
def = minetest.registered_entities[entity.name]
local def = minetest.registered_entities[entity.name]
if def and type (def.collisionbox) == "table" and
type (def.collisionbox[5]) == "number" then
@@ -343,30 +353,21 @@ end
local function start_detector (pos)
local node = minetest.get_node (pos)
local meta = minetest.get_meta (pos)
if node and meta then
if node then
if node.name == "lwcomponents:detector" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:detector_on"
if meta then
node.name = "lwcomponents:detector_on"
minetest.swap_node (pos, node)
minetest.get_node_timer (pos):start (detect_interval)
update_form_spec (pos)
end
minetest.swap_node (pos, node)
minetest.get_node_timer (pos):start (detect_interval)
update_form_spec (pos)
elseif node.name == "lwcomponents:detector_locked" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:detector_locked_on"
if meta then
node.name = "lwcomponents:detector_locked_on"
minetest.swap_node (pos, node)
minetest.get_node_timer (pos):start (detect_interval)
update_form_spec (pos)
end
minetest.swap_node (pos, node)
minetest.get_node_timer (pos):start (detect_interval)
update_form_spec (pos)
end
end
@@ -376,32 +377,25 @@ end
local function stop_detector (pos)
local node = minetest.get_node (pos)
local meta = minetest.get_meta (pos)
if node and meta then
if node.name == "lwcomponents:detector_on" then
local meta = minetest.get_meta (pos)
if node then
if node.name == "lwcomponents:detector_on" or
node.name == "lwcomponents:detector_on_on" then
node.name = "lwcomponents:detector"
if meta then
node.name = "lwcomponents:detector"
minetest.swap_node (pos, node)
minetest.get_node_timer (pos):stop ()
mesecons_off (pos)
update_form_spec (pos)
minetest.swap_node (pos, node)
minetest.get_node_timer (pos):stop ()
mesecons_off (pos)
update_form_spec (pos)
end
elseif node.name == "lwcomponents:detector_locked_on" or
node.name == "lwcomponents:detector_locked_on_on" then
node.name = "lwcomponents:detector_locked"
elseif node.name == "lwcomponents:detector_locked_on" then
local meta = minetest.get_meta (pos)
if meta then
node.name = "lwcomponents:detector_locked"
minetest.swap_node (pos, node)
minetest.get_node_timer (pos):stop ()
mesecons_off (pos)
update_form_spec (pos)
end
minetest.swap_node (pos, node)
minetest.get_node_timer (pos):stop ()
mesecons_off (pos)
update_form_spec (pos)
end
end
@@ -565,7 +559,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
on_destruct (pos)
minetest.remove_node (pos)
@@ -698,16 +691,31 @@ end
local function mesecon_support ()
local function mesecon_support_on ()
if utils.mesecon_supported then
return
{
receptor =
{
state = utils.mesecon_state_on,
rules = function (node)
return (node.param1 == 0 and { }) or utils.mesecon_default_rules
end
rules = utils.mesecon_default_rules
}
}
end
return nil
end
local function mesecon_support_off ()
if utils.mesecon_supported then
return
{
receptor =
{
state = utils.mesecon_state_off,
rules = utils.mesecon_default_rules
}
}
end
@@ -722,7 +730,7 @@ minetest.register_node("lwcomponents:detector", {
tiles = { "lwdetector_face.png", "lwdetector_face.png", "lwdetector.png",
"lwdetector.png", "lwdetector.png", "lwdetector_face.png"},
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -732,7 +740,7 @@ minetest.register_node("lwcomponents:detector", {
drop = "lwcomponents:detector",
_digistuff_channelcopier_fieldname = "channel",
mesecons = mesecon_support (),
mesecons = mesecon_support_off (),
digiline = digilines_support (),
on_destruct = on_destruct,
@@ -751,7 +759,7 @@ minetest.register_node("lwcomponents:detector_locked", {
tiles = { "lwdetector_face.png", "lwdetector_face.png", "lwdetector.png",
"lwdetector.png", "lwdetector.png", "lwdetector_face.png"},
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -761,7 +769,7 @@ minetest.register_node("lwcomponents:detector_locked", {
drop = "lwcomponents:detector_locked",
_digistuff_channelcopier_fieldname = "channel",
mesecons = mesecon_support (),
mesecons = mesecon_support_off (),
digiline = digilines_support (),
on_destruct = on_destruct,
@@ -780,7 +788,7 @@ minetest.register_node("lwcomponents:detector_on", {
tiles = { "lwdetector_face_on.png", "lwdetector_face_on.png", "lwdetector.png",
"lwdetector.png", "lwdetector.png", "lwdetector_face_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -790,7 +798,7 @@ minetest.register_node("lwcomponents:detector_on", {
drop = "lwcomponents:detector",
_digistuff_channelcopier_fieldname = "channel",
mesecons = mesecon_support (),
mesecons = mesecon_support_off (),
digiline = digilines_support (),
on_destruct = on_destruct,
@@ -809,7 +817,7 @@ minetest.register_node("lwcomponents:detector_locked_on", {
tiles = { "lwdetector_face_on.png", "lwdetector_face_on.png", "lwdetector.png",
"lwdetector.png", "lwdetector.png", "lwdetector_face_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -819,7 +827,65 @@ minetest.register_node("lwcomponents:detector_locked_on", {
drop = "lwcomponents:detector_locked",
_digistuff_channelcopier_fieldname = "channel",
mesecons = mesecon_support (),
mesecons = mesecon_support_off (),
digiline = digilines_support (),
on_destruct = on_destruct,
on_receive_fields = on_receive_fields,
can_dig = can_dig,
after_place_node = after_place_node_locked,
on_blast = on_blast,
on_timer = on_timer,
on_rightclick = on_rightclick
})
minetest.register_node("lwcomponents:detector_on_on", {
description = S("Detector"),
tiles = { "lwdetector_face_on.png", "lwdetector_face_on.png", "lwdetector.png",
"lwdetector.png", "lwdetector.png", "lwdetector_face_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
paramtype2 = "facedir",
param2 = 1,
floodable = false,
drop = "lwcomponents:detector",
_digistuff_channelcopier_fieldname = "channel",
mesecons = mesecon_support_on (),
digiline = digilines_support (),
on_destruct = on_destruct,
on_receive_fields = on_receive_fields,
can_dig = can_dig,
after_place_node = after_place_node,
on_blast = on_blast,
on_timer = on_timer,
on_rightclick = on_rightclick
})
minetest.register_node("lwcomponents:detector_locked_on_on", {
description = S("Detector (locked)"),
tiles = { "lwdetector_face_on.png", "lwdetector_face_on.png", "lwdetector.png",
"lwdetector.png", "lwdetector.png", "lwdetector_face_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
paramtype2 = "facedir",
param2 = 1,
floodable = false,
drop = "lwcomponents:detector_locked",
_digistuff_channelcopier_fieldname = "channel",
mesecons = mesecon_support_on (),
digiline = digilines_support (),
on_destruct = on_destruct,

View File

@@ -8,8 +8,6 @@ if utils.digilines_supported and utils.mesecon_supported then
local function get_mesecon_rule_for_side (side)
local base = nil
if side == "white" then
return { { x = 0, y = 1, z = 0 } }
elseif side == "black" then
@@ -108,12 +106,59 @@ end
local function get_powered_rules (node)
local rules = { }
if is_side_on (node.param1, "switch") then
rules = table.copy (utils.mesecon_default_rules)
if is_side_on (node.param1, "white") then
rules[#rules + 1] = get_mesecon_rule_for_side ("white")[1]
end
if is_side_on (node.param1, "black") then
rules[#rules + 1] = get_mesecon_rule_for_side ("black")[1]
end
else
local sides =
{
"white",
"black",
"red",
"green",
"blue",
"yellow",
}
for _, side in ipairs (sides) do
if is_side_on (node.param1, side) then
rules[#rules + 1] = get_mesecon_rule_for_side (side)[1]
end
end
end
return rules
end
local function get_node_name (node)
if node.param1 ~= 0 then
return "lwcomponents:digiswitch_on"
end
return "lwcomponents:digiswitch"
end
local function switch_on (pos, side)
utils.mesecon_receptor_on (pos, get_mesecon_rule_for_side (side))
local node = utils.get_far_node (pos)
if node then
node.param1 = set_side_bit (node.param1, side, true)
node.name = get_node_name (node)
minetest.swap_node (pos, node)
end
end
@@ -126,6 +171,7 @@ local function switch_off (pos, side)
local node = utils.get_far_node (pos)
if node then
node.param1 = set_side_bit (node.param1, side, false)
node.name = get_node_name (node)
minetest.swap_node (pos, node)
end
end
@@ -188,36 +234,41 @@ end
local function mesecon_support ()
return
{
receptor =
{
state = mesecon.state.off,
rules =
{
{ x = 0, y = 0, z = -1 },
{ x = 1, y = 0, z = 0 },
{ x = -1, y = 0, z = 0 },
{ x = 0, y = 0, z = 1 },
{ x = 1, y = 1, z = 0 },
{ x = 1, y = -1, z = 0 },
{ x = -1, y = 1, z = 0 },
{ x = -1, y = -1, z = 0 },
{ x = 0, y = 1, z = 1 },
{ x = 0, y = -1, z = 1 },
{ x = 0, y = 1, z = -1 },
{ x = 0, y = -1, z = -1 },
{ x = 0, y = 1, z = 0 },
{ x = 0, y = -1, z = 0 }
}
},
}
end
local function mesecon_support_on ()
return
{
receptor =
{
state = mesecon.state.on,
rules = function (node)
if is_side_on (node.param1, "switch") then
return utils.mesecon_default_rules
end
local r = { }
local sides =
{
"white",
"black",
"red",
"green",
"blue",
"yellow",
}
for _, side in ipairs (sides) do
if is_side_on (node.param1, side) then
r[#r + 1] = get_mesecon_rule_for_side (side)[1]
end
end
return r
end
rules = get_powered_rules
},
}
end
@@ -243,7 +294,15 @@ end
local function on_destruct (pos)
utils.mesecon_receptor_off (pos, get_mesecon_rule_for_side ())
local node = utils.get_far_node (pos)
if node then
local rules = get_powered_rules (node)
if #rules > 0 then
utils.mesecon_receptor_off (pos, rules)
end
end
end
@@ -275,7 +334,7 @@ minetest.register_node ("lwcomponents:digiswitch", {
},
paramtype = "none",
param1 = 0,
groups = { cracky = 2, oddly_breakable_by_hand = 2 },
groups = { cracky = 2, oddly_breakable_by_hand = 2, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
mesecons = mesecon_support (),
digiline = digilines_support (),
@@ -288,4 +347,32 @@ minetest.register_node ("lwcomponents:digiswitch", {
minetest.register_node ("lwcomponents:digiswitch_on", {
description = S("Digilines Switch"),
tiles = { "lwdigiswitch_white.png", "lwdigiswitch_black.png",
"lwdigiswitch_green.png", "lwdigiswitch_red.png",
"lwdigiswitch_yellow.png", "lwdigiswitch_blue.png" },
sunlight_propagates = false,
drawtype = "normal",
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
}
},
paramtype = "none",
param1 = 0,
groups = { cracky = 2, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
mesecons = mesecon_support_on (),
digiline = digilines_support (),
_digistuff_channelcopier_fieldname = "channel",
on_construct = on_construct,
on_destruct = on_destruct,
on_receive_fields = on_receive_fields,
})
end -- utils.digilines_supported and utils.mesecon_supported

View File

@@ -139,7 +139,8 @@ local function dispense_item (pos, node, slot)
item:set_count (1)
local spawn_pos = dispense_pos (pos, node)
local owner = meta:get_string ("owner")
local obj, cancel = nil, false
local obj = nil
local cancel
if utils.settings.spawn_mobs then
obj, cancel = utils.spawn_registered (name,
@@ -318,7 +319,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
minetest.remove_node (pos)
end
@@ -513,7 +513,7 @@ end
local dispenser_groups = { cracky = 3 }
local dispenser_groups = { cracky = 3, wires_connect = 1 }
if utils.pipeworks_supported then
dispenser_groups.tubedevice = 1
dispenser_groups.tubedevice_receiver = 1

View File

@@ -11,7 +11,9 @@ used. Also acts as a digilines conductor. If the hopper mod is loaded,
will take tools from the top and sides. Pipeworks tubes can push items
into and pull items from the inventory.
Only the owner can dig or access the form of the locked version.
Only the owner can dig or access the form of the locked version. To break
nodes in a protected area, the locked version must be used and the owner
must be able to dig in the area.
UI

131
docs/crafter.txt Normal file
View File

@@ -0,0 +1,131 @@
Crafter
-------
Crafters can craft items by recipe or desired output item. Crafted items
are placed in the Output inventory, along with any replacement items (for
example if a bucket of milk is used in the craft the bucket is placed in
the Output inventory as well). Source items for the craft must be in the
Input inventory. If the crafter is adjoined to a storage unit the crafter
will also use source items from it as well.
Only the owner can dig or access the form of the locked version.
Unowned crafters can only access unowned units. Owned crafters can access
units of the same owner or unowned units.
UI
Input inventory - top left, source items for crafting.
Player inventory - lower left.
Channel - digilines channel of crafter, press enter or click Set to set.
Crafting grid - center top, enter a recipe to craft.
Automatic - if checked a craft of the recipe is performed every second (if possible).
Preview - this is a preview of the item crafted from the recipe.
Craft - perform 1 craft from the recipe (if possible).
Output inventory - center bottom, where crafted and replacement items are placed.
Search - top right.
Craftable list - right, list of all items that are possible to craft from
the input items. clicking an item crafts it (if possible).
The form does not update while open. A craft from source items no longer
available will not craft.
Terms can be entered into the search field, and when enter is pressed or
the Search button is pressed, only items whose name or description contains
these terms are shown in the list. That is if they match any of the space
separated terms.
When items are placed into the crafting grid a copy is used and the item
returns to where it was taken from. When items are removed from the crafting
grid they are disposed of.
The preview displays the craft preformed by the recipe. Items cannot be
pulled from here.
The automatic crafting is only operable when the crafter is in an active
block. Mesecons and digilines operations operate in unloaded blocks.
Hoppers placed to the top or sides of a crafter will feed items into the
input. Hoppers placed below a crafter will take items from the output.
Pipeworks tubes can push items into the input, and pull items from the
output.
Mesecons
Perform 1 craft from the recipe when power is turned on (if possible).
Digilines messages
"craft [qty]"
Craft from the recipe if possible. qty is optional, if given must be an
integer between 1 to 10.
"craftitem itemname [qty]"
Craft the given item if possible. itemname must be a valid item name
(eg. "default:wood"). qty is optional, if given must be an integer
between 1 to 10.
"automatic state"
Sets the automatic running state of the crafter. state must be true or
false.
"craftable"
Sends a digilines message with it's own channel of the possible craftable
items in the following form:
{
action = "craftable",
items = {
<items>
}
}
The items key is an indexed list of items. Each item entry is
a table with the following keys:
{
name -- string, the name of the item, as <mod>:<name>
description -- string, short description of item
}
"inventory"
Sends a digilines message with it's own channel of the source items,
including any attached storage, in the following form:
{
action = "inventory",
inventory = {
<items>
}
}
The inventory key is an indexed list of items. Each item entry is
a table with the following keys:
{
name -- string, the name of the item, as <mod>:<name>
description -- string, short description of item
count -- number, the total number of this item in storage
}
Set recipe grid:
{
action = "recipe",
items = { ... }
}
items must be a string list of item names as <mod>:<name>. The grid is
fill left to right, top to bottom. Up to the first 9 items are used.
* When crafting by item the output quantities may not be as expected. The
first found recipe for the craft which is satisfied by the available
items is used. So if you have saplings and wood in the input and try
to craft sticks, if the first recipe found uses the saplings 1 stick will
be output, if wood then 4 sticks. Also, sometimes the same recipe is
registered for more than 1 item. In this case, what item will actually
be crafted is ambiguous.
* The file 'crafting_mods.lua' in the mod folder contains a list of
crafting modifications. Modify this file as necessary. The field name
is the item being crafted. Each item in the add list is added to the
output inventory. Each item in the remove list is removed from the
replacements or source storage.
* Gaining the list of craftable items is an exponential process, based
on the number of unique source items and the total number of items
available. As a guide, 320 source items and 795 total items that resulted
623 craftable items took approx. 200ms (1st gen i5 processor). This list
is only gained: when the form is opened; when the Search button is clicked;
and when the digilines "craftable" message is sent.

View File

@@ -1,5 +1,5 @@
Deployer
-------
--------
* This block is only available if digilines and/or mesecons are loaded.
Deployers place the node up to 5 nodes directly in front of them. The
@@ -9,7 +9,10 @@ Also acts as a digilines conductor. If the hopper mod is loaded, will
take items from the top and sides, and release them from the bottom.
Pipeworks tubes can push items into and pull items from the inventory.
Only the owner can dig or access the form of the locked version.
Only the owner can dig or access the form of the locked version. To place
nodes in a protected area the 'Use player when placing' setting must be
enabled, the deployer must be the locked version and the owner must be able
to place in the area.
UI

View File

@@ -1,21 +1,31 @@
DigiSwitch
----------
Digilines Switch
----------------
* This block is only available if both digilines and mesecons are loaded.
Digiswitches act as both a digilines message target and a digilines cable,
as well as a mesecons power source. They can be placed beside each other
to form a bank, horizontally or vertically.
Digilines switches act as both a digilines message target and a digilines
cable, as well as a mesecons power source. They can be placed beside each
other to form a bank, horizontally or vertically.
Right click the digiswitch to give it a channel.
Right click the digilines switch to give it a channel.
Mesecon power can be delivered at 6 sides of the digiswitch, the adjacent
4 in the (x, z), above and below. Around the connector on these sides are a
colored border indicating the side. The sides are named "red", "green",
"blue", "yellow", "white" and "black".
Mesecon power can be delivered at 6 sides of the digilines switch, the
adjacent 4 in the (x, z), above and below. Around the connector on these
sides are a colored border indicating the side. The sides are named "red",
"green", "blue", "yellow", "white" and "black".
The digilines message sent to the digiswitch dictates the action, "on" or
"off". The action can be followed with the side to act upon, separated by
a space. eg. "on white". If a side is stated only that side is acted upon.
If the side is omitted (or is invalid) all 6 sides are acted upon. If the
side name "switch" is give the power is supplied the same as a mesecons
switch (all horizontal sides, one below, this height and one above).
The digilines message sent to the digilines switch dictates the action,
"on" or "off". The action can be followed with the side to act upon,
separated by a space. eg. "on white". If a side is stated only that side
is acted upon. If the side is omitted (or is invalid) all 6 sides are
acted upon. If the side name "switch" is given the power is supplied the
same as a mesecons switch (all horizontal sides, one below, this height
and one above).
A note on connecting mesecons wires. Mesecons does not appear to allow
for some sides to be on and some off on receptors (power sources). When
any side is on the state of the digilines switch is on, but only rules for
the powered sides are defined. This means if wires are placed while in
this state only the sides that are powered will connect. When no side is
powered the state of the digilines switch is off with rules defined for
all potentially connected sides. In this state (as when first placed)
mesecons wires will connect correctly.

View File

@@ -2,7 +2,7 @@ Dropper
-------
* This block is only available if digilines and/or mesecons are loaded.
Contains an inventory and drops an item on command. Also acts as a
Contains an inventory and drops item/s on command. Also acts as a
digilines conductor. If the hopper mod is loaded, will take items from the
top and sides, and release them from the bottom. Pipeworks tubes can push
items into and pull items from the inventory.
@@ -13,29 +13,52 @@ UI
Channel - digilines channel of dropper.
Top 16 slot inventory - storage of items to drop.
Qty - the number of items dropped on an action.
Bottom 32 slot inventory - player's inventory.
Mesecons
Drops the next item when power is turned on.
Drops the next item/s when power is turned on, to the given quantity.
Digilines messages
"drop [<slot>|<itemname>] [qty]"
slot or itemname are optional. If given slot must be the number of
the dropper slot to drop from (1 to 16). itemname must be the name of
the item from the dropper to drop (eg. default:stone).
qty is optional. If given must be the number of items to drop. If
omitted the quantity set on the dropper's form is dropped.
examples:
"drop"
Drops the next item. No drop if dropper is empty.
Drops the first found item with the quantity from the dropper's form.
"drop <slot>"
Drops 1 item from the given slot (1 to 16). No drop if slot is empty.
eg. "drop 7"
"drop 7"
Drops items from slot 7 with the quantity from the dropper's form.
"drop <itemname>"
Drops 1 item of the given name. No drop if dropper does not contain the
item.
eg. "drop default:stone"
"drop default:stone"
Drops the item "default:stone" with the quantity from the dropper's form.
When an item is dropped a digilines message is sent with the dropper's
"drop 7 5"
Drops items from slot 7 with the quantity of 5.
"drop default:stone 5"
Drops the item "default:stone" with the quantity of 5.
"drop nil 5"
Drops the first found item with the quantity of 5.
If there are not enough items in the dropper (of a name or in a slot) to
fulfil the quantity, only the amount available is dropped. If no slot or
name is given the first found item is used (multiple items are not dropped
to fulfil the quantity).
When items are dropped a digilines message is sent with the dropper's
channel. The message is a table with the following keys:
{
action = "drop",
name = "<itemname>", -- name of dropped item
slot = <slot> -- slot number the item was taken from (1 to 16).
name = "<itemname>", -- name of dropped item/s
slot = <slot>, -- slot number the item/s were taken from (1 to 16). If
-- more than one slot was taken from this will be -1
qty = <number> -- the number of items dropped
}

View File

@@ -19,7 +19,7 @@ Channel - digilines channel of indexer.
Input - middle.
Output - top right.
Filter - center right.
Player inventor - lower right.
Player inventory - lower right.
When the UI is accessed the storage is scanned, and its contents are
displayed in the list. The list contains the following columns:

View File

@@ -23,7 +23,7 @@ end
local function send_drop_message (pos, slot, name)
local function send_drop_message (pos, slot, name, qty)
if utils.digilines_supported then
local meta = minetest.get_meta (pos)
@@ -36,7 +36,8 @@ local function send_drop_message (pos, slot, name)
channel,
{ action = "drop",
name = name,
slot = slot })
slot = slot,
qty = qty })
end
end
end
@@ -45,69 +46,110 @@ end
-- slot:
-- nil - next item, no drop if empty
-- number - 1 item from slot, no drop if empty
-- string - name of item to drop, no drop if none
local function drop_item (pos, node, slot)
-- nil or "nil"- next item, no drop if empty, max qty or less of first found item
-- number - qty items from slot, no drop if empty, max qty or less
-- string - name of item to drop, no drop if none, max qty or less
local function drop_item (pos, node, slot, qty)
local meta = minetest.get_meta (pos)
if meta then
local inv = meta:get_inventory ()
if inv then
if not slot then
local item
if qty then
qty = tonumber (qty)
end
if not qty then
qty = tonumber (meta:get_string ("quantity")) or 1
end
qty = math.max (qty, 1)
if not slot or (type (slot) == "string" and slot == "nil") then
local slots = inv:get_size ("main")
for i = 1, slots do
local stack = inv:get_stack ("main", i)
if not stack:is_empty () and stack:get_count () > 0 then
slot = i
item = stack:get_name ()
break
end
end
elseif type (slot) == "string" then
local name = slot
slot = nil
local slots = inv:get_size ("main")
for i = 1, slots do
local stack = inv:get_stack ("main", i)
if not stack:is_empty () and stack:get_count () > 0 then
if name == stack:get_name () then
slot = i
break
end
end
end
elseif type (slot) == "string" then
item = slot
slot = nil
else
slot = tonumber (slot)
end
if slot then
local stack = inv:get_stack ("main", slot)
if not stack:is_empty () and stack:get_count () > 0 then
local name = stack:get_name ()
local item = ItemStack (stack)
item = stack:get_name ()
local drop
if item then
item:set_count (1)
stack:set_count (stack:get_count () - 1)
if stack:get_count () >= qty then
drop = qty
stack:set_count (stack:get_count () - qty)
inv:set_stack ("main", slot, stack)
utils.item_drop (item, nil, drop_pos (pos, node))
send_drop_message (pos, slot, name)
return true, slot, name
else
drop = stack:get_count ()
inv:set_stack ("main", slot, nil)
end
if drop > 0 then
utils.item_drop (ItemStack (item.." "..drop), nil, drop_pos (pos, node))
send_drop_message (pos, slot, item, drop)
return true, slot, item
end
end
elseif item then
local slots = inv:get_size ("main")
local drop = 0
for i = 1, slots do
local stack = inv:get_stack ("main", i)
if not stack:is_empty () and stack:get_count () > 0 then
if item == stack:get_name () then
local remain = qty - drop
slot = (slot and -1) or i
if stack:get_count () > remain then
stack:set_count (stack:get_count () - remain)
drop = qty
inv:set_stack ("main", i, stack)
else
drop = drop + stack:get_count ()
inv:set_stack ("main", i, nil)
end
end
end
if drop == qty then
break
end
end
if drop > 0 then
utils.item_drop (ItemStack (item.." "..drop), nil, drop_pos (pos, node))
send_drop_message (pos, slot, item, drop)
return true, slot, item
end
end
end
@@ -118,19 +160,27 @@ end
local function after_place_base (pos, placer, itemstack, pointed_thing)
local meta = minetest.get_meta (pos)
local spec =
local function get_formspec ()
return
"formspec_version[3]\n"..
"size[11.75,13.75;true]\n"..
"field[1.0,1.0;4.0,0.8;channel;Channel;${channel}]\n"..
"button[5.5,1.0;2.0,0.8;setchannel;Set]\n"..
"list[context;main;3.5,2.5;4,4;]\n"..
"list[current_player;main;1.0,8.0;8,4;]\n"..
"listring[]"
"field[1.0,1.0;4.0,0.8;channel;Channel;${channel}]"..
"button[5.5,1.0;2.0,0.8;setchannel;Set]"..
"list[context;main;1.0,2.5;4,4;]"..
"list[current_player;main;1.0,8.0;8,4;]"..
"listring[]"..
"field[6.5,2.9;2.75,0.8;quantity;Qty;${quantity}]"..
"button[9.25,2.9;1.5,0.8;setquantity;Set]"
end
local function after_place_base (pos, placer, itemstack, pointed_thing)
local meta = minetest.get_meta (pos)
meta:set_string ("inventory", "{ main = { } }")
meta:set_string ("formspec", spec)
meta:set_string ("quantity", "1")
meta:set_string ("formspec", get_formspec ())
local inv = meta:get_inventory ()
@@ -180,6 +230,15 @@ local function on_receive_fields (pos, formname, fields, sender)
meta:set_string ("channel", fields.channel)
end
end
if fields.setquantity then
local meta = minetest.get_meta (pos)
if meta then
local qty = math.max (tonumber (fields.quantity or 1) or 1, 1)
meta:set_string ("quantity", tostring (qty))
end
end
end
@@ -254,7 +313,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
minetest.remove_node (pos)
end
@@ -286,6 +344,15 @@ local function on_rightclick (pos, node, clicker, itemstack, pointed_thing)
"lwcomponents:component_privately_owned",
spec)
end
else
local meta = minetest.get_meta (pos)
if meta then
if meta:get_string ("quantity") == "" then
meta:set_string ("quantity", "1")
meta:set_string ("formspec", get_formspec ())
end
end
end
return itemstack
@@ -323,7 +390,13 @@ local function digilines_support ()
m[2] = tonumber (m[2])
end
drop_item (pos, node, m[2])
if m[3] and tonumber (m[3]) then
m[3] = tonumber (m[3])
else
m[3] = nil
end
drop_item (pos, node, m[2], m[3])
end
end
end
@@ -449,7 +522,7 @@ end
local dropper_groups = { cracky = 3 }
local dropper_groups = { cracky = 3, wires_connect = 1 }
if utils.pipeworks_supported then
dropper_groups.tubedevice = 1
dropper_groups.tubedevice_receiver = 1

View File

@@ -22,8 +22,8 @@ local function get_dummy_player (as_player, name, pos, look_dir, controls, veloc
end
object.set_pos = function (self, pos)
obj_pos = vector.new (pos)
object.set_pos = function (self, _pos)
obj_pos = vector.new (_pos)
end
@@ -37,8 +37,8 @@ local function get_dummy_player (as_player, name, pos, look_dir, controls, veloc
end
object.move_to = function (self, pos, continuous)
obj_pos = vector.new (pos)
object.move_to = function (self, _pos, continuous)
obj_pos = vector.new (_pos)
end
@@ -55,8 +55,8 @@ local function get_dummy_player (as_player, name, pos, look_dir, controls, veloc
end
object.set_hp = function (self, hp, reason)
obj_hp = hp
object.set_hp = function (self, _hp, reason)
obj_hp = _hp
end
@@ -134,8 +134,8 @@ local function get_dummy_player (as_player, name, pos, look_dir, controls, veloc
end
object.set_properties = function (self, properties)
obj_properties = table.copy (properties or { })
object.set_properties = function (self, _properties)
obj_properties = table.copy (_properties or { })
end
@@ -237,7 +237,6 @@ local function get_dummy_player (as_player, name, pos, look_dir, controls, veloc
object.set_fov = function (self, fov, is_multiplier, transition_time)
obj_breath = value
end

View File

@@ -249,9 +249,6 @@ local function explode_entities (pos, radius, damage, drops)
if def and def.on_rightclick then
def.on_rightclick (obj:get_pos (), ItemStack (), child)
local ent_damage = ((radius - dist) / radius * damage / 2) + (damage / 2)
local reason = { type = "set_hp", from = "lwcomponents" }
child:add_velocity (vel)
child:set_hp (child:get_hp () - ent_damage, reason)
end

10
fan.lua
View File

@@ -45,7 +45,6 @@ end
local function blow (pos)
local meta = minetest.get_meta (pos)
local node = minetest.get_node (pos)
local dir = direction_vector (node)
local reach = 5
@@ -211,7 +210,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
minetest.remove_node (pos)
end
@@ -343,7 +341,7 @@ minetest.register_node("lwcomponents:fan", {
tiles = { "lwfan.png", "lwfan.png", "lwfan.png",
"lwfan.png", "lwfan.png", "lwfan_face.png"},
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -371,7 +369,7 @@ minetest.register_node("lwcomponents:fan_locked", {
tiles = { "lwfan.png", "lwfan.png", "lwfan.png",
"lwfan.png", "lwfan.png", "lwfan_face.png"},
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -399,7 +397,7 @@ minetest.register_node("lwcomponents:fan_on", {
tiles = { "lwfan.png", "lwfan.png", "lwfan.png",
"lwfan.png", "lwfan.png", "lwfan_face_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -428,7 +426,7 @@ minetest.register_node("lwcomponents:fan_locked_on", {
tiles = { "lwfan.png", "lwfan.png", "lwfan.png",
"lwfan.png", "lwfan.png", "lwfan_face_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,

View File

@@ -136,7 +136,6 @@ local function check_fuel (pos, used)
end
if used > power then
power = 0
meta:set_float ("power", 0)
return false
@@ -598,7 +597,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
on_destruct (pos)
minetest.remove_node (pos)
@@ -822,7 +820,7 @@ end
local force_field_groups = { cracky = 3 }
local force_field_groups = { cracky = 3, wires_connect = 1 }
if utils.pipeworks_supported then
force_field_groups.tubedevice = 1
force_field_groups.tubedevice_receiver = 1
@@ -830,7 +828,7 @@ end
local force_field_on_groups = { cracky = 3, not_in_creative_inventory = 1 }
local force_field_on_groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 }
if utils.pipeworks_supported then
force_field_on_groups.tubedevice = 1
force_field_on_groups.tubedevice_receiver = 1

View File

@@ -126,14 +126,14 @@ local function draw_map (pos, map)
end
if draw then
local holonode = hologram_block[line[z]]
local colornode = hologram_block[line[z]]
if node then
utils.destroy_node (holopos)
end
if holonode then
minetest.set_node (holopos, { name = holonode.node })
if colornode then
minetest.set_node (holopos, { name = colornode.node })
local nodemeta = minetest.get_meta (holopos)
@@ -231,7 +231,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
minetest.remove_node (pos)
end

View File

@@ -260,8 +260,8 @@ local function run_hopper_action (pos)
if registered_dest_invs then
local placer = get_player_object (pos)
local src_pos = vector.add (pos, get_input_dir (node))
local drop = nil
local stack = nil
local drop
local stack
local slot = nil
local src_inv_name = nil

View File

@@ -1,4 +1,4 @@
local version = "0.1.26"
local version = "0.1.31"
local mod_storage = minetest.get_mod_storage ()
@@ -17,7 +17,7 @@ local modpath = minetest.get_modpath ("lwcomponents")
loadfile (modpath.."/settings.lua") (utils)
utils.get_dummy_player = loadfile (modpath.."/dummy_player.lua") ()
loadfile (modpath.."/utils.lua") (utils, mod_storage)
loadfile (modpath.."/utils.lua") (utils)
loadfile (modpath.."/explode.lua") (utils)
loadfile (modpath.."/api.lua") (utils)
utils.connections = loadfile (modpath.."/connections.lua") ()
@@ -40,6 +40,7 @@ loadfile (modpath.."/pistons.lua") (utils)
loadfile (modpath.."/through_wire.lua") (utils)
loadfile (modpath.."/camera.lua") (utils)
loadfile (modpath.."/storage.lua") (utils)
loadfile (modpath.."/crafter.lua") (utils)
loadfile (modpath.."/force_field.lua") (utils)
loadfile (modpath.."/destroyer.lua") (utils)
loadfile (modpath.."/extras.lua") (utils)

View File

@@ -3,4 +3,4 @@ description = Various components for mesecons and digilines.
title = LWComponents
name = lwcomponents
depends = default
optional_depends = mesecons, digilines, unifieddyes, intllib, hopper, digistuff, pipeworks
optional_depends = mesecons, digilines, unifieddyes, intllib, hopper, digistuff, pipeworks, lwwires

View File

@@ -237,7 +237,7 @@ local function move_entities (list, move, players)
for _, entry in ipairs (list) do
if entry.obj then
if players or not entry.obj:is_player () then
local pos = nil
local pos
if entry.obj:is_player () then
pos = vector.add (entry.pos, { x = move.x, y = move.y + 0.1, z = move.z })
@@ -311,7 +311,7 @@ local function move_nodes (list, move)
end
if list[i].timeout > 0 then
timer = minetest.get_node_timer (pos)
local timer = minetest.get_node_timer (pos)
if timer then
timer:set (list[i].timeout, list[i].elapsed)
@@ -334,7 +334,7 @@ local function move_nodes (list, move)
end
if list[i].timeout > 0 then
timer = minetest.get_node_timer (pos)
local timer = minetest.get_node_timer (pos)
if timer then
timer:set (list[i].timeout, list[i].elapsed)

View File

@@ -150,6 +150,11 @@ local function add_pos_to_list (pos, dir, movedir, node_list, check_list)
return 1
end
if node.name == "lwcomponents:piston_blank_1" or
node.name == "lwcomponents:piston_blank_2" then
return 0
end
local meta = minetest.get_meta (pos)
local timer = minetest.get_node_timer (pos)
@@ -884,7 +889,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
minetest.remove_node (pos)
end
@@ -1070,7 +1074,7 @@ minetest.register_node("lwcomponents:piston_blank_1", {
minetest.register_node("lwcomponents:piston_blank_2", {
description = S("Piston blank"),
drawtype = "airlike",
paramtype = "none",
paramtype = "light",
param1 = 0,
paramtype2 = "facedir",
param2 = 0,
@@ -1084,15 +1088,14 @@ minetest.register_node("lwcomponents:piston_blank_2", {
light_source = 0,
sunlight_propagates = true,
walkable = true,
pointable = false,
diggable = false,
pointable = true,
diggable = true,
climbable = false,
buildable_to = false,
floodable = false,
is_ground_content = false,
drop = "",
groups = { not_in_creative_inventory = 1 },
paramtype = "light",
groups = { cracky = 3, not_in_creative_inventory = 1 },
-- unaffected by explosions
on_blast = function() end,
})
@@ -1105,7 +1108,7 @@ minetest.register_node("lwcomponents:piston", {
"lwcomponents_piston_right.png", "lwcomponents_piston_left.png",
"lwcomponents_piston_base.png", "lwcomponents_piston_pusher.png" },
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "light",
param1 = 0,
@@ -1152,7 +1155,7 @@ minetest.register_node("lwcomponents:piston_1", {
},
},
is_ground_content = false,
groups = { cracky = 3 , not_in_creative_inventory = 1 },
groups = { cracky = 3 , not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "light",
param1 = 0,
@@ -1199,7 +1202,7 @@ minetest.register_node("lwcomponents:piston_2", {
},
},
is_ground_content = false,
groups = { cracky = 3 , not_in_creative_inventory = 1 },
groups = { cracky = 3 , not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "light",
param1 = 0,
@@ -1229,7 +1232,7 @@ minetest.register_node("lwcomponents:piston_sticky", {
"lwcomponents_piston_right.png", "lwcomponents_piston_left.png",
"lwcomponents_piston_base.png", "lwcomponents_piston_pusher_sticky.png" },
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "light",
param1 = 0,
@@ -1276,7 +1279,7 @@ minetest.register_node("lwcomponents:piston_sticky_1", {
},
},
is_ground_content = false,
groups = { cracky = 3 , not_in_creative_inventory = 1 },
groups = { cracky = 3 , not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "light",
param1 = 0,
@@ -1323,7 +1326,7 @@ minetest.register_node("lwcomponents:piston_sticky_2", {
},
},
is_ground_content = false,
groups = { cracky = 3 , not_in_creative_inventory = 1 },
groups = { cracky = 3 , not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "light",
param1 = 0,

View File

@@ -69,7 +69,6 @@ end
local function player_button_turnoff (pos)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
if node.name == "lwcomponents:player_button_on" then
node.name = "lwcomponents:player_button_off"
@@ -85,7 +84,7 @@ end
minetest.register_node ("lwcomponents:player_button", {
description = "Player Button",
description = S("Player Button"),
drawtype = "nodebox",
tiles = {
"lwplayer_button_side.png",
@@ -134,7 +133,7 @@ minetest.register_node ("lwcomponents:player_button", {
minetest.register_node ("lwcomponents:player_button_off", {
description = "Player Button",
description = S("Player Button"),
drawtype = "nodebox",
tiles = {
"lwplayer_button_side.png",
@@ -184,7 +183,7 @@ minetest.register_node ("lwcomponents:player_button_off", {
minetest.register_node ("lwcomponents:player_button_on", {
description = "Player Button",
description = S("Player Button"),
drawtype = "nodebox",
tiles = {
"lwplayer_button_side.png",

View File

@@ -97,13 +97,8 @@ local function punch (pos)
punched = true
end
elseif object[i].get_luaentity and object[i]:get_luaentity () and
object[i]:get_luaentity ().name and
object[i]:get_luaentity ().name == "__builtin:item" then
-- don't punch drops
elseif object[i].get_pos and object[i]:get_pos () then
elseif not utils.is_drop (object[i]) and object[i].get_pos
and object[i]:get_pos () then
-- entity
if meta:get_string ("entities") == "true" then
@@ -180,28 +175,19 @@ end
local function start_puncher (pos)
local node = minetest.get_node (pos)
local meta = minetest.get_meta (pos)
if node and meta then
if node then
if node.name == "lwcomponents:puncher" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:puncher_on"
if meta then
node.name = "lwcomponents:puncher_on"
minetest.swap_node (pos, node)
update_form_spec (pos)
end
minetest.swap_node (pos, node)
update_form_spec (pos)
elseif node.name == "lwcomponents:puncher_locked" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:puncher_locked_on"
if meta then
node.name = "lwcomponents:puncher_locked_on"
minetest.swap_node (pos, node)
update_form_spec (pos)
end
minetest.swap_node (pos, node)
update_form_spec (pos)
end
end
@@ -211,28 +197,19 @@ end
local function stop_puncher (pos)
local node = minetest.get_node (pos)
local meta = minetest.get_meta (pos)
if node and meta then
if node then
if node.name == "lwcomponents:puncher_on" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:puncher"
if meta then
node.name = "lwcomponents:puncher"
minetest.swap_node (pos, node)
update_form_spec (pos)
end
minetest.swap_node (pos, node)
update_form_spec (pos)
elseif node.name == "lwcomponents:puncher_locked_on" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:puncher_locked"
if meta then
node.name = "lwcomponents:puncher_locked"
minetest.swap_node (pos, node)
update_form_spec (pos)
end
minetest.swap_node (pos, node)
update_form_spec (pos)
end
end
@@ -365,7 +342,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
minetest.remove_node (pos)
end
@@ -506,7 +482,7 @@ minetest.register_node("lwcomponents:puncher", {
tiles = { "lwpuncher_face.png", "lwpuncher_face.png", "lwpuncher.png",
"lwpuncher.png", "lwpuncher.png", "lwpuncher_face.png"},
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -533,7 +509,7 @@ minetest.register_node("lwcomponents:puncher_locked", {
tiles = { "lwpuncher_face.png", "lwpuncher_face.png", "lwpuncher.png",
"lwpuncher.png", "lwpuncher.png", "lwpuncher_face.png"},
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -560,7 +536,7 @@ minetest.register_node("lwcomponents:puncher_on", {
tiles = { "lwpuncher_face_on.png", "lwpuncher_face_on.png", "lwpuncher.png",
"lwpuncher.png", "lwpuncher.png", "lwpuncher_face_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -587,7 +563,7 @@ minetest.register_node("lwcomponents:puncher_locked_on", {
tiles = { "lwpuncher_face_on.png", "lwpuncher_face_on.png", "lwpuncher.png",
"lwpuncher.png", "lwpuncher.png", "lwpuncher_face_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,

View File

@@ -13,7 +13,7 @@ CC BY-SA 3.0
Version
=======
0.1.26
0.1.31
Minetest Version
@@ -35,6 +35,7 @@ intllib
hopper
digistuff
pipeworks
lwwires
Installation
@@ -66,10 +67,11 @@ Various components for mesecons and digilines.
* Conduit, connected in a circuit to move items.
* Cannon, shoots an item on command with directional aiming (plus 3 shells).
* Double (optionally single) reach pistons and sticky pistons.
* Digiswitch, digilines controlled mesecons power.
* Digilines Switch, digilines controlled mesecons power.
* Movefloor, similar to vertical mesecons movestone.
* Camera, takes a representative image.
* Storage, indexed storage units.
* Crafter, crafts by recipe or by item, and can pull from storage units.
* Hoppers, that are more compatible with this mod.
* Force Field Generator, repels players and mobs within a radius.
* Mesecons Through Wire, transmits through 1 to 2 solid blocks.
@@ -104,5 +106,9 @@ Maximum piston nodes
Maximum nodes a piston can push.
Default: 15
Use player when placing
Use the owner player of locked versions when placing nodes, otherwise
no player is used.
Default: false
------------------------------------------------------------------------

View File

@@ -12,6 +12,9 @@ utils.settings.alert_handler_errors =
utils.settings.max_piston_nodes =
tonumber (minetest.settings:get ("lwcomponents_max_piston_nodes") or 15)
utils.settings.use_player_when_placing =
minetest.settings:get_bool ("lwcomponents_use_player_when_placing", false)
utils.settings.default_stack_max =
tonumber (minetest.settings:get ("default_stack_max")) or 99

View File

@@ -6,3 +6,6 @@ lwcomponents_alert_handler_errors (Alert handler errors) bool true
# Maximum nodes a piston can push.
lwcomponents_max_piston_nodes (Maximum piston nodes) int 15
# Use owner player when placing nodes.
lwcomponents_use_player_when_placing (Use player when placing) bool false

129
siren.lua
View File

@@ -103,30 +103,21 @@ end
local function start_siren (pos)
local node = minetest.get_node (pos)
local meta = minetest.get_meta (pos)
if node and meta then
if node then
if node.name == "lwcomponents:siren" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:siren_on"
if meta then
node.name = "lwcomponents:siren_on"
stop_sound (pos)
minetest.swap_node (pos, node)
update_form_spec (pos)
end
stop_sound (pos)
minetest.swap_node (pos, node)
update_form_spec (pos)
elseif node.name == "lwcomponents:siren_locked" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:siren_locked_on"
if meta then
node.name = "lwcomponents:siren_locked_on"
stop_sound (pos)
minetest.swap_node (pos, node)
update_form_spec (pos)
end
stop_sound (pos)
minetest.swap_node (pos, node)
update_form_spec (pos)
end
end
@@ -136,34 +127,25 @@ end
local function stop_siren (pos)
local node = minetest.get_node (pos)
local meta = minetest.get_meta (pos)
if node and meta then
if node then
if node.name == "lwcomponents:siren_on" or
node.name == "lwcomponents:siren_alarm" then
local meta = minetest.get_meta (pos)
node.name == "lwcomponents:siren_alarm" then
node.name = "lwcomponents:siren"
if meta then
node.name = "lwcomponents:siren"
minetest.get_node_timer (pos):stop ()
stop_sound (pos)
minetest.swap_node (pos, node)
update_form_spec (pos)
end
minetest.get_node_timer (pos):stop ()
stop_sound (pos)
minetest.swap_node (pos, node)
update_form_spec (pos)
elseif node.name == "lwcomponents:siren_locked_on" or
node.name == "lwcomponents:siren_locked_alarm" then
local meta = minetest.get_meta (pos)
node.name == "lwcomponents:siren_locked_alarm" then
node.name = "lwcomponents:siren_locked"
if meta then
node.name = "lwcomponents:siren_locked"
minetest.get_node_timer (pos):stop ()
stop_sound (pos)
minetest.swap_node (pos, node)
update_form_spec (pos)
end
minetest.get_node_timer (pos):stop ()
stop_sound (pos)
minetest.swap_node (pos, node)
update_form_spec (pos)
end
end
@@ -173,30 +155,21 @@ end
local function start_alarm (pos)
local node = minetest.get_node (pos)
local meta = minetest.get_meta (pos)
if node and meta then
if node then
if node.name == "lwcomponents:siren_on" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:siren_alarm"
if meta then
node.name = "lwcomponents:siren_alarm"
minetest.get_node_timer (pos):start (sound_interval)
start_sound (pos)
minetest.swap_node (pos, node)
end
minetest.get_node_timer (pos):start (sound_interval)
start_sound (pos)
minetest.swap_node (pos, node)
elseif node.name == "lwcomponents:siren_locked_on" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:siren_locked_alarm"
if meta then
node.name = "lwcomponents:siren_locked_alarm"
minetest.get_node_timer (pos):start (sound_interval)
start_sound (pos)
minetest.swap_node (pos, node)
end
minetest.get_node_timer (pos):start (sound_interval)
start_sound (pos)
minetest.swap_node (pos, node)
end
end
@@ -206,30 +179,21 @@ end
local function stop_alarm (pos)
local node = minetest.get_node (pos)
local meta = minetest.get_meta (pos)
if node and meta then
if node then
if node.name == "lwcomponents:siren_alarm" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:siren_on"
if meta then
node.name = "lwcomponents:siren_on"
minetest.get_node_timer (pos):stop ()
stop_sound (pos)
minetest.swap_node (pos, node)
end
minetest.get_node_timer (pos):stop ()
stop_sound (pos)
minetest.swap_node (pos, node)
elseif node.name == "lwcomponents:siren_locked_alarm" then
local meta = minetest.get_meta (pos)
node.name = "lwcomponents:siren_locked_on"
if meta then
node.name = "lwcomponents:siren_locked_on"
minetest.get_node_timer (pos):stop ()
stop_sound (pos)
minetest.swap_node (pos, node)
end
minetest.get_node_timer (pos):stop ()
stop_sound (pos)
minetest.swap_node (pos, node)
end
end
@@ -365,7 +329,6 @@ local function on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
on_destruct (pos)
minetest.remove_node (pos)
@@ -528,7 +491,7 @@ minetest.register_node("lwcomponents:siren", {
tiles = { "lwsiren_base.png", "lwsiren_base.png", "lwsiren.png",
"lwsiren.png", "lwsiren.png", "lwsiren.png"},
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -555,7 +518,7 @@ minetest.register_node("lwcomponents:siren_locked", {
tiles = { "lwsiren_base.png", "lwsiren_base.png", "lwsiren.png",
"lwsiren.png", "lwsiren.png", "lwsiren.png"},
is_ground_content = false,
groups = { cracky = 3 },
groups = { cracky = 3, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -582,7 +545,7 @@ minetest.register_node("lwcomponents:siren_on", {
tiles = { "lwsiren_base.png", "lwsiren_base.png", "lwsiren_on.png",
"lwsiren_on.png", "lwsiren_on.png", "lwsiren_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -609,7 +572,7 @@ minetest.register_node("lwcomponents:siren_locked_on", {
tiles = { "lwsiren_base.png", "lwsiren_base.png", "lwsiren_on.png",
"lwsiren_on.png", "lwsiren_on.png", "lwsiren_on.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -636,7 +599,7 @@ minetest.register_node("lwcomponents:siren_alarm", {
tiles = { "lwsiren_base.png", "lwsiren_base.png", "lwsiren_alarm.png",
"lwsiren_alarm.png", "lwsiren_alarm.png", "lwsiren_alarm.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,
@@ -664,7 +627,7 @@ minetest.register_node("lwcomponents:siren_locked_alarm", {
tiles = { "lwsiren_base.png", "lwsiren_base.png", "lwsiren_alarm.png",
"lwsiren_alarm.png", "lwsiren_alarm.png", "lwsiren_alarm.png"},
is_ground_content = false,
groups = { cracky = 3, not_in_creative_inventory = 1 },
groups = { cracky = 3, not_in_creative_inventory = 1, wires_connect = 1 },
sounds = default.node_sound_stone_defaults (),
paramtype = "none",
param1 = 0,

View File

@@ -35,6 +35,7 @@ mesecon.register_node (":lwcomponents:solid_conductor",
groups = {
dig_immediate = 2,
ud_param2_colorable = 1,
wires_connect = 1
},
},
{
@@ -51,7 +52,8 @@ mesecon.register_node (":lwcomponents:solid_conductor",
groups = {
dig_immediate = 2,
ud_param2_colorable = 1,
not_in_creative_inventory = 1
not_in_creative_inventory = 1,
wires_connect = 1
},
}
)
@@ -101,6 +103,7 @@ mesecon.register_node (":lwcomponents:solid_horizontal_conductor",
groups = {
dig_immediate = 2,
ud_param2_colorable = 1,
wires_connect = 1
},
},
{
@@ -117,7 +120,8 @@ mesecon.register_node (":lwcomponents:solid_horizontal_conductor",
groups = {
dig_immediate = 2,
ud_param2_colorable = 1,
not_in_creative_inventory = 1
not_in_creative_inventory = 1,
wires_connect = 1
},
}
)

View File

@@ -87,7 +87,6 @@ local function unit_on_blast (pos, intensity)
end
end
on_destruct (pos)
minetest.remove_node (pos)
else -- intensity < 1.0
@@ -113,9 +112,7 @@ local function unit_on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
on_destruct (pos)
minetest.remove_node (pos)
end
end
@@ -312,7 +309,7 @@ local function get_stock_list (pos)
for k, v in pairs (inv_list) do
local stack = ItemStack (k)
local name = stack:get_name ()
local description = nil
local description
local custom = false
local pallet_index = nil
local tstack = stack:to_table ()
@@ -704,8 +701,6 @@ local function get_formspec_list (pos)
for k, v in pairs (inv_list) do
local description = k
local stack = ItemStack (k)
local smeta = stack:get_meta ()
if stack:get_short_description () ~= "" then
description = stack:get_short_description ()
@@ -942,7 +937,6 @@ local function indexer_on_blast (pos, intensity)
end
end
on_destruct (pos)
minetest.remove_node (pos)
else -- intensity < 1.0
@@ -978,9 +972,7 @@ local function indexer_on_blast (pos, intensity)
local stack = ItemStack (items[1])
if stack then
preserve_metadata (pos, node, meta, { stack })
utils.item_drop (stack, nil, pos)
on_destruct (pos)
minetest.remove_node (pos)
end
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -1,4 +1,4 @@
local utils, mod_storage = ...
local utils = ...
@@ -439,4 +439,13 @@ end
local crafting_mods = dofile (minetest.get_modpath ("lwcomponents").."/crafting_mods.lua")
function utils.get_crafting_mods (item)
return crafting_mods[item]
end
--