diff --git a/blocks/cable.lua b/blocks/cable.lua index 8deca39..886f0b0 100644 --- a/blocks/cable.lua +++ b/blocks/cable.lua @@ -26,7 +26,8 @@ function logikraft.registerCable(name,nodeboxes,connections,nbconn) type = "fixed", fixed = nodeboxes }, - groups = {circuitry = 1,dig_immediate = 3} + groups = {circuitry = 1,dig_immediate = 3}, + drop = nil }) -- We sort the connections and nbconn diff --git a/blocks/circuit.lua b/blocks/circuit.lua index f5084c4..9cf4aa5 100644 --- a/blocks/circuit.lua +++ b/blocks/circuit.lua @@ -1,34 +1,3 @@ -local _contexts = {} - -function logikraft.setNameFormspec(targetType, defaultName) - - local text = "Please enter the name of this " .. targetType - - local formspec = { - "formspec_version[4]", - "size[6,3.476]", - "label[0.375,0.5;", minetest.formspec_escape(text), "]", - "field[0.375,1.25;5.25,0.8;name;".. minetest.formspec_escape(targetType) .. " name;"..(defaultName or "").."]", - "button[1.5,2.3;3,0.8;commit;OK]" - } - - -- table.concat is faster than string concatenation - `..` - return table.concat(formspec, "") -end - -function logikraft.showSetNameFormspec(playerName, targetName) - minetest.show_formspec(playerName, "logikraft:setNameFormSpec", logikraft.setNameFormspec(targetName)) -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "logikraft:setNameFormSpec" then return end - - if fields.commit then - local pname = player:get_player_name() - minetest.chat_send_all(pname .. " guessed " .. fields.name) - end -end) - minetest.register_node("logikraft:circuitBlock", { description = "Circuit Block", tiles = {"circuit_block.png"}, diff --git a/blocks/component.lua b/blocks/component.lua index 8f7028c..0948b2d 100644 --- a/blocks/component.lua +++ b/blocks/component.lua @@ -55,6 +55,7 @@ do local nodename = "logikraft:component_"..name.."_"..tostring(x).."_"..tostring(y) minetest.register_node(nodename, { drawtype = "block", + description = name.." component", tiles = { "component_"..name..".png", "component.png", diff --git a/blocks/iocomponent.lua b/blocks/iocomponent.lua new file mode 100644 index 0000000..a492124 --- /dev/null +++ b/blocks/iocomponent.lua @@ -0,0 +1,11 @@ +minetest.register_node("logikraft:inputBlock", { + description = "Input Block", + tiles = {"input_block.png"}, + groups = {circuitry = 1,dig_immediate = 3} +}) + +minetest.register_node("logikraft:outputBlock", { + description = "Output Block", + tiles = {"output_block.png"}, + groups = {circuitry = 1,dig_immediate = 3} +}) diff --git a/formspecs.lua b/formspecs.lua new file mode 100644 index 0000000..bae6f5d --- /dev/null +++ b/formspecs.lua @@ -0,0 +1,40 @@ +local _contexts = {} + + +function logikraft.showNameFormspec(playername,pos) + + local node = minetest.get_node(pos) + local nodedesc = minetest.registered_nodes[node.name].description + + local text = "Please enter the name of the " .. nodedesc .. " at ("..tostring(pos.x)..","..tostring(pos.y)..","..tostring(pos.z)..")" + + local meta = minetest.get_meta(pos) + local oldname = meta:get_string("logikraft:name") or "" + + + local formspec = { + "formspec_version[4]", + "size[6,3.476]", + "label[0.375,0.5;", minetest.formspec_escape(text), "]", + "field[0.375,1.25;5.25,0.8;name;".. minetest.formspec_escape(nodedesc) .. " name;"..oldname.."]", + "button_exit[1.5,2.3;3,0.8;commit;OK]" + } + _contexts[playername] = pos + minetest.show_formspec(playername, "logikraft:nameFormSpec", table.concat(formspec, "")) +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "logikraft:nameFormSpec" then return end + + if fields.commit then + local pname = player:get_player_name() + if _contexts[pname] + then + local meta = minetest.get_meta(_contexts[pname]) + meta:set_string("logikraft:name",fields.name) + minetest.chat_send_player(pname, "Set to "..fields.name) + else + minetest.chat_send_player(pname, "Could not get pos data from formspec") + end + end +end) \ No newline at end of file diff --git a/init.lua b/init.lua index b6de4d9..7160319 100644 --- a/init.lua +++ b/init.lua @@ -2,47 +2,20 @@ logikraft = {} dofile(minetest.get_modpath("logikraft") .. "/utils.lua") +dofile(minetest.get_modpath("logikraft") .. "/formspecs.lua") dofile(minetest.get_modpath("logikraft") .. "/circuits.lua") dofile(minetest.get_modpath("logikraft") .. "/blocks/circuit.lua") dofile(minetest.get_modpath("logikraft") .. "/blocks/component.lua") dofile(minetest.get_modpath("logikraft") .. "/blocks/cable.lua") dofile(minetest.get_modpath("logikraft") .. "/blocks/cables_register.lua") +dofile(minetest.get_modpath("logikraft") .. "/blocks/iocomponent.lua") dofile(minetest.get_modpath("logikraft") .. "/items.lua") minetest.register_on_joinplayer(function(player) player:hud_set_hotbar_itemcount(24) end) -minetest.register_node("logikraft:inputBlock", { - description = "Input Block", - tiles = {"input_block.png"}, - after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("formspec",logikraft.setNameFormspec("Input Block"),meta:get_string("name")) - end, - on_receive_fields = function(pos, formname, fields, player) - if fields.quit then - return - end - minetest.get_meta(pos):set_string("name",fields.name) - end, - groups = {circuitry = 1,dig_immediate = 3} -}) -minetest.register_node("logikraft:outputBlock", { - description = "Output Block", - tiles = {"output_block.png"}, - after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("formspec",logikraft.setNameFormspec("Output Block"),meta:get_string("name")) - end, - on_receive_fields = function(pos, formname, fields, player) - if fields.quit then - return - end - minetest.get_meta(pos):set_string("name",fields.name) - end, - groups = {circuitry = 1,dig_immediate = 3} -}) + diff --git a/items.lua b/items.lua index 20321b0..a1f8c3b 100644 --- a/items.lua +++ b/items.lua @@ -143,6 +143,12 @@ minetest.register_craftitem("logikraft:editor", { elseif logikraft.componentnodes[node.name] then minetest.chat_send_all("Looking at component "..logikraft.componentnodes[node.name].name) + elseif node.name == "logikraft:inputBlock" + then + logikraft.showNameFormspec(user:get_player_name(), pointed_thing.under) + elseif node.name == "logikraft:outputBlock" + then + logikraft.showNameFormspec(user:get_player_name(), pointed_thing.under) end return itemstack