diff --git a/.luacheckrc b/.luacheckrc index ca3151d..4339ca0 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -1,4 +1,5 @@ unused_args = false +--std = "luanti+max" globals = { "wrench", @@ -10,15 +11,20 @@ read_globals = { "table.indexof", "minetest", "ItemStack", + "barter", "beacon", + "bones", "christmas", "digilines", "drawers", + "fancy_vend", + "jumpdrive", + "locator", "mesecon", "pipeworks", "signs_lib", + "smartshop", "spacecannon", "xdecor", - "bones", } diff --git a/init.lua b/init.lua index 33161aa..8535a88 100644 --- a/init.lua +++ b/init.lua @@ -30,6 +30,7 @@ local mods = { "bones", "christmas", "connected_chests", + "currency", "default", "digibuilder", "digilines", @@ -37,8 +38,11 @@ local mods = { "digistuff", "digtron", "drawers", - "mapserver", + "fancy_vend", "easyvend", + "jumpdrive", + "locator", + "mapserver", "mesecons_commandblock", "mesecons_detector", "mesecons_luacontroller", @@ -51,6 +55,7 @@ local mods = { "powerbanks", "protector", "signs_lib", + "smartshop", "spacecannon", "soundblock", "technic", diff --git a/mod.conf b/mod.conf index 4348722..6fb5d6b 100644 --- a/mod.conf +++ b/mod.conf @@ -8,6 +8,7 @@ optional_depends = """ biofuel, bones, connected_chests, + currency, christmas, default, digtron, @@ -16,8 +17,11 @@ optional_depends = """ digiscreen, digistuff, drawers, - mapserver, + fancy_vend, easyvend, + jumpdrive, + locator, + mapserver, mesecons_commandblock, mesecons_detector, mesecons_luacontroller, @@ -30,6 +34,7 @@ optional_depends = """ powerbanks, protector, signs_lib, + smartshop, spacecannon, soundblock, technic, diff --git a/nodes/currency.lua b/nodes/currency.lua new file mode 100644 index 0000000..c284c2a --- /dev/null +++ b/nodes/currency.lua @@ -0,0 +1,42 @@ + +-- Register wrench support for the currency mod + +wrench.register_node("currency:barter", { + lists = { "pl1", "pl2" }, + metas = { + clean = wrench.META_TYPE_INT, + formspec = wrench.META_TYPE_IGNORE, + infotext = wrench.META_TYPE_IGNORE, + pl1 = wrench.META_TYPE_STRING, + pl2 = wrench.META_TYPE_STRING, + pl1step = wrench.META_TYPE_INT, + pl2step = wrench.META_TYPE_INT, + timer = wrench.META_TYPE_INT, + }, + timer = true, + after_place = function(pos, player, stack, pointed) + barter.chest.update_formspec(core.get_meta(pos)) + end, +}) + +wrench.register_node("currency:safe", { + lists = { "main" }, + metas = { + infotext = wrench.META_TYPE_STRING, + owner = wrench.META_TYPE_STRING, + }, + owned = true, +}) + +-- Unkown what happens if a shop is wrenched while a user is using it. +for _, name in ipairs({ "currency:shop", "currency:shop_empty" }) do + wrench.register_node(name, { + lists = { "customers_gave", "owner_gives", "owner_wants", "stock" }, + metas = { + infotext = wrench.META_TYPE_STRING, + owner = wrench.META_TYPE_STRING, + }, + owned = true, + }) +end + diff --git a/nodes/fancy_vend.lua b/nodes/fancy_vend.lua new file mode 100644 index 0000000..8bfe43a --- /dev/null +++ b/nodes/fancy_vend.lua @@ -0,0 +1,42 @@ + +-- Register wrench support for the fancy_vend mod + +for _, vendor in ipairs({ + "fancy_vend:player_vendor", + "fancy_vend:player_depo", + "fancy_vend:admin_vendor", + "fancy_vend:admin_depo", + }) do + wrench.register_node(vendor, { + lists = { "given_item", "main", "wanted_item" }, + metas = { + alerted = wrench.META_TYPE_STRING, + configured = wrench.META_TYPE_STRING, + infotext = wrench.META_TYPE_IGNORE, + item = wrench.META_TYPE_STRING, + log = wrench.META_TYPE_STRING, + message = wrench.META_TYPE_STRING, + owner = wrench.META_TYPE_STRING, + settings = wrench.META_TYPE_STRING, + }, + after_pickup = function(pos, node, meta_table, player) + local above_node_pos = table.copy(pos) + above_node_pos.y = above_node_pos.y + 1 + core.remove_node(above_node_pos) + fancy_vend.remove_item(above_node_pos) + end, + after_place = function(pos) + -- This happens during vendor's on_place function is being run! + -- So we need to hack around that race condition. + -- At this time wrench has already set the meta, so we can stash + -- it from the node with fancy_vend function + local settings = fancy_vend.get_vendor_settings(pos) + core.after(0, function(p, s) + -- Use fancy_vend's own function to apply the stashed settings + fancy_vend.set_vendor_settings(p, s) + fancy_vend.refresh_vendor(p) + end, pos, settings) + end, + }) +end + diff --git a/nodes/jumpdrive.lua b/nodes/jumpdrive.lua new file mode 100644 index 0000000..c649bb5 --- /dev/null +++ b/nodes/jumpdrive.lua @@ -0,0 +1,40 @@ + +-- Register wrench support for the jumpdrive mod + +wrench.register_node("jumpdrive:engine", { + lists = {"main", "upgrade"}, + metas = { + x = wrench.META_TYPE_INT, + y = wrench.META_TYPE_INT, + z = wrench.META_TYPE_INT, + radius = wrench.META_TYPE_INT, + powerstorage = wrench.META_TYPE_INT, + max_powerstorage = wrench.META_TYPE_INT, + power_requirement = wrench.META_TYPE_IGNORE, + owner = wrench.META_TYPE_STRING, + channel = wrench.META_TYPE_STRING, + infotext = wrench.META_TYPE_STRING, + formspec = wrench.META_TYPE_IGNORE, -- legacy field + HV_EU_input = wrench.META_TYPE_IGNORE, + HV_EU_demand = wrench.META_TYPE_IGNORE + }, + after_place = function(pos) + jumpdrive.update_formspec(core.get_meta(pos), pos) + end, +}) + +wrench.register_node("jumpdrive:fleet_controller", { + lists = {"main"}, + metas = { + x = wrench.META_TYPE_INT, + y = wrench.META_TYPE_INT, + z = wrench.META_TYPE_INT, + owner = wrench.META_TYPE_STRING, + channel = wrench.META_TYPE_STRING, + infotext = wrench.META_TYPE_STRING, + formspec = wrench.META_TYPE_STRING, + active = wrench.META_TYPE_INT, + jump_index = wrench.META_TYPE_INT, + jump_list = wrench.META_TYPE_STRING + } +}) diff --git a/nodes/locator.lua b/nodes/locator.lua new file mode 100644 index 0000000..754b40b --- /dev/null +++ b/nodes/locator.lua @@ -0,0 +1,36 @@ + +-- Register wrench support for locator mod + +wrench.register_node("locator:radar", { + lists = {}, + metas = { + formspec = wrench.META_TYPE_IGNORE, + range = wrench.META_TYPE_INT, + }, + after_place = function(pos, player) + local node_def = core.registered_nodes["locator:radar"] + node_def.on_receive_fields(pos, nil, {}, player) + end, +}) + +for i = 1, 3 do + local node_name = "locator:beacon_" .. i + wrench.register_node(node_name, { + lists = {}, + metas = { + active = wrench.META_TYPE_INT, + formspec = wrench.META_TYPE_IGNORE, + infotext = wrench.META_TYPE_IGNORE, + name = wrench.META_TYPE_STRING, + owner = wrench.META_TYPE_STRING, + range = wrench.META_TYPE_IGNORE, + }, + after_pickup = function(pos) + locator.remove_beacon(pos) + end, + after_place = function(pos, player) + local node_def = core.registered_nodes[node_name] + node_def.on_receive_fields(pos, nil, {}, player) + end, + }) +end diff --git a/nodes/smartshop.lua b/nodes/smartshop.lua new file mode 100644 index 0000000..88277ff --- /dev/null +++ b/nodes/smartshop.lua @@ -0,0 +1,42 @@ + +-- Register wrench support for the smartshop mod + +wrench.register_node("smartshop:shop", { + lists = { + "give1", "give2", "give3", "give4", + "main", + "pay1", "pay2", "pay3", "pay4", + }, + metas = { + alerted = wrench.META_TYPE_INT, + creative = wrench.META_TYPE_INT, + ghost = wrench.META_TYPE_INT, + infotext = wrench.META_TYPE_IGNORE, + owner = wrench.META_TYPE_STRING, + state = wrench.META_TYPE_IGNORE, + type = wrench.META_TYPE_INT, + }, + after_pickup = function(pos) + -- Remove entities + if smartshop.update_entities then + smartshop.update_entities(pos, "clear") + else + -- Older version + smartshop.update(pos, "clear") + end + -- Give smartshop a chance to keep track of statistics + smartshop.update_info(pos) + end, + after_place = function(pos) + -- Update infotext + smartshop.update_info(pos) + -- Create entities + if smartshop.update_entities then + smartshop.update_entities(pos, "update") + else + -- Older version + smartshop.update(pos, "update") + end + end, +}) +