From 8cd08c1852dc5745ab14b31a11e9f7531028b402 Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Fri, 23 Jun 2023 16:41:19 +0200 Subject: [PATCH 01/13] add recipes for fan, engine and forcefield --- crafts.lua | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/crafts.lua b/crafts.lua index a02c8ab..80b3583 100644 --- a/crafts.lua +++ b/crafts.lua @@ -1736,3 +1736,30 @@ minetest.register_craft({ {"scifi_nodes:stripes"} } }) + +minetest.register_craft({ + output = "scifi_nodes:fan", + recipe = { + {"scifi_nodes:grey", "", "scifi_nodes:grey"}, + {"", "scifi_nodes:vent2", ""}, + {"scifi_nodes:grey", "", "scifi_nodes:grey"} + } +}) + +minetest.register_craft({ + output = "scifi_nodes:engine", + recipe = { + {"scifi_nodes:bluwllight", "", "scifi_nodes:bluwllight"}, + {"scifi_nodes:screen", "scifi_nodes:fan", "scifi_nodes:screen3"}, + {"scifi_nodes:bluwllight", "", "scifi_nodes:bluwllight"} + } +}) + +minetest.register_craft({ + output = "scifi_nodes:forcefield 4", + recipe = { + {"scifi_nodes:octbl", "", "scifi_nodes:octbl"}, + {"", "scifi_nodes:engine", ""}, + {"scifi_nodes:octbl", "", "scifi_nodes:octbl"} + } +}) From fd4a03dd8d22ad4db6cd1444d616bfe5e9ce8683 Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Fri, 23 Jun 2023 16:48:18 +0200 Subject: [PATCH 02/13] allow digging of forcefield (same toughness as a diamondblock) --- forcefield.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/forcefield.lua b/forcefield.lua index 7071fce..939aabb 100644 --- a/forcefield.lua +++ b/forcefield.lua @@ -2,11 +2,13 @@ minetest.register_node("scifi_nodes:forcefield", { description = "Forcefield", sunlight_propagates = true, drawtype = "glasslike", - groups = {}, + groups = { + cracky = 1, + level = 3 + }, + sounds = scifi_nodes.node_sound_glass_defaults(), paramtype = "light", light_source = minetest.LIGHT_MAX, - diggable = false, - drop = '', tiles = {{ name = "scifi_nodes_forcefield.png", animation = { @@ -15,6 +17,5 @@ minetest.register_node("scifi_nodes:forcefield", { aspect_h = 16, length = 1.0, } - }}, - on_blast = function() end, + }} }) \ No newline at end of file From 5b9e18f2786b9b0848536cc535523c6af648e4c5 Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Fri, 23 Jun 2023 16:56:45 +0200 Subject: [PATCH 03/13] register `forcefield` and `wall` node as stealthnode if available --- .luacheckrc | 3 ++- init.lua | 5 +++++ mod.conf | 1 + stealthnodes.lua | 3 +++ 4 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 stealthnodes.lua diff --git a/.luacheckrc b/.luacheckrc index ce9f8ea..f0423c2 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -22,5 +22,6 @@ read_globals = { "minetest", "mesecon", "unifieddyes", - "letters" + "letters", + "stealthnode" } diff --git a/init.lua b/init.lua index 6e9cb4b..4f8df32 100644 --- a/init.lua +++ b/init.lua @@ -36,4 +36,9 @@ dofile(MP.."/crafts.lua") if minetest.get_modpath("letters") then -- register letter nodes dofile(MP.."/letters.lua") +end + +if minetest.get_modpath("mesecons_stealthnode") then + -- register stealthnodes + dofile(MP.."/stealthnodes.lua") end \ No newline at end of file diff --git a/mod.conf b/mod.conf index 6ace87b..8140ac1 100644 --- a/mod.conf +++ b/mod.conf @@ -13,4 +13,5 @@ basic_materials, dye, unifieddyes, letters +mesecons_stealthnode """ diff --git a/stealthnodes.lua b/stealthnodes.lua new file mode 100644 index 0000000..337cc9e --- /dev/null +++ b/stealthnodes.lua @@ -0,0 +1,3 @@ + +stealthnode.register_stealthnode("scifi_nodes", "forcefield") +stealthnode.register_stealthnode("scifi_nodes", "wall") \ No newline at end of file From f9bfaf0988dd3e663ca7694bd76b2e0612b34d38 Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Fri, 23 Jun 2023 17:04:39 +0200 Subject: [PATCH 04/13] add recipe for `scifi_nodes:crate` and refactor chest registration --- chest.lua | 112 ++++++++++++++++++++++++----------------------------- crafts.lua | 9 +++++ 2 files changed, 59 insertions(+), 62 deletions(-) diff --git a/chest.lua b/chest.lua index d5f9727..4ca91cd 100644 --- a/chest.lua +++ b/chest.lua @@ -1,6 +1,5 @@ --chest code from default(Copyright (C) 2012 celeron55, Perttu Ahola ) - local chest_formspec = "size[8,9]" .. default.gui_bg .. @@ -13,10 +12,7 @@ local chest_formspec = "listring[current_player;main]" .. default.get_hotbar_bg(0,4.85) - - -- Helper functions - local function drop_chest_stuff() return function(pos, oldnode, oldmetadata, digger) local meta = minetest.get_meta(pos) @@ -35,40 +31,57 @@ local function drop_chest_stuff() end end ---chest code Copyright (C) 2011-2012 celeron55, Perttu Ahola -minetest.register_node("scifi_nodes:crate", { +local function register_chest(name, custom_def) + assert(custom_def.description) + assert(custom_def.tiles) + + local def = { + paramtype2 = "facedir", + legacy_facedir_simple = true, + is_ground_content = false, + sounds = scifi_nodes.node_sound_wood_defaults(), + after_dig_node = drop_chest_stuff(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", chest_formspec) + meta:set_string("infotext", custom_def.description) + local inv = meta:get_inventory() + inv:set_size("main", 8 * 4) + end, + on_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + minetest.log("action", player:get_player_name() .. + " moves stuff in chest at " .. minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " moves stuff to chest at " .. minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " takes stuff from chest at " .. minetest.pos_to_string(pos)) + end + } + + for k, v in pairs(custom_def) do + def[k] = v + end + + minetest.register_node(name, def) +end + + +register_chest("scifi_nodes:crate", { description = "Crate", tiles = {"scifi_nodes_crate.png"}, - paramtype2 = "facedir", - groups = {cracky = 1, oddly_breakable_by_hand = 2, fuel = 8}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = scifi_nodes.node_sound_wood_defaults(), - - after_dig_node = drop_chest_stuff(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", chest_formspec) - meta:set_string("infotext", "Crate") - local inv = meta:get_inventory() - inv:set_size("main", 8 * 4) - end, - on_metadata_inventory_move = function(pos, from_list, from_index, - to_list, to_index, count, player) - minetest.log("action", player:get_player_name() .. - " moves stuff in chest at " .. minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " moves stuff to chest at " .. minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " takes stuff from chest at " .. minetest.pos_to_string(pos)) - end, + groups = { + cracky = 1, + oddly_breakable_by_hand = 2, + fuel = 8 + } }) -minetest.register_node("scifi_nodes:box", { +register_chest("scifi_nodes:box", { description = "Storage box", tiles = { "scifi_nodes_box_top.png", @@ -78,32 +91,7 @@ minetest.register_node("scifi_nodes:box", { "scifi_nodes_box.png", "scifi_nodes_box.png" }, - paramtype2 = "facedir", - groups = {cracky = 1}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = scifi_nodes.node_sound_metal_defaults(), - - after_dig_node = drop_chest_stuff(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", chest_formspec) - meta:set_string("infotext", "Box") - local inv = meta:get_inventory() - inv:set_size("main", 8 * 4) - end, - on_metadata_inventory_move = function(pos, from_list, from_index, - to_list, to_index, count, player) - minetest.log("action", player:get_player_name() .. - " moves stuff in chest at " .. minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " moves stuff to chest at " .. minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " takes stuff from chest at " .. minetest.pos_to_string(pos)) - end, + groups = { + cracky = 1 + } }) ---end of chest code \ No newline at end of file diff --git a/crafts.lua b/crafts.lua index 80b3583..c77f383 100644 --- a/crafts.lua +++ b/crafts.lua @@ -475,6 +475,15 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "scifi_nodes:crate", + recipe = { + {"scifi_nodes:grey", "scifi_nodes:grey", "scifi_nodes:grey"}, + {"scifi_nodes:grey", "", "scifi_nodes:grey"}, + {"scifi_nodes:grey", "scifi_nodes:grey", "scifi_nodes:grey"} + } +}) + -- 6 blue metal from 6 plastic, 2 blue dye, 1 dented metal block minetest.register_craft({ output = "scifi_nodes:bluemetal 6", From fcd5ae671ee49840b164a1eb9e77ef6e474ed7bd Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Mon, 26 Jun 2023 10:00:47 +0200 Subject: [PATCH 05/13] mod.conf fix --- mod.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod.conf b/mod.conf index 8140ac1..58220d6 100644 --- a/mod.conf +++ b/mod.conf @@ -12,6 +12,6 @@ mesecons_receiver, basic_materials, dye, unifieddyes, -letters +letters, mesecons_stealthnode """ From 44d108fff86235958d8d6b3acb2b2e2d9bee8c75 Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Thu, 7 Sep 2023 15:20:57 +0200 Subject: [PATCH 06/13] add empty table fallbacks if no sound implented/found --- sounds.lua | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sounds.lua b/sounds.lua index 90eb198..181760f 100644 --- a/sounds.lua +++ b/sounds.lua @@ -1,10 +1,11 @@ --- sound definitions +-- sound definitions with fallback to empty sound-table function scifi_nodes.node_sound_defaults(param) if minetest.get_modpath("default") then -- default game return default.node_sound_defaults(param) end + return {} end function scifi_nodes.node_sound_wood_defaults(param) @@ -12,6 +13,7 @@ function scifi_nodes.node_sound_wood_defaults(param) -- default game return default.node_sound_wood_defaults(param) end + return {} end function scifi_nodes.node_sound_glass_defaults(param) @@ -19,6 +21,7 @@ function scifi_nodes.node_sound_glass_defaults(param) -- default game return default.node_sound_glass_defaults(param) end + return {} end function scifi_nodes.node_sound_metal_defaults(param) @@ -26,6 +29,7 @@ function scifi_nodes.node_sound_metal_defaults(param) -- default game return default.node_sound_metal_defaults(param) end + return {} end function scifi_nodes.node_sound_stone_defaults(param) @@ -33,6 +37,7 @@ function scifi_nodes.node_sound_stone_defaults(param) -- default game return default.node_sound_stone_defaults(param) end + return {} end function scifi_nodes.node_sound_dirt_defaults(param) @@ -40,6 +45,7 @@ function scifi_nodes.node_sound_dirt_defaults(param) -- default game return default.node_sound_dirt_defaults(param) end + return {} end function scifi_nodes.node_sound_plant_defaults(param) @@ -47,4 +53,5 @@ function scifi_nodes.node_sound_plant_defaults(param) -- default game return default.node_sound_leaves_defaults(param) end + return {} end From 63f4bd529ed5828cbe04f08cf046d4ceefe47f0d Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Tue, 17 Oct 2023 11:35:26 +0200 Subject: [PATCH 07/13] embed dirt,wood and grass texture for proper cross-game support --- README.md | 4 ++++ nodeboxes.lua | 7 ++----- nodes.lua | 22 ++++++++++------------ panes.lua | 2 +- textures/scifi_nodes_dirt.png | Bin 0 -> 272 bytes textures/scifi_nodes_grass.png | Bin 252 -> 461 bytes textures/scifi_nodes_grass_side.png | Bin 0 -> 461 bytes textures/scifi_nodes_wood.png | Bin 0 -> 218 bytes 8 files changed, 17 insertions(+), 18 deletions(-) create mode 100644 textures/scifi_nodes_dirt.png create mode 100644 textures/scifi_nodes_grass_side.png create mode 100644 textures/scifi_nodes_wood.png diff --git a/README.md b/README.md index c44279e..dc6c3ba 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,10 @@ CC BY 3.0 * scifi_nodes_access_granted https://freesound.org/people/TheBuilder15/sounds/415762/ * scifi_nodes_access_refused https://freesound.org/people/RICHERlandTV/sounds/216090/ * scifi_nodes_forcefield.png https://github.com/minetest-mods/technic/ +* scifi_nodes_dirt.png https://github.com/minetest/minetest_game +* scifi_nodes_grass.png https://github.com/minetest/minetest_game +* scifi_nodes_grass_side.png https://github.com/minetest/minetest_game +* scifi_nodes_wood.png https://github.com/minetest/minetest_game CC0 * scifi_nodes_digicode.ogg https://freesound.org/people/benjaminharveydesign/sounds/315921/ diff --git a/nodeboxes.lua b/nodeboxes.lua index 814904a..2327a13 100644 --- a/nodeboxes.lua +++ b/nodeboxes.lua @@ -379,13 +379,10 @@ local function remove_lid(pos) end end -local dirt_tex = "default_dirt.png" -if not minetest.get_modpath("default") then dirt_tex = "[combine:16x16^[noalpha^[colorize:#654321" end - minetest.register_node("scifi_nodes:pot", { description = "Metal Plant Pot (right-click for lid, sneak + right-click to plant)", tiles = { - dirt_tex .. "^scifi_nodes_pot.png", + "scifi_nodes_dirt.png^scifi_nodes_pot.png", "scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png", @@ -419,7 +416,7 @@ minetest.register_node("scifi_nodes:pot", { minetest.register_node("scifi_nodes:pot2", { description = "Metal Plant Pot Wet (right-click for lid, sneak + right-click to plant)", tiles = { - dirt_tex .. "^scifi_nodes_pot2.png", + "scifi_nodes_dirt.png^scifi_nodes_pot2.png", "scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png", diff --git a/nodes.lua b/nodes.lua index 2bfd111..6200c9b 100644 --- a/nodes.lua +++ b/nodes.lua @@ -1,19 +1,17 @@ --nodes -if minetest.get_modpath("default") then - minetest.register_node("scifi_nodes:grassblk", { - description = "Dirt With Alien Grass", - tiles = {"default_grass.png^[colorize:cyan:80", "default_dirt.png", - {name = "default_dirt.png^(default_grass_side.png^[colorize:cyan:80)", - tileable_vertical = false}}, - light_source = 2, - groups = {crumbly=1, oddly_breakable_by_hand=1, soil=1}, - sounds = scifi_nodes.node_sound_dirt_defaults({ - footstep = scifi_nodes.node_sound_plant_defaults().footstep, - }), +minetest.register_node("scifi_nodes:grassblk", { + description = "Dirt With Alien Grass", + tiles = {"scifi_nodes_grass.png^[colorize:cyan:80", "scifi_nodes_dirt.png", + {name = "scifi_nodes_dirt.png^(scifi_nodes_grass_side.png^[colorize:cyan:80)", + tileable_vertical = false}}, + light_source = 2, + groups = {crumbly=1, oddly_breakable_by_hand=1, soil=1}, + sounds = scifi_nodes.node_sound_dirt_defaults({ + footstep = scifi_nodes.node_sound_plant_defaults().footstep, }) -end +}) minetest.register_node("scifi_nodes:light", { description = "blue lightbox", diff --git a/panes.lua b/panes.lua index 8219c62..a6441fa 100644 --- a/panes.lua +++ b/panes.lua @@ -10,7 +10,7 @@ xpanes.register_pane("doompane", { diggable = false, buildable_to = true, air_equivalent = true, - textures = {"scifi_nodes_doompane.png","scifi_nodes_doompane.png","default_wood.png"}, + textures = {"scifi_nodes_doompane.png","scifi_nodes_doompane.png","scifi_nodes_wood.png"}, inventory_image = "scifi_nodes_doompane.png", wield_image = "scifi_nodes_doompane.png", groups = {cracky=1, pane=1}, diff --git a/textures/scifi_nodes_dirt.png b/textures/scifi_nodes_dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed965a95c0f502858d1cbe9ddb5ca1d3be9067e GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUb<^MqF%b(hmyR%(inLOQ zvQvw-SBrPjN^#Xn^EAlvHq7xeEeNv62yv^4acs_tVEG@gAEr;B3<$92XD4Eg^V zPKE7>Y0SR1njyGjYiRZ1@*D=g>DI;jk_*%sTtwZXr>mdKI;Vst0MMykD*ylh literal 0 HcmV?d00001 diff --git a/textures/scifi_nodes_grass.png b/textures/scifi_nodes_grass.png index 5d7c98b507802f789c4b59ccd2c35769de2adcc7..5778caa1dbabdb9d4cd1ff46e63c8bb810aa9a0c 100644 GIT binary patch delta 447 zcmV;w0YLuz0nG!D7=H)@0000eEe}%w006E~OjJcUViq}L7dd1WI%F6+WfwbR7dvDY zJ7yR=XBRwW7d&VfJ!Tj^X&F6g7(QqiK4}*|YZ*Rp8b4|nKX4d8YZ*Xn7(i|qKyDg9 zaT!2!8$oRuL2nsBa2P>x8$om&L3JBKa2i5!8A5X#LUbBJc7Gg0bR0u<8$);;M0FiR zb{s@^8$@^-MRy%VcpOG}9!7Z`M|mGedLT%9A4q&2NqHYhdLBu9AWC~5N_-wleIY!V zW{Lm+0NP1JK~xwS1;K$rf-n>X(1%Tt7ZMSS zCS@AJCB!m^v42`)Lrh)n?i2K4Giav-$ej)udTgovgc*&dvLIfA69qHs(QCS<{2hGh zmMVb`ZBNM$7t@=Z<21;Zub7aN(wZlUe6O-+*==bBy20MStaikCB*k$N$pNQYHfdUV z%07Hdm>cv!S^s*nN`MOzF|@Ag=Ri{I8XU#h57jtGfH>ex1u2#7%<-CXN7?MpoCBN| pm-zUw5=y)0I^L7_xoM>N`v*9X8o=o*kq7%C% zrcIF8y;*wpROx-&<>$|mKe$Wz$X@m12R^qwKguvM45*H=B*-tA!Qt7BG$5zY)5S4_ zBRVmdKI;Vst0CcNMPXGV_ diff --git a/textures/scifi_nodes_grass_side.png b/textures/scifi_nodes_grass_side.png new file mode 100644 index 0000000000000000000000000000000000000000..77aa65578fb28c0ed81aed673a3247b9c92f3d7c GIT binary patch literal 461 zcmV;;0W$uHP)w=jP^A<0qZM3 zZ=nV6TBv|SEetad^#KaF0SuN&GMy)+Us+|Bj==Rfjp)^w#i~=xSh;>r~0DS-$#VNozuAc?DRm!G^ z1_1_yF%Ygbzl=c+tYGR0OpZ+hpqpv1R;5>-OjJ-r#fRAVe2qnM+5FU+1_UruTkriv z(e89a;LcOgghQjgcD2|t(a13~iDv4g6F|HVeCPSq*U7C9U|2XqMm)VRFTz2Mt=P=E zA%ruQ=>x*h2(6s0Zkwp;ocpFY>qt;8t=aC)pKHP9tMXU5k`LtNrDVJvzTJw_e=X Date: Thu, 26 Oct 2023 17:20:51 +0200 Subject: [PATCH 08/13] registration overhaul (json-based) --- init.lua | 2 +- models.lua | 191 ++++++++----------------------------- nodes.json | 273 +++++++++++++++++++++++++++++++++++++++++++++++++++++ nodes.lua | 137 ++++++--------------------- 4 files changed, 343 insertions(+), 260 deletions(-) create mode 100644 nodes.json diff --git a/init.lua b/init.lua index 4f8df32..fef8fba 100644 --- a/init.lua +++ b/init.lua @@ -21,6 +21,7 @@ if minetest.get_modpath("default") then end dofile(MP.."/plants.lua") +dofile(MP.."/models.lua") dofile(MP.."/nodes.lua") dofile(MP.."/doors.lua") dofile(MP.."/switch.lua") @@ -28,7 +29,6 @@ dofile(MP.."/protected_switch.lua") dofile(MP.."/nodeboxes.lua") dofile(MP.."/palm_scanner.lua") dofile(MP.."/digicode.lua") -dofile(MP.."/models.lua") dofile(MP.."/octagon_panes.lua") dofile(MP.."/forcefield.lua") dofile(MP.."/crafts.lua") diff --git a/models.lua b/models.lua index 23e4b17..5704faa 100644 --- a/models.lua +++ b/models.lua @@ -3,44 +3,45 @@ --Licensed under the zlib license. function scifi_nodes.register_slope(name, desc, texture, light, soundtype) -local sounds -if soundtype == "stone" then - sounds = scifi_nodes.node_sound_stone_defaults() -else - sounds = scifi_nodes.node_sound_metal_defaults() -end -minetest.register_node("scifi_nodes:slope_"..name, { - description = desc.." Slope", - sunlight_propagates = false, - drawtype = "mesh", - mesh = "scifi_nodes_slope.obj", - tiles = texture, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, - {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.25, 0.5}, - {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} - } - }, - collision_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, - {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, - {-0.5, 0, 0, 0.5, 0.25, 0.5}, - {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} - } - }, - paramtype = "light", - paramtype2 = "facedir", - use_texture_alpha = "clip", - light_source = light, - groups = {cracky=1, dig_generic = 3}, - on_place = minetest.rotate_node, - sounds = sounds, -}) + local sounds + if soundtype == "stone" then + sounds = scifi_nodes.node_sound_stone_defaults() + else + sounds = scifi_nodes.node_sound_metal_defaults() + end + + minetest.register_node("scifi_nodes:slope_"..name, { + description = desc.." Slope", + sunlight_propagates = false, + drawtype = "mesh", + mesh = "scifi_nodes_slope.obj", + tiles = texture, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} + } + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} + } + }, + paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = "clip", + light_source = light, + groups = {cracky=1, dig_generic = 3}, + on_place = minetest.rotate_node, + sounds = sounds, + }) end -- register some blocks in stairsplus if available (part of moreblocks) @@ -72,117 +73,3 @@ scifi_nodes.register_slope("bluemetal", "Blue metal", {"scifi_nodes_bluemetal.pn scifi_nodes.register_slope("wall", "Metal wall", {"scifi_nodes_wall.png",}, 0) scifi_nodes.register_slope("rough", "Rough metal", {"scifi_nodes_rough.png",}, 0) scifi_nodes.register_slope("blklt2", "Black stripe light", {"scifi_nodes_black_light2.png",}, 10) - --- Register Nodes for Stairsplus -local node = {} - -node.types = { - {"blue", "blue lines"}, - {"holes", "metal with holes"}, - {"white2", "plastic",}, - {"super_white", "Super Plastic", 11, "stone"}, - {"ultra_white", "Ultra Plastic", minetest.LIGHT_MAX}, --- {"engine", "engine", "engine"}, - {"wall", "metal wall"}, - {"white", "plastic wall"}, - {"stripes2top", "dirty metal block"}, - {"rough", "rough metal"}, - {"lighttop", "metal block"}, - {"red", "red lines"}, - {"green", "green lines"}, - {"vent2", "vent"}, - {"stripes", "hazard stripes"}, - {"rust", "rusty metal"}, - {"mesh", "metal mesh"}, - {"black", "black wall"}, - {"blackoct", "black octagon"}, - {"blackpipe", "black pipe"}, - {"blacktile", "black tile"}, - {"blacktile2", "black tile 2"}, - {"blackvent", "black vent"}, - {"bluebars", "blue bars"}, - {"bluemetal", "blue metal"}, - {"bluetile", "blue tile"}, - {"greytile", "grey tile"}, - {"mesh2", "metal floormesh"}, - {"pipe", "wall pipe"}, - {"pipeside", "side pipe"}, - {"tile", "white tile"}, - {"whiteoct", "white octagon"}, - {"whitetile", "white tile2"}, - {"black_detail", "black detail"}, - {"green_square", "green metal block"}, - {"red_square", "red metal block"}, - {"grey_square", "grey metal block"}, - {"blue_square", "blue metal block"}, - {"black_mesh", "black vent block"}, - {"dent", "dented metal block"}, - {"greenmetal", "green metal wall"}, - {"greenmetal2", "green metal wall2"}, - {"greenlights", "green wall lights", 10}, - {"greenlights2", "green wall lights2", 10}, - {"greenbar", "green light bar", 10}, - {"green2", "green wall panel"}, - {"greentubes", "green pipes"}, - {"grey", "grey wall"}, - {"greybolts", "grey wall bolts"}, - {"greybars", "grey bars"}, - {"greydots", "grey wall dots"}, - {"greygreenbar", "gray power pipe", 10}, - {"octofloor", "Doom floor"}, - {"octofloor2", "Brown Doom floor"}, - {"doomwall1", "Doom wall 1"}, - {"doomwall2", "Doom wall 2"}, - {"doomwall3", "Doom wall 3"}, - {"doomwall4", "Doom wall 4"}, - {"doomwall41", "Doom wall 4.1"}, - {"doomwall42", "Doom wall 4.2"}, - {"doomwall43", "Doom wall 4.3"}, - {"doomwall431", "Doom wall 4.3.1"}, - {"doomwall44", "Doom wall 4.4"}, - {"blackdmg", "Damaged black wall"}, - {"blackdmgstripe", "Damaged black wall(stripes)"}, - {"doomengine", "Doom engine wall"}, --- {"monitorwall", "Wall monitors", "monitorwall"}, - {"screen3", "Wall monitor"}, - {"doomlight", "Doom light", 12}, - {"bluwllight", "Blue wall light", minetest.LIGHT_MAX}, - {"bluegrid", "Blue Grid", 5}, - {"fan", "Fan"}, - {"ppllght", "Purple wall light", minetest.LIGHT_MAX}, - {"pplwll", "Purple wall"}, - {"pplwll2", "Purple wall2"}, - {"pplwll3", "Purple wall3"}, - {"pplwll4", "Purple wall4"}, - {"pplblk", "Purple tile"}, - {"purple", "Purple node"}, - {"rock", "Moonstone", nil, "stone"}, - {"rock2", "Moonstone2", nil, "stone"}, - {"blackvnt", "Black vent"}, - {"blackplate", "Black plate"}, -} - -if minetest.global_exists("stairsplus") then - for _, row in ipairs(node.types) do - local name = row[1] - local soundtype = row[4] - local sounds - if soundtype == "stone" then - sounds = scifi_nodes.node_sound_stone_defaults() - else - sounds = scifi_nodes.node_sound_metal_defaults() - end - - -- Node Definition - stairsplus:register_all("scifi_nodes", name, "scifi_nodes:"..name, { - description = row[2], - tiles = {"scifi_nodes_"..name..".png"}, - use_texture_alpha = "clip", - groups = {cracky=1, dig_generic = 3}, - paramtype = "light", - paramtype2 = "facedir", - light_source = row[3], - sounds = sounds, - }) - end -end diff --git a/nodes.json b/nodes.json new file mode 100644 index 0000000..50099b7 --- /dev/null +++ b/nodes.json @@ -0,0 +1,273 @@ +{ + "blue": { + "description": "Blue lines" + }, + "holes": { + "description": "Metal with holes" + }, + "white2": { + "description": "plastic", + "colorable": true, + "sounds": "stone" + }, + "super_white": { + "description": "Super Plastic", + "light": 11, + "sounds": "stone" + }, + "ultra_white": { + "description": "Ultra Plastic", + "light": 14, + "sounds": "stone" + }, + "engine": { + "description": "Engine" + }, + "wall": { + "description": "metal wall" + }, + "white": { + "description": "plastic wall", + "colorable": true, + "sounds": "stone" + }, + "stripes2top": { + "description": "Dirty metal block" + }, + "rough": { + "description": "rough metal" + }, + "lighttop": { + "description": "metal block" + }, + "red": { + "description": "red lines" + }, + "green": { + "description": "green lines" + }, + "vent2": { + "description": "vent" + }, + "stripes": { + "description": "hazard stripes" + }, + "rust": { + "description": "rusty metal" + }, + "mesh": { + "description": "metal mesh" + }, + "black": { + "description": "black wall" + }, + "blackoct": { + "description": "black octagon" + }, + "blackpipe": { + "description": "black pipe" + }, + "blacktile": { + "description": "black tile" + }, + "blacktile2": { + "description": "black tile 2" + }, + "blackvent": { + "description": "black vent" + }, + "bluebars": { + "description": "blue bars" + }, + "bluemetal": { + "description": "blue metal" + }, + "bluetile": { + "description": "blue tile" + }, + "greytile": { + "description": "grey tile" + }, + "mesh2": { + "description": "metal floormesh" + }, + "pipe": { + "description": "wall pipe" + }, + "pipeside": { + "description": "side pipe" + }, + "tile": { + "description": "white tile" + }, + "whiteoct": { + "description": "white octagon", + "colorable": true + }, + "whitetile": { + "description": "white tile 2", + "colorable": true + }, + "black_detail": { + "description": "black detail" + }, + "green_square": { + "description": "green metal block" + }, + "red_square": { + "description": "red metal block" + }, + "grey_square": { + "description": "grey metal block" + }, + "blue_square": { + "description": "blue metal block" + }, + "black_mesh": { + "description": "black vent block" + }, + "dent": { + "description": "dented metal block" + }, + "greenmetal": { + "description": "green metal wall" + }, + "greenmetal2": { + "description": "green metal wall2" + }, + "greenlights": { + "description": "green wall lights", + "light": 10 + }, + "greenlights2": { + "description": "green wall lights2", + "light": 10 + }, + "greenbar": { + "description": "green light bar", + "light": 10 + }, + "green2": { + "description": "green wall panel" + }, + "greentubes": { + "description": "green pipes" + }, + "grey": { + "description": "grey wall" + }, + "greybolts": { + "description": "grey wall bolts" + }, + "greybars": { + "description": "grey bars" + }, + "greydots": { + "description": "grey wall dots" + }, + "greygreenbar": { + "description": "gray power pipe", + "light": 10 + }, + "octofloor": { + "description": "Doom floor", + "sounds": "stone" + }, + "octofloor2": { + "description": "Brown Doom floor", + "sounds": "stone" + }, + "doomwall1": { + "description": "Doom wall 1" + }, + "doomwall2": { + "description": "Doom wall 2" + }, + "doomwall3": { + "description": "Doom wall 3" + }, + "doomwall4": { + "description": "Doom wall 4" + }, + "doomwall41": { + "description": "Doom wall 4.1" + }, + "doomwall42": { + "description": "Doom wall 4.2" + }, + "doomwall43": { + "description": "Doom wall 4.3" + }, + "doomwall431": { + "description": "Doom wall 4.3.1" + }, + "doomwall44": { + "description": "Doom wall 4.4" + }, + "blackdmg": { + "description": "Damaged black wall" + }, + "blackdmgstripe": { + "description": "Damaged black wall(stripes)" + }, + "doomengine": { + "description": "Doom engine wall" + }, + "monitorwall": { + "description": "Wall monitors" + }, + "screen3": { + "description": "Wall monitor" + }, + "doomlight": { + "description": "Doom light", + "light": 12 + }, + "bluwllight": { + "description": "Blue wall light", + "light": 14 + }, + "bluegrid": { + "description": "Blue Grid", + "light": 5 + }, + "fan": { + "description": "Fan" + }, + "ppllght": { + "description": "Purple wall light", + "light": 14 + }, + "pplwll": { + "description": "Purple wall" + }, + "pplwll2": { + "description": "Purple wall 2" + }, + "pplwll3": { + "description": "Purple wall 3" + }, + "pplwll4": { + "description": "Purple wall 4" + }, + "pplblk": { + "description": "Purple tile" + }, + "purple": { + "description": "Purple node" + }, + "rock": { + "description": "Moonstone", + "sounds": "stone" + }, + "rock2": { + "description": "Moonstone 2", + "sounds": "stone" + }, + "blackvnt": { + "description": "Black vent" + }, + "blackplate": { + "description": "Black plate" + } +} \ No newline at end of file diff --git a/nodes.lua b/nodes.lua index 6200c9b..c446a0f 100644 --- a/nodes.lua +++ b/nodes.lua @@ -514,111 +514,20 @@ minetest.register_node("scifi_nodes:whtlightbnd", { sounds = scifi_nodes.node_sound_metal_defaults() }) ---edited wool code (Copyright (C) 2012 celeron55, Perttu Ahola ) - - --- This uses a trick: you can first define the recipes using all of the base --- colors, and then some recipes using more specific colors for a few non-base --- colors available. When crafting, the last recipes will be checked first. ---add new block using texture name(without "scifi_nodes_" prefix) then the description, and then the name of the block -local nodetypes = { - -- { name, description, shortname?, light, colorable, sounds } - {"blue", "blue lines", "blue"}, - {"holes", "metal with holes","holes"}, - {"white2", "plastic", "white2", 0, true, "stone"}, - {"super_white", "Super Plastic", "super_white", 11, nil, "stone"}, - {"ultra_white", "Ultra Plastic", "ultra_white", minetest.LIGHT_MAX, nil, "stone"}, - {"engine", "engine", "engine"}, - {"wall", "metal wall", "wall"}, - {"white", "plastic wall", "white", 0, true, "stone"}, - {"stripes2top", "dirty metal block","metal2"}, - {"rough", "rough metal", "rough"}, - {"lighttop", "metal block", "metal"}, - {"red", "red lines", "red"}, - {"green", "green lines", "green"}, - {"vent2", "vent", "vent"}, - {"stripes", "hazard stripes", "stripes"}, - {"rust", "rusty metal", "rust"}, - {"mesh", "metal mesh", "mesh"}, - {"black", "black wall", "black"}, - {"blackoct", "black octagon", "blackoct"}, - {"blackpipe", "black pipe", "blackpipe"}, - {"blacktile", "black tile", "blktl"}, - {"blacktile2", "black tile 2", "blktl2"}, - {"blackvent", "black vent", "blkvnt"}, - {"bluebars", "blue bars", "bluebars"}, - {"bluemetal", "blue metal", "blumtl"}, - {"bluetile", "blue tile", "blutl"}, - {"greytile", "grey tile", "grytl"}, - {"mesh2", "metal floormesh", "mesh2"}, - {"pipe", "wall pipe", "pipe2"}, - {"pipeside", "side pipe", "pipe3"}, - {"tile", "white tile", "tile"}, - {"whiteoct", "white octagon", "whiteoct", 0, true}, - {"whitetile", "white tile2", "whttl", 0, true}, - {"black_detail", "black detail", "blckdtl"}, - {"green_square", "green metal block", "grnblck"}, - {"red_square", "red metal block", "redblck"}, - {"grey_square", "grey metal block", "greyblck"}, - {"blue_square", "blue metal block", "blublck"}, - {"black_mesh", "black vent block", "blckmsh"}, - {"dent", "dented metal block", "dent"}, - {"greenmetal", "green metal wall", "grnmetl"}, - {"greenmetal2", "green metal wall2", "grnmetl2"}, - {"greenlights", "green wall lights", "grnlt", 10}, - {"greenlights2", "green wall lights2", "grnlt2", 10}, - {"greenbar", "green light bar", "grnlghtbr", 10}, - {"green2", "green wall panel", "grn2"}, - {"greentubes", "green pipes", "grntubes"}, - {"grey", "grey wall", "gry"}, - {"greybolts", "grey wall bolts", "gryblts"}, - {"greybars", "grey bars", "grybrs"}, - {"greydots", "grey wall dots", "grydts"}, - {"greygreenbar", "gray power pipe", "grygrnbr", 10}, - {"octofloor", "Doom floor", "octofloor", nil, nil, "stone"}, - {"octofloor2", "Brown Doom floor", "octofloor2", nil, nil, "stone"}, - {"doomwall1", "Doom wall 1", "doomwall1"}, - {"doomwall2", "Doom wall 2", "doomwall2"}, - {"doomwall3", "Doom wall 3", "doomwall3"}, - {"doomwall4", "Doom wall 4", "doomwall4"}, - {"doomwall41", "Doom wall 4.1", "doomwall4.1"}, - {"doomwall42", "Doom wall 4.2", "doomwall4.2"}, - {"doomwall43", "Doom wall 4.3", "doomwall4.3"}, - {"doomwall431", "Doom wall 4.3.1", "doomwall4.3.1"}, - {"doomwall44", "Doom wall 4.4", "doomwall4.4"}, - {"blackdmg", "Damaged black wall", "blckdmg"}, - {"blackdmgstripe", "Damaged black wall(stripes)", "blckdmgstripe"}, - {"doomengine", "Doom engine wall", "doomengine"}, - {"monitorwall", "Wall monitors", "monitorwall"}, - {"screen3", "Wall monitor", "screen3"}, - {"doomlight", "Doom light", "doomlight", 12}, - {"bluwllight", "Blue wall light", "capsule3", minetest.LIGHT_MAX}, - {"bluegrid", "Blue Grid", "bluegrid", 5}, - {"fan", "Fan", "fan"}, - {"ppllght", "Purple wall light", "", minetest.LIGHT_MAX}, - {"pplwll", "Purple wall", "", 0}, - {"pplwll2", "Purple wall2", "", 0}, - {"pplwll3", "Purple wall3", "", 0}, - {"pplwll4", "Purple wall4", "", 0}, - {"pplblk", "Purple tile", "", 0}, - {"purple", "Purple node", "", 0}, - {"rock", "Moonstone", "", 0, nil, "stone"}, - {"rock2", "Moonstone2", "", 0, nil, "stone"}, - {"blackvnt", "Black vent", "", 0}, - {"blackplate", "Black plate", "", 0}, -} +-- read "nodes.json" +local f = assert(io.open(minetest.get_modpath("scifi_nodes") .. "/nodes.json", "rb")) +local nodes = assert(minetest.parse_json(f:read("*all"))) +f:close() local has_unifieddyes_mod = minetest.get_modpath("unifieddyes") +local has_moreblocks_mod = minetest.get_modpath("moreblocks") -for _, row in ipairs(nodetypes) do - local name = row[1] - local desc = row[2] - local light = row[4] - local is_colorable = row[5] - local soundtype = row[6] +-- register all nodes +for name, def in pairs(nodes) do + -- default to "metal" sounds if not specified local sounds - if soundtype == "stone" then + if def.sounds == "stone" then sounds = scifi_nodes.node_sound_stone_defaults() else sounds = scifi_nodes.node_sound_metal_defaults() @@ -626,16 +535,16 @@ for _, row in ipairs(nodetypes) do -- Node Definition local node_def = { - description = desc, + description = def.description, tiles = {"scifi_nodes_"..name..".png"}, groups = {cracky=1, dig_generic = 3}, paramtype = "light", paramtype2 = "facedir", - light_source = light, + light_source = def.light, sounds = sounds, } - if is_colorable and has_unifieddyes_mod then + if def.colorable and has_unifieddyes_mod then -- overwrite attributes on the "uncolored" node node_def.palette = "unifieddyes_palette_extended.png" node_def.groups.ud_param2_colorable = 1 @@ -645,10 +554,10 @@ for _, row in ipairs(nodetypes) do -- register node minetest.register_node("scifi_nodes:"..name, node_def) - if is_colorable and has_unifieddyes_mod then - -- register colored node + -- unified dyes registration + if def.colorable and has_unifieddyes_mod then minetest.register_node("scifi_nodes:"..name.."_colored", { - description = desc, + description = def.description, tiles = {"scifi_nodes_"..name..".png"}, groups = { cracky = 1, @@ -658,10 +567,24 @@ for _, row in ipairs(nodetypes) do palette = "unifieddyes_palette_extended.png", paramtype = "light", paramtype2 = "color", - light_source = light, + light_source = def.light, sounds = scifi_nodes.node_sound_glass_defaults(), on_construct = unifieddyes.on_construct, on_dig = unifieddyes.on_dig }) end + + -- moreblocks registration + if has_moreblocks_mod then + stairsplus:register_all("scifi_nodes", name, "scifi_nodes:"..name, { + description = def.description, + tiles = {"scifi_nodes_"..name..".png"}, + use_texture_alpha = "clip", + groups = {cracky=1, dig_generic = 3}, + paramtype = "light", + paramtype2 = "facedir", + light_source = def.light, + sounds = sounds, + }) + end end From 9177b875d929e3cce5fc8e12e9339d0d6539971c Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Thu, 26 Oct 2023 17:37:30 +0200 Subject: [PATCH 09/13] colorable moonstone --- nodes.json | 6 ++++-- nodes.lua | 16 +++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/nodes.json b/nodes.json index 50099b7..1bf5fee 100644 --- a/nodes.json +++ b/nodes.json @@ -258,11 +258,13 @@ }, "rock": { "description": "Moonstone", - "sounds": "stone" + "sounds": "stone", + "colorable": true }, "rock2": { "description": "Moonstone 2", - "sounds": "stone" + "sounds": "stone", + "colorable": true }, "blackvnt": { "description": "Black vent" diff --git a/nodes.lua b/nodes.lua index c446a0f..7755467 100644 --- a/nodes.lua +++ b/nodes.lua @@ -533,10 +533,16 @@ for name, def in pairs(nodes) do sounds = scifi_nodes.node_sound_metal_defaults() end + -- tiles (default to nodename as texture-name) + local tiles = {"scifi_nodes_" .. name .. ".png"} + if def.texture_name then + tiles = {"scifi_nodes_" .. def.texture_name .. ".png"} + end + -- Node Definition local node_def = { description = def.description, - tiles = {"scifi_nodes_"..name..".png"}, + tiles = tiles, groups = {cracky=1, dig_generic = 3}, paramtype = "light", paramtype2 = "facedir", @@ -558,7 +564,7 @@ for name, def in pairs(nodes) do if def.colorable and has_unifieddyes_mod then minetest.register_node("scifi_nodes:"..name.."_colored", { description = def.description, - tiles = {"scifi_nodes_"..name..".png"}, + tiles = tiles, groups = { cracky = 1, ud_param2_colorable = 1, @@ -574,11 +580,11 @@ for name, def in pairs(nodes) do }) end - -- moreblocks registration - if has_moreblocks_mod then + -- moreblocks registration (default to register all except if "false" encountered) + if has_moreblocks_mod and def.moreblocks ~= false then stairsplus:register_all("scifi_nodes", name, "scifi_nodes:"..name, { description = def.description, - tiles = {"scifi_nodes_"..name..".png"}, + tiles = tiles, use_texture_alpha = "clip", groups = {cracky=1, dig_generic = 3}, paramtype = "light", From 5102ad7a39fe2f6a67accd90ecd6fed54d47a5f5 Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Thu, 26 Oct 2023 18:02:06 +0200 Subject: [PATCH 10/13] white, colorable octagon glass --- crafts.lua | 9 +++++++++ nodes.lua | 22 ++++++++++++++++++++++ textures/scifi_nodes_octwht.png | Bin 0 -> 109 bytes 3 files changed, 31 insertions(+) create mode 100644 textures/scifi_nodes_octwht.png diff --git a/crafts.lua b/crafts.lua index c77f383..794c529 100644 --- a/crafts.lua +++ b/crafts.lua @@ -945,6 +945,15 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "scifi_nodes:octwht 4", + recipe = { + {"dye:white", "scifi_nodes:glass", ""}, + {"scifi_nodes:glass", "scifi_nodes:lightbar", "scifi_nodes:glass"}, + {"", "scifi_nodes:glass", "dye:white"} + } +}) + -- 1 purple node from 1 plastic, 1 blue dye and 1 red dye minetest.register_craft({ output = "scifi_nodes:purple", diff --git a/nodes.lua b/nodes.lua index 7755467..dfe0bf9 100644 --- a/nodes.lua +++ b/nodes.lua @@ -402,6 +402,28 @@ minetest.register_node("scifi_nodes:octppl", { sounds = scifi_nodes.node_sound_glass_defaults(), }) +minetest.register_node("scifi_nodes:octwht", { + description = "Octagon Glass", + sunlight_propagates = false, + drawtype = "glasslike", + tiles = { + "scifi_nodes_octwht.png", + }, + palette = "unifieddyes_palette_extended.png", + paramtype = "light", + paramtype2 = "color", + use_texture_alpha = "blend", + light_source = 10, + groups = { + cracky = 2, + dig_generic = 3, + ud_param2_colorable = 1 + }, + sounds = scifi_nodes.node_sound_glass_defaults(), + on_construct = unifieddyes.on_construct, + on_dig = unifieddyes.on_dig +}) + minetest.register_node("scifi_nodes:tower", { description = "Wind tower", sunlight_propagates = false, diff --git a/textures/scifi_nodes_octwht.png b/textures/scifi_nodes_octwht.png new file mode 100644 index 0000000000000000000000000000000000000000..e97b308537e7dba077da3792a0772632faf989de GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>who^t@)Y*6k#k0@(cF# zf2IghFY4*y7{Vc&T#}fuB_V-j(%FPb0@4f>J6L5Mrlej0Dq!$*^>bP0l+XkKo@*WK literal 0 HcmV?d00001 From 211dcff77066a75ef92adfe518f0ebacc33d58ca Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Thu, 26 Oct 2023 18:05:18 +0200 Subject: [PATCH 11/13] register white octagon glass only if unified dyes available --- nodes.lua | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/nodes.lua b/nodes.lua index dfe0bf9..8496392 100644 --- a/nodes.lua +++ b/nodes.lua @@ -1,3 +1,5 @@ +local has_unifieddyes_mod = minetest.get_modpath("unifieddyes") +local has_moreblocks_mod = minetest.get_modpath("moreblocks") --nodes @@ -402,27 +404,29 @@ minetest.register_node("scifi_nodes:octppl", { sounds = scifi_nodes.node_sound_glass_defaults(), }) -minetest.register_node("scifi_nodes:octwht", { - description = "Octagon Glass", - sunlight_propagates = false, - drawtype = "glasslike", - tiles = { - "scifi_nodes_octwht.png", - }, - palette = "unifieddyes_palette_extended.png", - paramtype = "light", - paramtype2 = "color", - use_texture_alpha = "blend", - light_source = 10, - groups = { - cracky = 2, - dig_generic = 3, - ud_param2_colorable = 1 - }, - sounds = scifi_nodes.node_sound_glass_defaults(), - on_construct = unifieddyes.on_construct, - on_dig = unifieddyes.on_dig -}) +if has_unifieddyes_mod then + minetest.register_node("scifi_nodes:octwht", { + description = "Octagon Glass", + sunlight_propagates = false, + drawtype = "glasslike", + tiles = { + "scifi_nodes_octwht.png", + }, + palette = "unifieddyes_palette_extended.png", + paramtype = "light", + paramtype2 = "color", + use_texture_alpha = "blend", + light_source = 10, + groups = { + cracky = 2, + dig_generic = 3, + ud_param2_colorable = 1 + }, + sounds = scifi_nodes.node_sound_glass_defaults(), + on_construct = unifieddyes.on_construct, + on_dig = unifieddyes.on_dig + }) +end minetest.register_node("scifi_nodes:tower", { description = "Wind tower", @@ -541,9 +545,6 @@ local f = assert(io.open(minetest.get_modpath("scifi_nodes") .. "/nodes.json", " local nodes = assert(minetest.parse_json(f:read("*all"))) f:close() -local has_unifieddyes_mod = minetest.get_modpath("unifieddyes") -local has_moreblocks_mod = minetest.get_modpath("moreblocks") - -- register all nodes for name, def in pairs(nodes) do From 83a5d401cc4fe65471510bd262810dc74227fc3a Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Fri, 27 Oct 2023 15:55:01 +0200 Subject: [PATCH 12/13] colored dented metal --- nodes.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nodes.json b/nodes.json index 1bf5fee..4261078 100644 --- a/nodes.json +++ b/nodes.json @@ -127,7 +127,8 @@ "description": "black vent block" }, "dent": { - "description": "dented metal block" + "description": "dented metal block", + "colorable": true }, "greenmetal": { "description": "green metal wall" From 772aef21180d35d11bcdd370b2297430626136c0 Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Fri, 27 Oct 2023 17:09:37 +0200 Subject: [PATCH 13/13] add `scifi_nodes.open_door(pos)` and api docs --- README.md | 2 ++ api.md | 12 ++++++++++++ doors.lua | 33 +++++++++++++++++++++++++++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 api.md diff --git a/README.md b/README.md index dc6c3ba..dfc5ef8 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets. +Lua api: see [api.md](./api.md) + # Changelog * Added support for unifieddyes diff --git a/api.md b/api.md new file mode 100644 index 0000000..2de4b8d --- /dev/null +++ b/api.md @@ -0,0 +1,12 @@ + +scifi_nodes api + +# Doors + +Open scifi_nodes door at given position + +```lua +scifi_nodes.open_door(pos) +``` + +returns `true` on success, `false` otherwise \ No newline at end of file diff --git a/doors.lua b/doors.lua index d443c69..b165763 100644 --- a/doors.lua +++ b/doors.lua @@ -155,7 +155,7 @@ for _, current_door in ipairs(doors) do end - local function open_door(pos, node, player, itemstack, pointed_thing) + local function open_door(pos, node) -- play sound minetest.sound_play(sound,{ max_hear_distance = 16, @@ -240,7 +240,11 @@ for _, current_door in ipairs(doors) do drawtype = "nodebox", paramtype = "light", paramtype2 = "facedir", - groups = {cracky = 3, oddly_breakable_by_hand = 1}, + groups = { + cracky = 3, + oddly_breakable_by_hand = 1, + scifi_nodes_door = 1 + }, node_box = { type = "fixed", fixed = { @@ -253,6 +257,7 @@ for _, current_door in ipairs(doors) do {-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625} } }, + _open = open_door, mesecons = mesecons_doors_def, on_place = onplace, after_destruct = afterdestruct, @@ -350,3 +355,27 @@ for _, current_door in ipairs(doors) do sounds = scifi_nodes.node_sound_metal_defaults(), }) end -- end of doors table browsing + +-- opens the scifi-door at the given position +function scifi_nodes.open_door(pos) + local node = minetest.get_node_or_nil(pos) + if not node then + -- area not loaded + return false + end + + local def = minetest.registered_nodes[node.name] + if type(def._open) ~= "function" then + -- open function not found + return false + end + + if not def.groups or not def.groups.scifi_nodes_door then + -- not a scifi_nodes door + return false + end + + -- call open function + def._open(pos, node) + return true +end \ No newline at end of file