mirror of
https://cheapiesystems.com/git/digistuff
synced 2024-11-24 16:13:45 +01:00
Add channel copier
This commit is contained in:
parent
69a9304751
commit
7f5eaac5c3
@ -11,6 +11,7 @@ minetest.register_node("digistuff:camera", {
|
|||||||
{
|
{
|
||||||
receptor = {}
|
receptor = {}
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
groups = {cracky=2},
|
groups = {cracky=2},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
@ -58,6 +58,7 @@ minetest.register_node("digistuff:card_reader",{
|
|||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
if fields.channel then meta:set_string("channel",fields.channel) end
|
if fields.channel then meta:set_string("channel",fields.channel) end
|
||||||
end,
|
end,
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
tiles = {
|
tiles = {
|
||||||
|
90
channelcopier.lua
Normal file
90
channelcopier.lua
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
minetest.register_tool("digistuff:channelcopier",{
|
||||||
|
description = "Digilines Channel Copier (shift-click to copy, click to paste)",
|
||||||
|
inventory_image = "digistuff_channelcopier.png",
|
||||||
|
on_use = function(itemstack,player,pointed)
|
||||||
|
if not (pointed and pointed.under) then return itemstack end
|
||||||
|
if not (player and player:get_player_name()) then return end
|
||||||
|
local pos = pointed.under
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
if not node then return itemstack end
|
||||||
|
if minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname then
|
||||||
|
if player:get_player_control().sneak then
|
||||||
|
local channel = minetest.get_meta(pointed.under):get_string(minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname)
|
||||||
|
if type(channel) == "string" and channel ~= "" then
|
||||||
|
local stackmeta = itemstack:get_meta()
|
||||||
|
stackmeta:set_string("channel",channel)
|
||||||
|
stackmeta:set_string("description","Digilines Channel Copier, set to: "..channel)
|
||||||
|
if player and player:get_player_name() then minetest.chat_send_player(player:get_player_name(),"Digilines channel copier set to "..minetest.colorize("#00FFFF",channel)..". Click another node to paste this channel there.") end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
|
||||||
|
minetest.record_protection_violation(pos,name)
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
if minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname then
|
||||||
|
local channel = itemstack:get_meta():get_string("channel")
|
||||||
|
if type(channel) ~= "string" or channel == "" then
|
||||||
|
minetest.chat_send_player(name,minetest.colorize("#FF5555","Error:").." No channel has been set yet. Shift-click to copy one.")
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
local oldchannel = minetest.get_meta(pos):get_string(minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname)
|
||||||
|
minetest.get_meta(pos):set_string(minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname,channel)
|
||||||
|
if type(oldchannel) == "string" and oldchannel ~= "" then
|
||||||
|
if channel == oldchannel then
|
||||||
|
minetest.chat_send_player(name,"Channel of target node is already "..minetest.colorize("#00FFFF",oldchannel)..".")
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(name,string.format("Channel of target node changed from %s to %s.",minetest.colorize("#00FFFF",oldchannel),minetest.colorize("#00FFFF",channel)))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(name,"Channel of target node set to "..minetest.colorize("#00FFFF",channel)..".")
|
||||||
|
end
|
||||||
|
if type(minetest.registered_nodes[node.name]._digistuff_channelcopier_onset) == "function" then
|
||||||
|
minetest.registered_nodes[node.name]._digistuff_channelcopier_onset(pos,node,player,channel,oldchannel)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "digistuff:channelcopier",
|
||||||
|
recipe = {
|
||||||
|
{"mesecons_fpga:programmer"},
|
||||||
|
{"digilines:wire_std_00000000"}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
--NOTE: Asking to have your own mod added to here is not the right way to add compatibility with the channel copier.
|
||||||
|
--Instead, include a _digistuff_channelcopier_fieldname field in your nodedef set to the name of the metadata field that contains the channel.
|
||||||
|
--If you need an action to occur after the channel is set, place a function in _digistuff_channelcopier_onset.
|
||||||
|
--Function signature is _digistuff_channelcopier_onset(pos,node,player,new_channel,old_channel)
|
||||||
|
|
||||||
|
local additionalnodes = {
|
||||||
|
["digilines:chest"] = "channel",
|
||||||
|
["digilines:lcd"] = "channel",
|
||||||
|
["digilines:lightsensor"] = "channel",
|
||||||
|
["digilines:rtc"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_1"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_2"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_3"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_4"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_5"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_6"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_7"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_8"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_9"] = "channel",
|
||||||
|
["pipeworks:digiline_detector_tube_10"] = "channel",
|
||||||
|
["pipeworks:digiline_filter"] = "channel",
|
||||||
|
}
|
||||||
|
|
||||||
|
for name,field in pairs(additionalnodes) do
|
||||||
|
if minetest.registered_nodes[name] and not minetest.registered_nodes[name]._digistuff_channelcopier_fieldname then
|
||||||
|
minetest.override_item(name,{_digistuff_channelcopier_fieldname = field})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
@ -3,3 +3,4 @@ digilines
|
|||||||
mesecons?
|
mesecons?
|
||||||
mesecons_mvps?
|
mesecons_mvps?
|
||||||
screwdriver?
|
screwdriver?
|
||||||
|
pipeworks?
|
||||||
|
@ -12,6 +12,7 @@ minetest.register_node("digistuff:detector", {
|
|||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("formspec","size[8,4;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;6,2;radius;Radius;${radius}]button_exit[2.25,3;3,1;submit;Save]")
|
meta:set_string("formspec","size[8,4;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;6,2;radius;Radius;${radius}]button_exit[2.25,3;3,1;submit;Save]")
|
||||||
end,
|
end,
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = function(pos, formname, fields, sender)
|
||||||
local name = sender:get_player_name()
|
local name = sender:get_player_name()
|
||||||
if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
|
if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
|
||||||
|
1
init.lua
1
init.lua
@ -14,6 +14,7 @@ local components = {
|
|||||||
"piston",
|
"piston",
|
||||||
"timer",
|
"timer",
|
||||||
"cardreader",
|
"cardreader",
|
||||||
|
"channelcopier",
|
||||||
}
|
}
|
||||||
|
|
||||||
if minetest.get_modpath("mesecons_luacontroller") then table.insert(components,"ioexpander") end
|
if minetest.get_modpath("mesecons_luacontroller") then table.insert(components,"ioexpander") end
|
||||||
|
@ -118,6 +118,7 @@ for i=0,15,1 do
|
|||||||
meta:set_int("don",0)
|
meta:set_int("don",0)
|
||||||
meta:set_int("outstate",i)
|
meta:set_int("outstate",i)
|
||||||
end,
|
end,
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
tiles = gettiles(i),
|
tiles = gettiles(i),
|
||||||
inventory_image = "digistuff_ioexp_top.png",
|
inventory_image = "digistuff_ioexp_top.png",
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
|
@ -13,6 +13,7 @@ for i=0,14,1 do
|
|||||||
{-0.25,0.4,-0.25,0.25,0.5,0.25},
|
{-0.25,0.4,-0.25,0.25,0.5,0.25},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
groups = i > 0 and {cracky = 1, not_in_creative_inventory = 1} or {cracky = 1},
|
groups = i > 0 and {cracky = 1, not_in_creative_inventory = 1} or {cracky = 1},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
light_source = i,
|
light_source = i,
|
||||||
|
1
nic.lua
1
nic.lua
@ -21,6 +21,7 @@ minetest.register_node("digistuff:nic", {
|
|||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 },
|
fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 },
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
node_box = {
|
node_box = {
|
||||||
--From Luacontroller
|
--From Luacontroller
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
@ -21,6 +21,7 @@ minetest.register_node("digistuff:noteblock", {
|
|||||||
tiles = {
|
tiles = {
|
||||||
"mesecons_noteblock.png"
|
"mesecons_noteblock.png"
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = function(pos, formname, fields, sender)
|
||||||
local name = sender:get_player_name()
|
local name = sender:get_player_name()
|
||||||
if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
|
if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
|
||||||
|
@ -123,6 +123,11 @@ minetest.register_node("digistuff:panel", {
|
|||||||
"digistuff_panel_back.png",
|
"digistuff_panel_back.png",
|
||||||
"digistuff_panel_front.png"
|
"digistuff_panel_front.png"
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
|
_digistuff_channelcopier_onset = function(pos)
|
||||||
|
local helpmsg = "Channel has been set. Waiting for data..."
|
||||||
|
digistuff.update_panel_formspec(pos,helpmsg)
|
||||||
|
end,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
node_box = {
|
node_box = {
|
||||||
|
@ -14,6 +14,7 @@ minetest.register_node("digistuff:piezo", {
|
|||||||
digistuff.sounds_playing[pos_hash] = nil
|
digistuff.sounds_playing[pos_hash] = nil
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
tiles = {
|
tiles = {
|
||||||
"digistuff_piezo_top.png",
|
"digistuff_piezo_top.png",
|
||||||
"digistuff_piezo_sides.png",
|
"digistuff_piezo_sides.png",
|
||||||
|
@ -66,6 +66,7 @@ minetest.register_node("digistuff:piston", {
|
|||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
if fields.channel then meta:set_string("channel",fields.channel) end
|
if fields.channel then meta:set_string("channel",fields.channel) end
|
||||||
end,
|
end,
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
digiline = {
|
digiline = {
|
||||||
wire = {
|
wire = {
|
||||||
rules = {
|
rules = {
|
||||||
@ -124,6 +125,7 @@ minetest.register_node("digistuff:piston_ext", {
|
|||||||
{-0.5,-0.5,-1.5,0.5,0.5,0.5},
|
{-0.5,-0.5,-1.5,0.5,0.5,0.5},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
on_rotate = function() return false end,
|
on_rotate = function() return false end,
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = function(pos, formname, fields, sender)
|
||||||
local name = sender:get_player_name()
|
local name = sender:get_player_name()
|
||||||
|
@ -95,6 +95,7 @@ minetest.register_node("digistuff:button", {
|
|||||||
rules = digistuff.button_get_rules,
|
rules = digistuff.button_get_rules,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
groups = {dig_immediate = 2,digiline_receiver = 1,},
|
groups = {dig_immediate = 2,digiline_receiver = 1,},
|
||||||
description = "Digilines Button",
|
description = "Digilines Button",
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
@ -160,6 +161,7 @@ minetest.register_node("digistuff:button_off", {
|
|||||||
action = digistuff.button_handle_digilines,
|
action = digistuff.button_handle_digilines,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
|
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
|
||||||
drop = "digistuff:button",
|
drop = "digistuff:button",
|
||||||
after_destruct = digistuff.remove_receiver,
|
after_destruct = digistuff.remove_receiver,
|
||||||
@ -204,6 +206,7 @@ minetest.register_node("digistuff:button_off_pushed", {
|
|||||||
action = digistuff.button_handle_digilines,
|
action = digistuff.button_handle_digilines,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
on_timer = digistuff.button_turnoff,
|
on_timer = digistuff.button_turnoff,
|
||||||
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
|
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
|
||||||
drop = "digistuff:button",
|
drop = "digistuff:button",
|
||||||
@ -240,6 +243,7 @@ minetest.register_node("digistuff:button_on", {
|
|||||||
{ -4/16, -2/16, 4/16, 4/16, 2/16, 6/16 } -- the button itself
|
{ -4/16, -2/16, 4/16, 4/16, 2/16, 6/16 } -- the button itself
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
digiline =
|
digiline =
|
||||||
{
|
{
|
||||||
receptor = {},
|
receptor = {},
|
||||||
@ -279,6 +283,7 @@ minetest.register_node("digistuff:button_on_pushed", {
|
|||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -6/16, -6/16, 5/16, 6/16, 6/16, 8/16 }
|
fixed = { -6/16, -6/16, 5/16, 6/16, 6/16, 8/16 }
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -338,6 +343,7 @@ minetest.register_node("digistuff:wall_knob", {
|
|||||||
{-0.4,-0.4,0,0.4,0.4,0.5},
|
{-0.4,-0.4,0,0.4,0.4,0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
groups = {dig_immediate = 2,digiline_receiver = 1,},
|
groups = {dig_immediate = 2,digiline_receiver = 1,},
|
||||||
description = "Digilines Wall Knob",
|
description = "Digilines Wall Knob",
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
@ -397,6 +403,7 @@ minetest.register_node("digistuff:wall_knob_configured", {
|
|||||||
{-0.4,-0.4,0,0.4,0.4,0.5},
|
{-0.4,-0.4,0,0.4,0.4,0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
groups = {dig_immediate = 2,digiline_receiver = 1,not_in_creative_inventory = 1,},
|
groups = {dig_immediate = 2,digiline_receiver = 1,not_in_creative_inventory = 1,},
|
||||||
description = "Digilines Wall Knob (configured state - you hacker you!)",
|
description = "Digilines Wall Knob (configured state - you hacker you!)",
|
||||||
drop = "digistuff:wall_knob",
|
drop = "digistuff:wall_knob",
|
||||||
|
BIN
textures/digistuff_channelcopier.png
Normal file
BIN
textures/digistuff_channelcopier.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
@ -29,6 +29,7 @@ minetest.register_node("digistuff:timer", {
|
|||||||
{-3/16, -6/16, -3/16, 3/16, -5/16, 3/16}, -- IC
|
{-3/16, -6/16, -3/16, 3/16, -5/16, 3/16}, -- IC
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = function(pos, formname, fields, sender)
|
||||||
|
@ -290,6 +290,11 @@ minetest.register_node("digistuff:touchscreen", {
|
|||||||
{ -0.5, -0.5, 0.4, 0.5, 0.5, 0.5 }
|
{ -0.5, -0.5, 0.4, 0.5, 0.5, 0.5 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
_digistuff_channelcopier_fieldname = "channel",
|
||||||
|
_digistuff_channelcopier_onset = function(pos)
|
||||||
|
minetest.get_meta(pos):set_int("init",1)
|
||||||
|
digistuff.update_ts_formspec(pos)
|
||||||
|
end,
|
||||||
on_receive_fields = digistuff.ts_on_receive_fields,
|
on_receive_fields = digistuff.ts_on_receive_fields,
|
||||||
digiline =
|
digiline =
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user