From 0e87b2c9a2249f21cb7088a8a7a038ab5fb9c2d5 Mon Sep 17 00:00:00 2001 From: IamPyu Date: Tue, 1 Oct 2024 22:03:45 -0600 Subject: [PATCH] Change some stuff, mostly electricity related. --- CHANGELOG.md | 6 + mods/CORE/pyutest/util.lua | 21 ++++ mods/ITEMS/pyutest_electricity/delayer.lua | 45 ++++++++ mods/ITEMS/pyutest_electricity/devices.lua | 50 +++++++++ mods/ITEMS/pyutest_electricity/init.lua | 125 ++++++--------------- mods/MAPGEN/pyutest_mapgen/worlds.lua | 2 +- textures/pyutest-wire-d1.png | Bin 0 -> 418 bytes textures/pyutest-wire-d2.png | Bin 0 -> 432 bytes textures/pyutest-wire-d3.png | Bin 0 -> 439 bytes textures/pyutest-wire-d4.png | Bin 0 -> 427 bytes 10 files changed, 156 insertions(+), 93 deletions(-) create mode 100644 mods/ITEMS/pyutest_electricity/delayer.lua create mode 100644 mods/ITEMS/pyutest_electricity/devices.lua create mode 100644 textures/pyutest-wire-d1.png create mode 100644 textures/pyutest-wire-d2.png create mode 100644 textures/pyutest-wire-d3.png create mode 100644 textures/pyutest-wire-d4.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 853ba83..f170e8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,12 @@ So I had to go through the tedious process and fix them all. - Added World Tokens which let you travel between worlds - Added Fossils - Removed Vyn Forest, Old Growth Forest and Jungle +- Zinc wires are now configurable like Minecraft's Redstone Repeater + It comes in 4 different levels + 1 = 0.1 seconds + 2 = 0.2 seconds + 3 = 0.4 seconds + 4 = 0.8 seconds # [Sep 29th 2024] Unnamed Minor Update diff --git a/mods/CORE/pyutest/util.lua b/mods/CORE/pyutest/util.lua index 36c210a..f093705 100644 --- a/mods/CORE/pyutest/util.lua +++ b/mods/CORE/pyutest/util.lua @@ -35,6 +35,27 @@ PyuTest.dorange = function(origin, range, action) end end +PyuTest.get_neighbours = function(pos) + return { + vector.new(pos.x + 1, pos.y, pos.z), + vector.new(pos.x - 1, pos.y, pos.z), + vector.new(pos.x + 1, pos.y + 1, pos.z), + vector.new(pos.x + 1, pos.y - 1, pos.z), + vector.new(pos.x - 1, pos.y - 1, pos.z), + vector.new(pos.x - 1, pos.y + 1, pos.z), + + vector.new(pos.x, pos.y, pos.z + 1), + vector.new(pos.x, pos.y, pos.z - 1), + vector.new(pos.x, pos.y + 1, pos.z + 1), + vector.new(pos.x, pos.y - 1, pos.z + 1), + vector.new(pos.x, pos.y + 1, pos.z - 1), + vector.new(pos.x, pos.y - 1, pos.z - 1), + + vector.new(pos.x, pos.y + 1, pos.z), + vector.new(pos.x, pos.y - 1, pos.z), + } +end + PyuTest.create_explosion = function (pos, range, rm_pos, dmg, creator, dmg_creator) if rm_pos then minetest.remove_node(pos) diff --git a/mods/ITEMS/pyutest_electricity/delayer.lua b/mods/ITEMS/pyutest_electricity/delayer.lua new file mode 100644 index 0000000..a4f1362 --- /dev/null +++ b/mods/ITEMS/pyutest_electricity/delayer.lua @@ -0,0 +1,45 @@ +local delay_multipliers = { + 100, -- Default, 0.1 seconds + 200, -- 0.2 seconds + 400, -- 0.4 seconds + 800, -- 0.8 seconds +} + +local function index_name(n) + if n == 1 then + return "pyutest_electricity:zinc_wire" + else + return string.format("pyutest_electricity:zinc_wire_%d", n) + end +end + +for i, v in ipairs(delay_multipliers) do + PyuTest.make_wire(index_name(i), "Zinc Wire", { + snappy = PyuTest.BLOCK_NORMAL, + not_in_creative_inventory = i ~= 1 and 1 or nil + }, "#bed3d4", { + on_rightclick = function (pos, node, clicker) + local ni = v + + if i == #delay_multipliers then + ni = 1 + else + ni = i + 1 + end + + minetest.set_node(pos, {name = index_name(ni)}) + end + }, function(def, pos, node, clicker, sender_pos) + minetest.after(PyuTest.ELECTRICITY_TICK * v, function() + def.__on_electricity_activated(pos, node, clicker, sender_pos) + end) + end, string.format("pyutest-wire-d%d.png", i)) +end + +minetest.register_craft({ + output = string.format("%s 4", index_name(1)), + recipe = { + "pyutest_ores:zinc_ingot" + }, + type = "shapeless" +}) diff --git a/mods/ITEMS/pyutest_electricity/devices.lua b/mods/ITEMS/pyutest_electricity/devices.lua new file mode 100644 index 0000000..13416de --- /dev/null +++ b/mods/ITEMS/pyutest_electricity/devices.lua @@ -0,0 +1,50 @@ +PyuTest.make_electricity_device("pyutest_electricity:freezer_device", "Freezer Device", { + cracky = PyuTest.BLOCK_FAST +}, {"pyutest-freezer.png"}, "pyutest_blocks:ice_block", nil, function (pos, node, clicker, sender_pos) + PyuTest.dorange(pos, 2, function(p) + local n = minetest.get_node(p) + + if minetest.get_item_group(n.name, "freezable") ~= 0 then + minetest.set_node(p, { name = "pyutest_blocks:ice_block" }) + elseif minetest.get_item_group(n.name, "coolable") ~= 0 then + local def = minetest.registered_nodes[n.name] + local cool_into = def.__cool_into or "pyutest_blocks:water_source" + minetest.set_node(p, { name = cool_into }) + end + end) +end) + +PyuTest.make_electricity_device("pyutest_electricity:heater_device", "Heater Device", { + cracky = PyuTest.BLOCK_FAST +}, {"pyutest-heater.png"}, "pyutest_blocks:fire", nil, function (pos, node, clicker, sender_pos) + PyuTest.dorange(pos, 2, function(p) + local n = minetest.get_node(p) + + if minetest.get_item_group(n.name, "thawable") ~= 0 then + local def = minetest.registered_nodes[n.name] + local thaw_into = def.__thaw_into or "pyutest_blocks:water_source" + minetest.set_node(p, { name = thaw_into }) + elseif minetest.get_item_group(n.name, "heatable") ~= 0 then + local def = minetest.registered_nodes[n.name] + local heat_into = def.__heat_into or "pyutest_blocks:lava_source" + minetest.set_node(p, { name = heat_into }) + end + end) +end) + + +PyuTest.make_electricity_device("pyutest_electricity:lamp_device", "Lamp Device", { + cracky = PyuTest.BLOCK_FAST, +}, {"pyutest-lamp.png"}, "pyutest_blocks:light", nil, function (pos, node, clicker, sender_pos) + minetest.set_node(pos, {name = "pyutest_electricity:lamp_device_on"}) +end) + +PyuTest.make_electricity_device("pyutest_electricity:lamp_device_on", "Lamp Device", { + cracky = PyuTest.BLOCK_FAST, + not_in_creative_inventory = 1 +}, {"pyutest-lamp.png"}, nil, { + light_source = minetest.LIGHT_MAX, + drop = "pyutest_electricity:lamp_device" +}, function (pos, node, clicker, sender_pos) + minetest.set_node(pos, {name = "pyutest_electricity:lamp_device"}) +end) diff --git a/mods/ITEMS/pyutest_electricity/init.lua b/mods/ITEMS/pyutest_electricity/init.lua index 3d475d5..1f142ef 100644 --- a/mods/ITEMS/pyutest_electricity/init.lua +++ b/mods/ITEMS/pyutest_electricity/init.lua @@ -1,24 +1,6 @@ -PyuTest.ELECTRICITY_TICK = 0.02 -- Maybe this will prevent stack overflows? -local function get_neighbours(pos) - return { - vector.new(pos.x + 1, pos.y, pos.z), - vector.new(pos.x - 1, pos.y, pos.z), - vector.new(pos.x + 1, pos.y + 1, pos.z), - vector.new(pos.x + 1, pos.y - 1, pos.z), - vector.new(pos.x - 1, pos.y - 1, pos.z), - vector.new(pos.x - 1, pos.y + 1, pos.z), +local modpath = minetest.get_modpath("pyutest_electricity") - vector.new(pos.x, pos.y, pos.z + 1), - vector.new(pos.x, pos.y, pos.z - 1), - vector.new(pos.x, pos.y + 1, pos.z + 1), - vector.new(pos.x, pos.y - 1, pos.z + 1), - vector.new(pos.x, pos.y + 1, pos.z - 1), - vector.new(pos.x, pos.y - 1, pos.z - 1), - - vector.new(pos.x, pos.y + 1, pos.z), - vector.new(pos.x, pos.y - 1, pos.z), - } -end +PyuTest.ELECTRICITY_TICK = 1 / 1000 PyuTest.make_button = function(id, desc, groups, tiles) PyuTest.make_node(id, desc, PyuTest.util.tableconcat(groups, { @@ -31,7 +13,7 @@ PyuTest.make_button = function(id, desc, groups, tiles) gain = 1 }) - for _, v in pairs(get_neighbours(pos)) do + for _, v in pairs(PyuTest.get_neighbours(pos)) do local n = minetest.get_node(v) local def = minetest.registered_nodes[n.name] minetest.after(PyuTest.ELECTRICITY_TICK, function() @@ -44,7 +26,7 @@ PyuTest.make_button = function(id, desc, groups, tiles) }) end -PyuTest.make_wire = function(id, desc, groups, color, efn) +PyuTest.make_wire = function(id, desc, groups, color, opts, efn, texture) local fn = efn or function(def, pos, node, clicker, sender_pos) def.__on_electricity_activated(pos, node, clicker, sender_pos) end @@ -52,11 +34,11 @@ PyuTest.make_wire = function(id, desc, groups, color, efn) PyuTest.make_node(id, desc, PyuTest.util.tableconcat(groups, { electric = 1 }), { - "pyutest-wire.png", - "pyutest-wire.png", - "pyutest-wire.png", - "pyutest-wire.png" - }, { + texture or "pyutest-wire.png", + texture or "pyutest-wire.png", + texture or "pyutest-wire.png", + texture or "pyutest-wire.png" + }, PyuTest.util.tableconcat(opts or {}, { drawtype = "raillike", color = color, paramtype = "light", @@ -65,7 +47,7 @@ PyuTest.make_wire = function(id, desc, groups, color, efn) inventory_image = "pyutest-wire.png", __on_electricity_activated = function(pos, node, clicker, sender_pos) - for _, v in pairs(get_neighbours(pos)) do + for _, v in pairs(PyuTest.get_neighbours(pos)) do local n = minetest.get_node(v) local def = minetest.registered_nodes[n.name] @@ -83,7 +65,27 @@ PyuTest.make_wire = function(id, desc, groups, color, efn) ::continue:: end end - }) + })) +end + +PyuTest.make_electricity_device = function(id, desc, groups, tiles, craftitem, opts, eafn) + PyuTest.make_node(id, desc, PyuTest.util.tableconcat(groups, { + electric = 1 + }), tiles, PyuTest.util.tableconcat(opts or {}, { + __on_electricity_activated = eafn + })) + + -- Dont create a recipe if it is nil + if craftitem ~= nil then + minetest.register_craft({ + output = id, + recipe = { + { "pyutest_blocks:stone_block", "pyutest_blocks:stone_block", "pyutest_blocks:stone_block" }, + { "pyutest_blocks:stone_block", craftitem, "pyutest_blocks:stone_block" }, + { "pyutest_blocks:stone_block", "pyutest_blocks:stone_block", "pyutest_blocks:stone_block" } + }, + }) + end end PyuTest.make_button("pyutest_electricity:button", "Button", { @@ -94,53 +96,6 @@ PyuTest.make_wire("pyutest_electricity:copper_wire", "Copper Wire", { snappy = PyuTest.BLOCK_NORMAL }, "darkgoldenrod") -PyuTest.make_wire("pyutest_electricity:zinc_wire", "Zinc Wire", { - snappy = PyuTest.BLOCK_NORMAL -}, "#bed3d4", function(def, pos, node, clicker, sender_pos) - minetest.after(0.2, function() - def.__on_electricity_activated(pos, node, clicker, sender_pos) - end) -end) - -PyuTest.make_node("pyutest_electricity:freezer_device", "Freezer Device", { - cracky = PyuTest.BLOCK_FAST, - electric = 1 -}, { "pyutest-freezer.png" }, { - __on_electricity_activated = function(pos, node, clicker) - PyuTest.dorange(pos, 2, function(p) - local n = minetest.get_node(p) - - if minetest.get_item_group(n.name, "freezable") ~= 0 then - minetest.set_node(p, { name = "pyutest_blocks:ice_block" }) - elseif minetest.get_item_group(n.name, "coolable") ~= 0 then - local def = minetest.registered_nodes[n.name] - local cool_into = def.__cool_into or "pyutest_blocks:water_source" - minetest.set_node(p, { name = cool_into }) - end - end) - end -}) - -PyuTest.make_node("pyutest_electricity:heater_device", "Heater Device", { - cracky = PyuTest.BLOCK_FAST, - electric = 1 -}, { "pyutest-heater.png" }, { - __on_electricity_activated = function(pos, node, clicker) - PyuTest.dorange(pos, 2, function(p) - local n = minetest.get_node(p) - - if minetest.get_item_group(n.name, "thawable") ~= 0 then - local def = minetest.registered_nodes[n.name] - local thaw_into = def.__thaw_into or "pyutest_blocks:water_source" - minetest.set_node(p, { name = thaw_into }) - elseif minetest.get_item_group(n.name, "heatable") ~= 0 then - local def = minetest.registered_nodes[n.name] - local heat_into = def.__heat_into or "pyutest_blocks:lava_source" - minetest.set_node(p, { name = heat_into }) - end - end) - end -}) minetest.register_craft({ output = "pyutest_electricity:copper_wire 4", @@ -150,14 +105,6 @@ minetest.register_craft({ type = "shapeless" }) -minetest.register_craft({ - output = "pyutest_electricity:zinc_wire 4", - recipe = { - "pyutest_ores:zinc_ingot" - }, - type = "shapeless" -}) - minetest.register_craft({ output = "pyutest_electricity:button", recipe = { @@ -167,11 +114,5 @@ minetest.register_craft({ }, }) -minetest.register_craft({ - output = "pyutest_electricity:freezer_device", - recipe = { - { "pyutest_blocks:stone_block", "pyutest_blocks:stone_block", "pyutest_blocks:stone_block" }, - { "pyutest_blocks:stone_block", "pyutest_blocks:ice_block", "pyutest_blocks:stone_block" }, - { "pyutest_blocks:stone_block", "pyutest_blocks:stone_block", "pyutest_blocks:stone_block" } - }, -}) +dofile(modpath.."/devices.lua") +dofile(modpath.."/delayer.lua") diff --git a/mods/MAPGEN/pyutest_mapgen/worlds.lua b/mods/MAPGEN/pyutest_mapgen/worlds.lua index 8aab6a2..0240e0a 100644 --- a/mods/MAPGEN/pyutest_mapgen/worlds.lua +++ b/mods/MAPGEN/pyutest_mapgen/worlds.lua @@ -116,7 +116,7 @@ PyuTest.IceWorld:create_token("pyutest_mapgen:ice_world_token", "Ice World", "#c local icy_cavern = PyuTest.IceWorld:register_biome({ name = "icy_cavern", node_stone = "pyutest_blocks:ice_block", - heat_point = 14, + heat_point = 0, humidity_point = 0 }) diff --git a/textures/pyutest-wire-d1.png b/textures/pyutest-wire-d1.png new file mode 100644 index 0000000000000000000000000000000000000000..5aaaf4d00b6f38c2c948ad856d6138d152ae377c GIT binary patch literal 418 zcmV;T0bTxyP)+i#>Lxp~=>n;U6ma~Z3kZdlq;w?9 zde(T}^So!E1-X=yT*^Z(<)n#2S}qSR!sWjOPT&C2HbSF7x!n%-N~O*@4xsoW(M=rc z^*WzVemv<6ujTR?Z;J(}@25C=Q4EvhT#=VcIRa3;uT}tnhhA?GF$Mr)m?Qvz=h!!&?Bx@@WyT6ofx9`mt4`Cy;hQw?=>fDbWB%atHGuK1dG2-XXg}OM}}$JA0Ew&?Hu6Q9n!< zO;V+`6tuJBWUNoB2a&S_x# zUk-lk_qwX3&+=UjHb+ettQAvXTeQ3||i2KaPx0`N5q z0&VL$Yr8IW&SiexG^%M^Ej*8D6s^J_(7@_uy}tVX_=s~3d2#Wgvjm93aJ9Eq*G;4R zhoZ;;8HHgQPbOLjp#WVsjXGN_bT1bLyzFnBbLm4-{0^~~a>Dc2?sq$RdVby)Ndex3 zcxVa$->$EdC=6xSb^2_v7~~HM08a;MfAQaY%I_ZL53zG&WMyqyR+VnrHvMvWd5|~i hAPfQ>PbQV52lx~{97sA%dW#_ryzuxa&c>~=Sq6=X8xmp1Ls+MH~05MGl0B@5C zo_f8M&v!}U%{gBHK#fvpN-4e$0vCX*Y1%?BmmL7S(QE<$q?Dsf!xy7cVaa~a4^lcx zDPDS?P6t60F&vMu2pLjBM)$2&t}h?68KT{87$?c7PN}DF!jJ=SO~Y^~AxzUW52yJ4 z#JRpuN;#V_yttY%$HqCfbr85!%VH1hcFJ)8pwVpp#QH0i6tCm4Z5oCvrDT~jZi^8( zrSWw*Fw-!GbI#qg`^^FXa96M6Amwr!$II;4Hwn}zg_JUV%DE_