diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5791805
--- /dev/null
+++ b/README.md
@@ -0,0 +1,8 @@
+# Digimons - Digilines Monitors
+Digilines monitors mod for Minetest using Display API / Font API.
+
+**Version**: Alpha
+
+**Dependancies**: display_api, font_api, digilines
+
+**License**: LGPL v3 for the code, CC-BY-SA for the textures.
diff --git a/nodes.lua b/nodes.lua
index 059a67c..f3e2cc6 100644
--- a/nodes.lua
+++ b/nodes.lua
@@ -1,86 +1,105 @@
--[[
- digimons mod for Minetest - Digiline monitors using Display API / Font API
- (c) Pierre-Yves Rollo
+ digimons mod for Minetest - Digilines monitors using Display API / Font API
+ (c) Pierre-Yves Rollo
- This file is part of digimons.
+ This file is part of digimons.
- signs is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ signs is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- signs is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ signs is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with signs. If not, see .
+ You should have received a copy of the GNU General Public License
+ along with signs. If not, see .
--]]
-minetest.register_node('digimons:cathodic_amber_monitor', {
- description = "Cathodic amber monitor",
- sunlight_propagates = false,
- paramtype = "light",
- paramtype2 = "facedir",
- tiles = { "digimons_amber_top.png", "digimons_amber_bottom.png",
- "digimons_amber_sides.png", "digimons_amber_sides.png^[transformFX]",
- "digimons_amber_back.png", "digimons_amber_front.png",},
- drawtype = "nodebox",
- groups = {choppy = 1, oddly_breakable_by_hand = 1, display_modpack_node = 1},
- node_box = {
- type = "fixed",
- fixed = {
- {-8/16, 8/16, -8/16, 8/16, 7/16, -7/16},
- {-8/16, -8/16, -8/16, 8/16, -5/16, -7/16},
- {-8/16, 7/16, -8/16, -7/16, -5/16, -7/16},
- {7/16, 7/16, -8/16, 8/16, -5/16, -7/16},
- {-8/16, -8/16, -7/16, 8/16, 8/16, 1/16},
- {-6/16, 5/16, 1/16, 6/16, -8/16, 8/16}
- },
- },
- display_entities = {
- ["digimons:screen"] = {
- on_display_update = font_api.on_display_update,
- depth = -7/16 - display_api.entity_spacing,
- top = -1/16,
- aspect_ratio = 0.5, maxlines = 6,
- size = { x = 23/32, y = 10/16 },
- color = "#FFA000", font_name = "mozart", halign="left", valing="top",
- },
- },
- on_place = function(itemstack, placer, pointed_thing)
- minetest.rotate_node(itemstack, placer, pointed_thing)
- return display_api.on_place(itemstack, placer, pointed_thing)
- end,
- on_construct = function(pos)
- minetest.get_meta(pos):set_string("formspec",
- "field[channel;Channel;${channel}]")
- display_api.on_construct(pos)
- end,
- on_destruct = display_api.on_destruct,
- on_rotate = display_api.on_rotate,
- on_receive_fields = function(pos, formname, fields, player)
- local name = player:get_player_name()
- if minetest.is_protected(pos, name) then
- minetest.record_protection_violation(pos, name)
- return
- end
+local common_node_def = {
+ groups = { display_api = 1},
+ on_place = function(itemstack, placer, pointed_thing)
+ minetest.rotate_node(itemstack, placer, pointed_thing)
+ return display_api.on_place(itemstack, placer, pointed_thing)
+ end,
+ on_destruct = display_api.on_destruct,
+ on_rotate = display_api.on_rotate,
+ on_punch = display_api.update_entities,
+ on_construct = function(pos)
+ minetest.get_meta(pos):set_string("formspec",
+ "field[channel;Channel;${channel}]")
+ display_api.on_construct(pos)
+ end,
+ on_receive_fields = function(pos, formname, fields, player)
+ local name = player:get_player_name()
+ if minetest.is_protected(pos, name) then
+ minetest.record_protection_violation(pos, name)
+ return
+ end
- if (fields.channel) then
- minetest.get_meta(pos):set_string("channel", fields.channel)
- end
- end,
- on_punch = display_api.update_entities,
- digiline = {
- receptor = {},
- effector = {
- action = function(pos, _, channel, msg)
- if channel ~= minetest.get_meta(pos):get_string("channel") then
- return
- end
- digimons.push_text_on_screen(pos, msg)
- end,
- },
- },
+ if (fields.channel) then
+ minetest.get_meta(pos):set_string("channel", fields.channel)
+ end
+ end,
+ digiline = {
+ receptor = {},
+ effector = {
+ action = function(pos, _, channel, msg)
+ if channel ~= minetest.get_meta(pos):get_string("channel") then
+ return
+ end
+ digimons.push_text_on_screen(pos, msg)
+ end,
+ },
+ },
+}
+
+function digimons.register_monitor(nodename, nodedef)
+ def = table.copy(common_node_def)
+ for key, value in pairs(nodedef) do
+ if key == 'groups' then
+ def[key] = def[key] or {}
+ for key2, value2 in pairs(value) do
+ def[key][key2] = value2
+ end
+ else
+ def[key] = value
+ end
+ end
+ minetest.register_node(nodename, nodedef)
+end
+
+digimons.register_monitor('digimons:cathodic_amber_monitor', {
+ description = "Cathodic amber monitor",
+ sunlight_propagates = false,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = { "digimons_amber_top.png", "digimons_amber_bottom.png",
+ "digimons_amber_sides.png", "digimons_amber_sides.png^[transformFX]",
+ "digimons_amber_back.png", "digimons_amber_front.png",},
+ drawtype = "nodebox",
+ groups = {choppy = 1, oddly_breakable_by_hand = 1},
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-8/16, 8/16, -8/16, 8/16, 7/16, -7/16},
+ {-8/16, -8/16, -8/16, 8/16, -5/16, -7/16},
+ {-8/16, 7/16, -8/16, -7/16, -5/16, -7/16},
+ {7/16, 7/16, -8/16, 8/16, -5/16, -7/16},
+ {-8/16, -8/16, -7/16, 8/16, 8/16, 1/16},
+ {-6/16, 5/16, 1/16, 6/16, -8/16, 8/16}
+ },
+ },
+ display_entities = {
+ ["digimons:screen"] = {
+ on_display_update = font_api.on_display_update,
+ depth = -7/16 - display_api.entity_spacing,
+ top = -1/16,
+ aspect_ratio = 0.5, maxlines = 6,
+ size = { x = 23/32, y = 10/16 },
+ color = "#FFA000", font_name = "mozart", halign="left", valing="top",
+ },
+ },
})