V1.04, Source maintenance, minor issues fixed, Unifieddyes support for Color Lamp added

This commit is contained in:
Joachim Stolberg 2018-03-31 17:09:16 +02:00
parent 53c4074450
commit a0de294c75
34 changed files with 272 additions and 102 deletions

@ -1,4 +1,4 @@
# TechPack V1.03 # TechPack V1.04
TechPack, a Mining, Crafting, & Farming Modpack for Minetest. TechPack, a Mining, Crafting, & Farming Modpack for Minetest.
@ -65,8 +65,9 @@ Textures: CC BY-SA 3.0
### Dependencies ### Dependencies
default, doors. default, doors.
Tubelib Color Lamps optional: unifieddyes
SmartLine Display optional: display_lib, font_lib SmartLine Display optional: display_lib, font_lib
SmartLine Controller optional: mail, SmartLine Controller optional: mail
Gravelsieve optional: moreores, hopper, pipeworks Gravelsieve optional: moreores, hopper, pipeworks
@ -75,3 +76,4 @@ Gravelsieve optional: moreores, hopper, pipeworks
- 2018-03-24 V1.01 * Support for Ethereal added - 2018-03-24 V1.01 * Support for Ethereal added
- 2018-03-27 V1.02 * Timer improvements for unloaded areas - 2018-03-27 V1.02 * Timer improvements for unloaded areas
- 2018-03-29 V1.03 * Area protected chest added to tubelib_addons1 - 2018-03-29 V1.03 * Area protected chest added to tubelib_addons1
- 2018-03-31 V1.04 * Maintenance, minor issues, Unifieddyes support for Color Lamp

@ -813,7 +813,7 @@ minetest.register_node("smartline:controller", {
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local number = tubelib.add_node(pos, "smartline:controller") local number = tubelib.add_node(pos)
local fs_data = {} local fs_data = {}
meta:set_string("fs_data", minetest.serialize(fs_data)) meta:set_string("fs_data", minetest.serialize(fs_data))
meta:set_string("owner", placer:get_player_name()) meta:set_string("owner", placer:get_player_name())

@ -51,7 +51,7 @@ minetest.register_node("smartline:display", {
}, },
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local number = tubelib.add_node(pos, "smartline:display") local number = tubelib.add_node(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("number", number) meta:set_string("number", number)
meta:set_string("text", " \n \nMinetest\nSmartLine Tools\n \nDisplay\nNumber: "..number) meta:set_string("text", " \n \nMinetest\nSmartLine Tools\n \nDisplay\nNumber: "..number)

@ -121,7 +121,7 @@ minetest.register_node("smartline:playerdetector", {
}, },
}, },
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local number = tubelib.add_node(pos, "smartline:playerdetector") local number = tubelib.add_node(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("number", number) meta:set_string("number", number)
local numbers = meta:get_string("numbers") or "" local numbers = meta:get_string("numbers") or ""

@ -45,7 +45,7 @@ minetest.register_node("smartline:repeater", {
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local own_number = tubelib.add_node(pos, "smartline:repeater") local own_number = tubelib.add_node(pos)
meta:set_string("own_number", own_number) meta:set_string("own_number", own_number)
meta:set_string("formspec", formspec(meta)) meta:set_string("formspec", formspec(meta))
meta:set_string("infotext", "SmartLine Repeater "..own_number..": not connected") meta:set_string("infotext", "SmartLine Repeater "..own_number..": not connected")

@ -69,7 +69,7 @@ local function stop_the_sequencer(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local number = meta:get_string("number") local number = meta:get_string("number")
meta:set_int("running", STOP_STATE) meta:set_int("running", STOP_STATE)
meta:set_string("infotext", "Tubelib Sequencer "..number..": stopped") meta:set_string("infotext", "SmartLine Sequencer "..number..": stopped")
local rules = minetest.deserialize(meta:get_string("rules")) local rules = minetest.deserialize(meta:get_string("rules"))
local endless = meta:get_int("endless") or 0 local endless = meta:get_int("endless") or 0
meta:set_string("formspec", formspec(tubelib.STOPPED, rules, endless)) meta:set_string("formspec", formspec(tubelib.STOPPED, rules, endless))
@ -119,7 +119,7 @@ local function check_rules(pos, elapsed)
if index == 1 and offs < 1 then if index == 1 and offs < 1 then
offs = 2 offs = 2
end end
meta:set_string("infotext", "Tubelib Sequencer "..number..": running ("..index.."/"..NUM_SLOTS..")") meta:set_string("infotext", "SmartLine Sequencer "..number..": running ("..index.."/"..NUM_SLOTS..")")
meta:set_int("index", index) meta:set_int("index", index)
if offs > 0 then if offs > 0 then
minetest.after(0, restart_timer, pos, offs) minetest.after(0, restart_timer, pos, offs)
@ -222,7 +222,7 @@ minetest.register_node("smartline:sequencer", {
}, },
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local number = tubelib.add_node(pos, "smartline:sequencer") local number = tubelib.add_node(pos)
local rules = {} local rules = {}
for idx = 1,NUM_SLOTS do for idx = 1,NUM_SLOTS do
rules[idx] = {offs = "", num = "", act = 1} rules[idx] = {offs = "", num = "", act = 1}
@ -234,6 +234,7 @@ minetest.register_node("smartline:sequencer", {
meta:set_int("endless", 0) meta:set_int("endless", 0)
meta:get_int("running", STOP_STATE) meta:get_int("running", STOP_STATE)
meta:set_string("formspec", formspec(tubelib.STOPPED, rules, 0)) meta:set_string("formspec", formspec(tubelib.STOPPED, rules, 0))
meta:set_string("infotext", "SmartLine Sequencer "..number)
end, end,
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,

@ -44,7 +44,7 @@ minetest.register_node("smartline:signaltower", {
}, },
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local number = tubelib.add_node(pos, "smartline:signaltower") local number = tubelib.add_node(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("state", "off") meta:set_string("state", "off")
meta:set_string("infotext", "SmartLine Signal Tower "..number) meta:set_string("infotext", "SmartLine Signal Tower "..number)

@ -152,7 +152,7 @@ minetest.register_node("smartline:timer", {
local numbers = {"0000","","","","",""} local numbers = {"0000","","","","",""}
local actions = {"","","","","",""} local actions = {"","","","","",""}
local done = {false,false,false,false,false,false} local done = {false,false,false,false,false,false}
local own_num = tubelib.add_node(pos, "smartline:timer") local own_num = tubelib.add_node(pos)
meta:set_string("own_num", own_num) meta:set_string("own_num", own_num)
meta:set_string("placer_name", placer:get_player_name()) meta:set_string("placer_name", placer:get_player_name())
meta:set_string("events", minetest.serialize(events)) meta:set_string("events", minetest.serialize(events))

@ -126,6 +126,7 @@ Parameters:
The function is used to register the nodes position for the communication node The function is used to register the nodes position for the communication node
number and to update the tube surrounding. number and to update the tube surrounding.
`pos` the node position, `name` is the node name. `pos` the node position, `name` is the node name.
If 'name' is nil, the tube surrounding is not updated, which should be used for nodes without tube connection.
@ -197,18 +198,12 @@ Because several nodes could be addressed, the function don't return any response
```LUA ```LUA
tubelib.send_request(number, placer_name, clicker_name, topic, payload) tubelib.send_request(number, topic, payload)
``` ```
In contrast to `send_message` this functions send a message to exactly one node In contrast to `send_message` this functions send a message to exactly one node
referenced by `number` and returns the node response. referenced by `number` and returns the node response.
The message is based on the topic string (e.g. "state") and The message is based on the topic string (e.g. "state") and
topic related payload. topic related payload.
The placer and clicker names are needed to check the protection rights.
`placer_name` is the name of the player, who places the node.
`clicker_name` is the name of the player, who uses the node.
`placer_name` of sending and receiving nodes have to be the same.
If every player should be able to send a message, use nil for clicker_name.
## 4. Code Snippets ## 4. Code Snippets
@ -286,3 +281,4 @@ This file has further helper functions and is recommended for deeper study.
2017-10-02 First draft 2017-10-02 First draft
2017-10-29 Commands start/stop replaced by on/off 2017-10-29 Commands start/stop replaced by on/off
2018-03-31 Corrections for 'send_request' and 'add_node'

@ -49,6 +49,7 @@ minetest.register_node("tubelib:blackhole", {
tubelib.remove_node(pos) -- <<=== tubelib tubelib.remove_node(pos) -- <<=== tubelib
end, end,
on_rotate = screwdriver.disallow,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
paramtype2 = "facedir", paramtype2 = "facedir",

@ -70,7 +70,7 @@ minetest.register_node("tubelib:button", {
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local own_num = tubelib.add_node(pos, "tubelib:button") local own_num = tubelib.add_node(pos)
meta:set_string("own_num", own_num) meta:set_string("own_num", own_num)
meta:set_string("formspec", "size[5,6]".. meta:set_string("formspec", "size[5,6]"..
"dropdown[0.2,0;3;type;switch,button 2s,button 4s,button 8s,button 16s;1]".. "dropdown[0.2,0;3;type;switch,button 2s,button 4s,button 8s,button 16s;1]"..
@ -123,6 +123,7 @@ minetest.register_node("tubelib:button", {
end end
end, end,
on_rotate = screwdriver.disallow,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
paramtype2 = "facedir", paramtype2 = "facedir",
@ -153,6 +154,7 @@ minetest.register_node("tubelib:button_active", {
end, end,
on_timer = switch_off, on_timer = switch_off,
on_rotate = screwdriver.disallow,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,

@ -161,15 +161,19 @@ end
-- Add node to the tubelib lists and update the tube surrounding. -- Add node to the tubelib lists and update the tube surrounding.
-- Function determines and returns the node position number, -- Function determines and returns the node position number,
-- needed for message communication. -- needed for message communication.
-- If 'name' is nil, the tube surrounding is not updated,
-- which should be used for nodes without tube connection.
function tubelib.add_node(pos, name) function tubelib.add_node(pos, name)
-- store position -- store position
local number = get_number(pos) local number = get_number(pos)
Number2Pos[number] = { if name then
pos = pos, Number2Pos[number] = {
name = name, pos = pos,
} name = name,
-- update surrounding tubes }
tubelib.update_tubes(pos) -- update surrounding tubes
tubelib.update_tubes(pos)
end
return number return number
end end

@ -360,6 +360,7 @@ minetest.register_node("tubelib:distributor", {
allow_metadata_inventory_move = allow_metadata_inventory_move, allow_metadata_inventory_move = allow_metadata_inventory_move,
on_timer = keep_running, on_timer = keep_running,
on_rotate = screwdriver.disallow,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
@ -398,6 +399,7 @@ minetest.register_node("tubelib:distributor_active", {
allow_metadata_inventory_move = allow_metadata_inventory_move, allow_metadata_inventory_move = allow_metadata_inventory_move,
on_timer = keep_running, on_timer = keep_running,
on_rotate = screwdriver.disallow,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,

@ -35,7 +35,7 @@ minetest.register_node("tubelib:lamp", {
}, },
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local number = tubelib.add_node(pos, "tubelib:lamp") -- <<=== tubelib local number = tubelib.add_node(pos) -- <<=== tubelib
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("infotext", "Tubelib Lamp "..number) meta:set_string("infotext", "Tubelib Lamp "..number)
end, end,

@ -136,6 +136,7 @@ minetest.register_node("tubelib:pusher", {
end, end,
on_timer = keep_running, on_timer = keep_running,
on_rotate = screwdriver.disallow,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
@ -201,6 +202,7 @@ minetest.register_node("tubelib:pusher_active", {
end, end,
on_timer = keep_running, on_timer = keep_running,
on_rotate = screwdriver.disallow,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,

@ -17,19 +17,19 @@
local MAX_TUBE_LENGTH = 100 local MAX_TUBE_LENGTH = 100
local TubeTypes = { local TubeTypes = {
0,0,0,0,0,0,1,3,1,3, -- 01-10 0,0,0,0,0,0,1,3,1,3, -- 01-10
4,5,3,1,3,1,4,5,1,3, -- 11-20 4,5,3,1,3,1,4,5,1,3, -- 11-20
1,3,4,5,3,1,3,1,4,5, -- 21-30 1,3,4,5,3,1,3,1,4,5, -- 21-30
2,2,2,2,0,2,2,2,5,2, -- 31-40 2,2,2,2,0,2,2,2,5,2, -- 31-40
5,0, -- 40-41 5,0, -- 40-41
} }
local TubeFacedir = { local TubeFacedir = {
0,0,0,0,0,0,0,2,0,1, -- 01-10 0,0,0,0,0,0,0,2,0,1, -- 01-10
2,2,2,1,3,1,3,3,0,3, -- 11-20 2,2,2,1,3,1,3,3,0,3, -- 11-20
0,0,0,0,1,1,0,1,1,1, -- 21-30 0,0,0,0,1,1,0,1,1,1, -- 21-30
0,0,0,0,0,0,0,0,0,0, -- 31-40 0,0,0,0,0,0,0,0,0,0, -- 31-40
0,0, -- 40-41 0,0, -- 40-41
} }
tubelib.knownNodes = { tubelib.knownNodes = {
@ -78,14 +78,14 @@ local function remote_node(pos, npos)
local dest_pos2 = minetest.string_to_pos(minetest.get_meta(npos):get_string("dest_pos2")) local dest_pos2 = minetest.string_to_pos(minetest.get_meta(npos):get_string("dest_pos2"))
if dest_pos2 == nil then if dest_pos2 == nil then
local facedir = minetest.get_meta(npos):get_int("facedir") local facedir = minetest.get_meta(npos):get_int("facedir")
return pos, facedir -- node connected with itself return pos, facedir -- node connected with itself
else else
local facedir2 = minetest.get_meta(npos):get_int("facedir2") local facedir2 = minetest.get_meta(npos):get_int("facedir2")
return dest_pos2, facedir2 -- one tube connection return dest_pos2, facedir2 -- one tube connection
end end
else else
local facedir = minetest.get_meta(npos):get_int("facedir") local facedir = minetest.get_meta(npos):get_int("facedir")
return dest_pos, facedir -- multi tube connection return dest_pos, facedir -- multi tube connection
end end
end end
@ -252,7 +252,7 @@ local function update_head_tubes(pos)
local cnt1, peer1, dest1 = walk_to_peer(pos, pos1) local cnt1, peer1, dest1 = walk_to_peer(pos, pos1)
local cnt2, peer2, dest2 = walk_to_peer(pos, pos2) local cnt2, peer2, dest2 = walk_to_peer(pos, pos2)
if cnt1 == 0 and cnt2 == 0 then -- first tube node placed? if cnt1 == 0 and cnt2 == 0 then -- first tube node placed?
-- we have to store both dest positions -- we have to store both dest positions
minetest.get_meta(peer1):set_string("dest_pos", minetest.pos_to_string(dest1)) minetest.get_meta(peer1):set_string("dest_pos", minetest.pos_to_string(dest1))
minetest.get_meta(peer1):set_int("facedir", dir_to_facedir(peer1, dest1)) minetest.get_meta(peer1):set_int("facedir", dir_to_facedir(peer1, dest1))
@ -277,7 +277,7 @@ local function update_head_tubes(pos)
return 0 return 0
end end
-- Update all tubes arround the currently placed tube -- Update all tubes arround the currently placed tube
local function update_surrounding_tubes(pos) local function update_surrounding_tubes(pos)
update_tube({x=pos.x , y=pos.y , z=pos.z+1}) update_tube({x=pos.x , y=pos.y , z=pos.z+1})
update_tube({x=pos.x+1, y=pos.y , z=pos.z }) update_tube({x=pos.x+1, y=pos.y , z=pos.z })
@ -314,14 +314,14 @@ function tubelib.update_tubes(pos)
end end
local DefNodeboxes = { local DefNodeboxes = {
-- x1 y1 z1 x2 y2 z2 -- x1 y1 z1 x2 y2 z2
{ -1/4, -1/4, -1/4, 1/4, 1/4, 1/4 }, { -1/4, -1/4, -1/4, 1/4, 1/4, 1/4 },
{ -1/4, -1/4, -1/4, 1/4, 1/4, 1/4 }, { -1/4, -1/4, -1/4, 1/4, 1/4, 1/4 },
} }
local DirCorrections = { local DirCorrections = {
{3, 6}, {2, 5}, -- standard tubes {3, 6}, {2, 5}, -- standard tubes
{3, 1}, {3, 2}, {3, 5}, -- knees from front to.. {3, 1}, {3, 2}, {3, 5}, -- knees from front to..
} }
local SelectBoxes = { local SelectBoxes = {
@ -350,37 +350,37 @@ local TilesData = {
"tubelib_tube.png^[transformR90", "tubelib_tube.png^[transformR90",
"tubelib_tube.png^[transformR90", "tubelib_tube.png^[transformR90",
}, },
{ {
"tubelib_knee.png^[transformR270", "tubelib_knee.png^[transformR270",
"tubelib_knee.png^[transformR180", "tubelib_knee.png^[transformR180",
"tubelib_knee2.png^[transformR270", "tubelib_knee2.png^[transformR270",
"tubelib_hole2.png^[transformR90", "tubelib_hole2.png^[transformR90",
"tubelib_knee2.png^[transformR90", "tubelib_knee2.png^[transformR90",
"tubelib_hole2.png^[transformR270", "tubelib_hole2.png^[transformR270",
}, },
{ {
"tubelib_knee2.png", "tubelib_knee2.png",
"tubelib_hole2.png^[transformR180", "tubelib_hole2.png^[transformR180",
"tubelib_knee.png^[transformR270", "tubelib_knee.png^[transformR270",
"tubelib_knee.png", "tubelib_knee.png",
"tubelib_knee2.png", "tubelib_knee2.png",
"tubelib_hole2.png", "tubelib_hole2.png",
}, },
{ {
"tubelib_hole2.png", "tubelib_hole2.png",
"tubelib_knee2.png^[transformR180", "tubelib_knee2.png^[transformR180",
"tubelib_knee.png^[transformR180", "tubelib_knee.png^[transformR180",
"tubelib_knee.png^[transformR90", "tubelib_knee.png^[transformR90",
"tubelib_knee2.png^[transformR180", "tubelib_knee2.png^[transformR180",
"tubelib_hole2.png^[transformR180", "tubelib_hole2.png^[transformR180",
}, },
} }
for idx,pos in ipairs(DirCorrections) do for idx,pos in ipairs(DirCorrections) do
node_box_data = table.copy(DefNodeboxes) node_box_data = table.copy(DefNodeboxes)
node_box_data[1][pos[1]] = node_box_data[1][pos[1]] * 2 node_box_data[1][pos[1]] = node_box_data[1][pos[1]] * 2
node_box_data[2][pos[2]] = node_box_data[2][pos[2]] * 2 node_box_data[2][pos[2]] = node_box_data[2][pos[2]] * 2
tiles_data = TilesData[idx] tiles_data = TilesData[idx]
@ -389,14 +389,14 @@ for idx,pos in ipairs(DirCorrections) do
else else
hidden = 1 hidden = 1
end end
minetest.register_node("tubelib:tube"..idx, { minetest.register_node("tubelib:tube"..idx, {
description = "Tubelib Tube", description = "Tubelib Tube",
tiles = tiles_data, tiles = tiles_data,
drawtype = "nodebox", drawtype = "nodebox",
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = node_box_data, fixed = node_box_data,
}, },
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = SelectBoxes[idx], fixed = SelectBoxes[idx],
@ -417,10 +417,12 @@ for idx,pos in ipairs(DirCorrections) do
after_dig_node = function(pos, oldnode, oldmetadata, digger) after_dig_node = function(pos, oldnode, oldmetadata, digger)
after_tube_removed(pos, oldnode) after_tube_removed(pos, oldnode)
end, end,
paramtype2 = "facedir",
paramtype = "light", on_rotate = screwdriver.disallow,
sunlight_propagates = true, paramtype2 = "facedir",
is_ground_content = false, paramtype = "light",
sunlight_propagates = true,
is_ground_content = false,
groups = {choppy=2, cracky=3, stone=1, not_in_creative_inventory=hidden}, groups = {choppy=2, cracky=3, stone=1, not_in_creative_inventory=hidden},
drop = "tubelib:tube1", drop = "tubelib:tube1",
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),

@ -235,6 +235,7 @@ minetest.register_node("tubelib_addons1:fermenter", {
end end
end, end,
on_rotate = screwdriver.disallow,
on_timer = keep_running, on_timer = keep_running,
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,
allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_put = allow_metadata_inventory_put,

@ -91,24 +91,27 @@ minetest.register_node("tubelib_addons1:funnel", {
end, end,
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
tubelib.add_node(pos, "tubelib_addons1:funnel")
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("formspec", formspec()) meta:set_string("formspec", formspec())
minetest.get_node_timer(pos):start(1) minetest.get_node_timer(pos):start(1)
end, end,
on_timer = scan_for_objects, on_timer = scan_for_objects,
on_rotate = screwdriver.disallow,
can_dig = function(pos,player) can_dig = function(pos,player)
if minetest.is_protected(pos, player:get_player_name()) then if minetest.is_protected(pos, player:get_player_name()) then
return false return false
end end
local meta = minetest.get_meta(pos); local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
return inv:is_empty("main") return inv:is_empty("main")
end, end,
on_dig = function(pos, node, puncher, pointed_thing) on_dig = function(pos, node, puncher, pointed_thing)
minetest.node_dig(pos, node, puncher, pointed_thing) minetest.node_dig(pos, node, puncher, pointed_thing)
tubelib.remove_node(pos)
end, end,
allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_put = allow_metadata_inventory_put,

@ -203,6 +203,7 @@ minetest.register_node("tubelib_addons1:grinder", {
end end
end, end,
on_rotate = screwdriver.disallow,
on_timer = keep_running, on_timer = keep_running,
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,
allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_put = allow_metadata_inventory_put,
@ -240,6 +241,7 @@ minetest.register_node("tubelib_addons1:grinder_active", {
"tubelib_front.png", "tubelib_front.png",
}, },
on_rotate = screwdriver.disallow,
on_timer = keep_running, on_timer = keep_running,
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,
allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_put = allow_metadata_inventory_put,

@ -369,6 +369,7 @@ minetest.register_node("tubelib_addons1:harvester_base", {
end end
end, end,
on_rotate = screwdriver.disallow,
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,
on_timer = keep_running, on_timer = keep_running,
allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_put = allow_metadata_inventory_put,
@ -389,6 +390,7 @@ minetest.register_node("tubelib_addons1:harvester_base_active", {
'tubelib_addons1_harvester.png', 'tubelib_addons1_harvester.png',
}, },
on_rotate = screwdriver.disallow,
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,
on_timer = keep_running, on_timer = keep_running,
allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_put = allow_metadata_inventory_put,

@ -136,6 +136,7 @@ minetest.register_node("tubelib_addons1:pusher_fast", {
end, end,
on_timer = keep_running, on_timer = keep_running,
on_rotate = screwdriver.disallow,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
@ -201,6 +202,7 @@ minetest.register_node("tubelib_addons1:pusher_fast_active", {
end, end,
on_timer = keep_running, on_timer = keep_running,
on_rotate = screwdriver.disallow,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,

@ -320,6 +320,7 @@ minetest.register_node("tubelib_addons1:quarry", {
end, end,
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,
on_rotate = screwdriver.disallow,
on_dig = function(pos, node, puncher, pointed_thing) on_dig = function(pos, node, puncher, pointed_thing)
if minetest.is_protected(pos, puncher:get_player_name()) then if minetest.is_protected(pos, puncher:get_player_name()) then
@ -370,6 +371,7 @@ minetest.register_node("tubelib_addons1:quarry_active", {
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,
on_timer = keep_running, on_timer = keep_running,
on_rotate = screwdriver.disallow,
allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_put = allow_metadata_inventory_put,
allow_metadata_inventory_take = allow_metadata_inventory_take, allow_metadata_inventory_take = allow_metadata_inventory_take,

@ -230,6 +230,7 @@ minetest.register_node("tubelib_addons1:reformer", {
end end
end, end,
on_rotate = screwdriver.disallow,
on_timer = keep_running, on_timer = keep_running,
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,
allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_put = allow_metadata_inventory_put,

@ -79,7 +79,7 @@ minetest.register_node("tubelib_addons2:accesscontrol", {
}, },
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local number = tubelib.add_node(pos, "tubelib_addons2:accesscontrol") local number = tubelib.add_node(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("number", number) meta:set_string("number", number)
local numbers = meta:get_string("numbers") or "" local numbers = meta:get_string("numbers") or ""

@ -3,7 +3,7 @@
Tubelib Addons 2 Tubelib Addons 2
================ ================
Copyright (C) 2017 Joachim Stolberg Copyright (C) 2017-2018 Joachim Stolberg
LGPLv2.1+ LGPLv2.1+
See LICENSE.txt for more information See LICENSE.txt for more information
@ -23,6 +23,7 @@ local function switch_node(pos, num, player)
node.name = "tubelib_addons2:lamp"..num node.name = "tubelib_addons2:lamp"..num
minetest.swap_node(pos, node) minetest.swap_node(pos, node)
local number = meta:get_int("number") local number = meta:get_int("number")
number = string.format("%.04u", number)
meta:set_string("infotext", "Tubelib Color Lamp "..number) meta:set_string("infotext", "Tubelib Color Lamp "..number)
if num ~= "" then if num ~= "" then
meta:set_int("color", num) meta:set_int("color", num)
@ -32,12 +33,10 @@ end
minetest.register_node("tubelib_addons2:lamp", { minetest.register_node("tubelib_addons2:lamp", {
description = "Tubelib Color Lamp", description = "Tubelib Color Lamp",
tiles = { tiles = {"tubelib_addons2_lamp.png^[colorize:#000000:100"},
"tubelib_addons2_lamp.png^[colorize:#FFFFFF:120",
},
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local number = tubelib.add_node(pos, "tubelib_addons2:lamp") local number = tubelib.add_node(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_int("number", number) meta:set_int("number", number)
switch_node(pos, "", placer) switch_node(pos, "", placer)
@ -100,7 +99,6 @@ for idx,color in ipairs(tColors) do
description = "Tubelib Color Lamp", description = "Tubelib Color Lamp",
tiles = { tiles = {
"tubelib_addons2_lamp.png^[colorize:"..color..":120", "tubelib_addons2_lamp.png^[colorize:"..color..":120",
--"tubelib_lamp.png^[colorize:"..color,
}, },
on_receive_fields = function(pos, formname, fields, player) on_receive_fields = function(pos, formname, fields, player)
@ -119,7 +117,8 @@ for idx,color in ipairs(tColors) do
paramtype = 'light', paramtype = 'light',
light_source = LIGHT_MAX, light_source = LIGHT_MAX,
groups = {crumbly=0, not_in_creative_inventory=1}, groups = {choppy=2, cracky=1, not_in_creative_inventory=1},
is_ground_content = false, is_ground_content = false,
drop = "tubelib_addons2:lamp"
}) })
end end

@ -0,0 +1,140 @@
--[[
Tubelib Addons 2
================
Copyright (C) 2017-2018 Joachim Stolberg
LGPLv2.1+
See LICENSE.txt for more information
colorlamp_ud.lua which requires the mod unifieddyes:
]]--
local function switch_on(pos, node, player)
if player == nil or not minetest.is_protected(pos, player:get_player_name()) then
node.name = "tubelib_addons2:lamp_on"
minetest.swap_node(pos, node)
end
end
local function switch_off(pos, node, player)
if player == nil or not minetest.is_protected(pos, player:get_player_name()) then
node.name = "tubelib_addons2:lamp_off"
minetest.swap_node(pos, node)
end
end
minetest.register_node("tubelib_addons2:lamp_off", {
description = "Tubelib Color Lamp",
tiles = {"tubelib_addons2_lamp.png^[colorize:#000000:100"},
after_place_node = function(pos, placer, itemstack, pointed_thing)
local number = tubelib.add_node(pos)
local meta = minetest.get_meta(pos)
meta:set_string("infotext", "Tubelib Color Lamp "..number)
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
end,
on_rightclick = switch_on,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
tubelib.remove_node(pos)
unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
end,
on_construct = unifieddyes.on_construct,
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
place_param2 = 241,
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
groups = {choppy=2, cracky=1, ud_param2_colorable = 1},
is_ground_content = false,
})
tubelib.register_node("tubelib_addons2:lamp", {}, {
on_recv_message = function(pos, topic, payload)
if topic == "on" then
local node = minetest.get_node(pos)
switch_on(pos, node, nil)
elseif topic == "off" then
local node = minetest.get_node(pos)
switch_off(pos, node, nil)
end
end,
})
minetest.register_craft({
output = "tubelib_addons2:lamp 2",
recipe = {
{"wool:green", "wool:red", "wool:blue"},
{"tubelib:wlanchip", "default:coal_lump", "tubelib:wlanchip"},
{"group:wood", "", "group:wood"},
},
})
for idx=1,12 do
minetest.register_node("tubelib_addons2:lamp"..idx, {
description = "Tubelib Color Lamp "..idx,
tiles = {"tubelib_addons2_lamp.png"},
paramtype = 'light',
groups = {choppy=2, cracky=1, not_in_creative_inventory=1},
is_ground_content = false,
drop = "tubelib_addons2:lamp_off"
})
end
minetest.register_node("tubelib_addons2:lamp_on", {
description = "Tubelib Color Lamp",
tiles = {"tubelib_addons2_lamp.png"},
on_rightclick = switch_off,
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
groups = {choppy=2, cracky=1, not_in_creative_inventory=1, ud_param2_colorable = 1},
on_construct = unifieddyes.on_construct,
after_place_node = unifieddyes.recolor_on_place,
after_dig_node = unifieddyes.after_dig_node,
light_source = LIGHT_MAX,
is_ground_content = false,
drop = "tubelib_addons2:lamp_off"
})
minetest.register_lbm({
label = "[Tubelib] Color Lamp update",
name = "tubelib_addons2:update",
nodenames = {
"tubelib_addons2:lamp",
"tubelib_addons2:lamp1", "tubelib_addons2:lamp2", "tubelib_addons2:lamp3",
"tubelib_addons2:lamp4", "tubelib_addons2:lamp5", "tubelib_addons2:lamp6",
"tubelib_addons2:lamp7", "tubelib_addons2:lamp8", "tubelib_addons2:lamp9",
"tubelib_addons2:lamp10", "tubelib_addons2:lamp11", "tubelib_addons2:lamp12",
},
run_at_every_load = true,
action = function(pos, node)
local color = {112, 108, 104, 100, 96, 115, 240, 255, 80, 120, 99, 20}
local meta = minetest.get_meta(pos)
local num = meta:get_int("color")
if node.name == "tubelib_addons2:lamp" then
node.param2 = color[tonumber(num)]
node.name = "tubelib_addons2:lamp_off"
else
node.param2 = color[tonumber(num)]
node.name = "tubelib_addons2:lamp_on"
end
minetest.swap_node(pos, node)
local number = meta:get_int("number") or 0
number = string.format("%.04u", number)
meta:set_string("infotext", "Tubelib Color Lamp "..number)
end
})

@ -1,3 +1,4 @@
default default
tubelib tubelib
mesecons? mesecons?
unifieddyes?

@ -52,7 +52,7 @@ for idx,pgn in ipairs(tPgns) do
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local number = tubelib.add_node(pos, node.name) local number = tubelib.add_node(pos)
tubelib.set_data(number, "facedir", node.param2) tubelib.set_data(number, "facedir", node.param2)
meta:set_string("number", number) meta:set_string("number", number)
meta:set_string("infotext", "Tubelib Door Block "..number) meta:set_string("infotext", "Tubelib Door Block "..number)

@ -36,7 +36,7 @@ for idx,pgn in ipairs(tPgns) do
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local number = tubelib.add_node(pos, node.name) local number = tubelib.add_node(pos)
meta:set_string("infotext", "Tubelib Gate Block "..number) meta:set_string("infotext", "Tubelib Gate Block "..number)
meta:set_string("formspec", "size[3,2]".. meta:set_string("formspec", "size[3,2]"..
"label[0,0;Select texture]".. "label[0,0;Select texture]"..

@ -14,10 +14,14 @@ dofile(minetest.get_modpath("tubelib_addons2") .. "/timer.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/sequencer.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/sequencer.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/gateblock.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/gateblock.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/doorblock.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/doorblock.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/colorlamp.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/repeater.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/repeater.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/programmer.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/programmer.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/accesscontrol.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/accesscontrol.lua")
if mesecon then if minetest.get_modpath("mesecons") and mesecon then
dofile(minetest.get_modpath("tubelib_addons2") .. "/mesecons_converter.lua") dofile(minetest.get_modpath("tubelib_addons2") .. "/mesecons_converter.lua")
end end
if minetest.get_modpath("unifieddyes") and unifieddyes then
dofile(minetest.get_modpath("tubelib_addons2") .. "/colorlamp_ud.lua")
else
dofile(minetest.get_modpath("tubelib_addons2") .. "/colorlamp.lua")
end

@ -52,7 +52,7 @@ minetest.register_node("tubelib_addons2:mesecons_converter", {
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local own_number = tubelib.add_node(pos, "tubelib_addons2:mesecons_converter") local own_number = tubelib.add_node(pos)
meta:set_string("own_number", own_number) meta:set_string("own_number", own_number)
meta:set_string("formspec", formspec(meta)) meta:set_string("formspec", formspec(meta))
meta:set_string("infotext", "Tubelib Mesecons Converter "..own_number..": not connected") meta:set_string("infotext", "Tubelib Mesecons Converter "..own_number..": not connected")

@ -32,7 +32,7 @@ minetest.register_node("tubelib_addons2:repeater", {
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local own_number = tubelib.add_node(pos, "tubelib_addons2:repeater") local own_number = tubelib.add_node(pos)
meta:set_string("own_number", own_number) meta:set_string("own_number", own_number)
meta:set_string("formspec", formspec(meta)) meta:set_string("formspec", formspec(meta))
meta:set_string("infotext", "Tubelib Repeater "..own_number..": not connected") meta:set_string("infotext", "Tubelib Repeater "..own_number..": not connected")

@ -201,7 +201,7 @@ minetest.register_node("tubelib_addons2:sequencer", {
after_place_node = function(pos, placer) after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local number = tubelib.add_node(pos, "tubelib_addons2:sequencer") local number = tubelib.add_node(pos)
local rules = {} local rules = {}
for idx = 1,NUM_SLOTS do for idx = 1,NUM_SLOTS do
rules[idx] = {offs = "", num = "", act = 1} rules[idx] = {offs = "", num = "", act = 1}
@ -213,6 +213,7 @@ minetest.register_node("tubelib_addons2:sequencer", {
meta:set_int("endless", 0) meta:set_int("endless", 0)
meta:get_int("running", STOP_STATE) meta:get_int("running", STOP_STATE)
meta:set_string("formspec", formspec(tubelib.STOPPED, rules, 0)) meta:set_string("formspec", formspec(tubelib.STOPPED, rules, 0))
meta:set_string("infotext", "Tubelib Sequencer "..number)
end, end,
on_receive_fields = on_receive_fields, on_receive_fields = on_receive_fields,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 994 B

After

Width:  |  Height:  |  Size: 629 B