From e8d219f1084b6d6e9c965c24c28b19ce590b40a3 Mon Sep 17 00:00:00 2001 From: Buckaroo Banzai <39065740+BuckarooBanzay@users.noreply.github.com> Date: Thu, 26 Aug 2021 20:46:07 +0200 Subject: [PATCH 1/2] Optional dependency on default mod (#182) --- circular_saw.lua | 10 ++- init.lua | 12 ++- mod.conf | 3 +- nodes.lua | 14 ++-- sounds.lua | 20 +++++ stairsplus/API.md | 2 +- stairsplus/custom.lua | 2 +- stairsplus/microblocks.lua | 2 +- stairsplus/panels.lua | 2 +- stairsplus/registrations.lua | 138 ++++++++++++++++++----------------- stairsplus/slabs.lua | 2 +- stairsplus/slopes.lua | 2 +- stairsplus/stairs.lua | 2 +- 13 files changed, 121 insertions(+), 90 deletions(-) create mode 100644 sounds.lua diff --git a/circular_saw.lua b/circular_saw.lua index 60231fc..15c933e 100644 --- a/circular_saw.lua +++ b/circular_saw.lua @@ -363,9 +363,15 @@ function circular_saw.on_metadata_inventory_take( -- The recycle field plays no role here since it is processed immediately. end +local has_default_mod = minetest.get_modpath("default") + function circular_saw.on_construct(pos) local meta = minetest.get_meta(pos) - local fancy_inv = default.gui_bg..default.gui_bg_img..default.gui_slots + local fancy_inv = "" + if has_default_mod then + -- prepend background and slot styles from default if available + fancy_inv = default.gui_bg..default.gui_bg_img..default.gui_slots + end meta:set_string( "formspec", "size[11,10]"..fancy_inv.. "label[0,0;" ..F(S("Input\nmaterial")).. "]" .. @@ -437,7 +443,7 @@ minetest.register_node("moreblocks:circular_saw", { sunlight_propagates = true, paramtype2 = "facedir", groups = {choppy = 2,oddly_breakable_by_hand = 2}, - sounds = default.node_sound_wood_defaults(), + sounds = moreblocks.node_sound_wood_defaults(), on_construct = circular_saw.on_construct, can_dig = circular_saw.can_dig, -- Set the owner of this circular saw. diff --git a/init.lua b/init.lua index c3e9b63..2fc51ea 100644 --- a/init.lua +++ b/init.lua @@ -17,9 +17,13 @@ moreblocks.S = S moreblocks.NS = NS dofile(modpath .. "/config.lua") +dofile(modpath .. "/sounds.lua") dofile(modpath .. "/circular_saw.lua") dofile(modpath .. "/stairsplus/init.lua") -dofile(modpath .. "/nodes.lua") -dofile(modpath .. "/redefinitions.lua") -dofile(modpath .. "/crafting.lua") -dofile(modpath .. "/aliases.lua") + +if minetest.get_modpath("default") then + dofile(modpath .. "/nodes.lua") + dofile(modpath .. "/redefinitions.lua") + dofile(modpath .. "/crafting.lua") + dofile(modpath .. "/aliases.lua") +end diff --git a/mod.conf b/mod.conf index 011d4a0..422fe31 100644 --- a/mod.conf +++ b/mod.conf @@ -1,5 +1,4 @@ name = moreblocks description = Adds various miscellaneous blocks to the game. -depends = default -optional_depends = intllib,stairs,farming,wool,basic_materials +optional_depends = default,intllib,stairs,farming,wool,basic_materials min_minetest_version = 5.0.0 diff --git a/nodes.lua b/nodes.lua index fbe66dc..68792cb 100644 --- a/nodes.lua +++ b/nodes.lua @@ -7,15 +7,15 @@ Licensed under the zlib license. See LICENSE.md for more information. local S = moreblocks.S -local sound_dirt = default.node_sound_dirt_defaults() -local sound_wood = default.node_sound_wood_defaults() -local sound_stone = default.node_sound_stone_defaults() -local sound_glass = default.node_sound_glass_defaults() -local sound_leaves = default.node_sound_leaves_defaults() +local sound_dirt = moreblocks.node_sound_dirt_defaults() +local sound_wood = moreblocks.node_sound_wood_defaults() +local sound_stone = moreblocks.node_sound_stone_defaults() +local sound_glass = moreblocks.node_sound_glass_defaults() +local sound_leaves = moreblocks.node_sound_leaves_defaults() -- Don't break on 0.4.14 and earlier. -local sound_metal = (default.node_sound_metal_defaults - and default.node_sound_metal_defaults() or sound_stone) +local sound_metal = (moreblocks.node_sound_metal_defaults + and moreblocks.node_sound_metal_defaults() or sound_stone) local function tile_tiles(name) local tex = "moreblocks_" ..name.. ".png" diff --git a/sounds.lua b/sounds.lua new file mode 100644 index 0000000..5385d27 --- /dev/null +++ b/sounds.lua @@ -0,0 +1,20 @@ +--[[ +More Blocks: sound definitions + +Copyright © 2011-2021 Hugo Locurcio and contributors. +Licensed under the zlib license. See LICENSE.md for more information. +--]] + +local has_default_mod = minetest.get_modpath("default") +for _, sound in ipairs({"dirt", "wood", "stone", "metal", "glass", "leaves"}) do + -- use sound-function from default if available + -- otherwise fall back to a no-op function (no sounds) + local sound_function_name = "node_sound_" .. sound .. "_defaults" + if has_default_mod then + -- use default sounds + moreblocks[sound_function_name] = default[sound_function_name] + else + -- no-op + moreblocks[sound_function_name] = function() end + end +end diff --git a/stairsplus/API.md b/stairsplus/API.md index c0fea32..46b838d 100644 --- a/stairsplus/API.md +++ b/stairsplus/API.md @@ -10,7 +10,7 @@ description = "Wooden", tiles = {"default_wood.png"}, groups = {oddly_breakabe_by_hand=1}, - sounds = default.node_sound_wood_defaults(), + sounds = moreblocks.node_sound_wood_defaults(), }) ``` The following register only a particular type of microblock. diff --git a/stairsplus/custom.lua b/stairsplus/custom.lua index 0b3078f..961d1ea 100644 --- a/stairsplus/custom.lua +++ b/stairsplus/custom.lua @@ -69,7 +69,7 @@ local function register_custom_subset(subset, modname, subname, recipeitem, grou description = description, drop = drop, light_source = light, - sounds = default.node_sound_stone_defaults(), + sounds = moreblocks.node_sound_stone_defaults(), }) end diff --git a/stairsplus/microblocks.lua b/stairsplus/microblocks.lua index d2c9579..88f94fc 100644 --- a/stairsplus/microblocks.lua +++ b/stairsplus/microblocks.lua @@ -15,7 +15,7 @@ local function register_micro(modname, subname, recipeitem, groups, images, desc description = description, drop = drop, light_source = light, - sounds = default.node_sound_stone_defaults(), + sounds = moreblocks.node_sound_stone_defaults(), }) end diff --git a/stairsplus/panels.lua b/stairsplus/panels.lua index ff572c7..40f3320 100644 --- a/stairsplus/panels.lua +++ b/stairsplus/panels.lua @@ -15,7 +15,7 @@ local function register_panel(modname, subname, recipeitem, groups, images, desc description = description, drop = drop, light_source = light, - sounds = default.node_sound_stone_defaults(), + sounds = moreblocks.node_sound_stone_defaults(), }) end diff --git a/stairsplus/registrations.lua b/stairsplus/registrations.lua index 5a2eb77..8b7864e 100644 --- a/stairsplus/registrations.lua +++ b/stairsplus/registrations.lua @@ -6,75 +6,77 @@ Licensed under the zlib license. See LICENSE.md for more information. --]] -- default registrations -local default_nodes = { -- Default stairs/slabs/panels/microblocks: - "stone", - "stone_block", - "cobble", - "mossycobble", - "brick", - "sandstone", - "steelblock", - "goldblock", - "copperblock", - "bronzeblock", - "diamondblock", - "tinblock", - "desert_stone", - "desert_stone_block", - "desert_cobble", - "meselamp", - "glass", - "tree", - "wood", - "jungletree", - "junglewood", - "pine_tree", - "pine_wood", - "acacia_tree", - "acacia_wood", - "aspen_tree", - "aspen_wood", - "obsidian", - "obsidian_block", - "obsidianbrick", - "obsidian_glass", - "stonebrick", - "desert_stonebrick", - "sandstonebrick", - "silver_sandstone", - "silver_sandstone_brick", - "silver_sandstone_block", - "desert_sandstone", - "desert_sandstone_brick", - "desert_sandstone_block", - "sandstone_block", - "coral_skeleton", - "ice", -} +if minetest.get_modpath("default") then + local default_nodes = { -- Default stairs/slabs/panels/microblocks: + "stone", + "stone_block", + "cobble", + "mossycobble", + "brick", + "sandstone", + "steelblock", + "goldblock", + "copperblock", + "bronzeblock", + "diamondblock", + "tinblock", + "desert_stone", + "desert_stone_block", + "desert_cobble", + "meselamp", + "glass", + "tree", + "wood", + "jungletree", + "junglewood", + "pine_tree", + "pine_wood", + "acacia_tree", + "acacia_wood", + "aspen_tree", + "aspen_wood", + "obsidian", + "obsidian_block", + "obsidianbrick", + "obsidian_glass", + "stonebrick", + "desert_stonebrick", + "sandstonebrick", + "silver_sandstone", + "silver_sandstone_brick", + "silver_sandstone_block", + "desert_sandstone", + "desert_sandstone_brick", + "desert_sandstone_block", + "sandstone_block", + "coral_skeleton", + "ice", + } -for _, name in pairs(default_nodes) do - local mod = "default" - local nodename = mod .. ":" .. name - local ndef = table.copy(minetest.registered_nodes[nodename]) - ndef.sunlight_propagates = true + for _, name in pairs(default_nodes) do + local mod = "default" + local nodename = mod .. ":" .. name + local ndef = table.copy(minetest.registered_nodes[nodename]) + ndef.sunlight_propagates = true - -- Stone and desert_stone drop cobble and desert_cobble respectively. - if type(ndef.drop) == "string" then - ndef.drop = ndef.drop:gsub(".+:", "") + -- Stone and desert_stone drop cobble and desert_cobble respectively. + if type(ndef.drop) == "string" then + ndef.drop = ndef.drop:gsub(".+:", "") + end + + -- Use the primary tile for all sides of cut glasslike nodes and disregard paramtype2. + if #ndef.tiles > 1 and ndef.drawtype and ndef.drawtype:find("glass") then + ndef.tiles = {ndef.tiles[1]} + ndef.paramtype2 = nil + end + + mod = "moreblocks" + stairsplus:register_all(mod, name, nodename, ndef) + minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name) + minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer") + minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner") + minetest.register_alias_force("stairs:slab_" .. name, mod .. ":slab_" .. name) end - - -- Use the primary tile for all sides of cut glasslike nodes and disregard paramtype2. - if #ndef.tiles > 1 and ndef.drawtype and ndef.drawtype:find("glass") then - ndef.tiles = {ndef.tiles[1]} - ndef.paramtype2 = nil - end - - mod = "moreblocks" - stairsplus:register_all(mod, name, nodename, ndef) - minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name) - minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer") - minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner") - minetest.register_alias_force("stairs:slab_" .. name, mod .. ":slab_" .. name) end -- farming registrations @@ -118,7 +120,7 @@ if minetest.get_modpath("basic_materials") then description = "Concrete", tiles = {"basic_materials_concrete_block.png",}, groups = {cracky=1, level=2, concrete=1}, - sounds = default.node_sound_stone_defaults(), + sounds = moreblocks.node_sound_stone_defaults(), }) minetest.register_alias("prefab:concrete_stair","technic:stair_concrete") @@ -128,7 +130,7 @@ if minetest.get_modpath("basic_materials") then description = "Cement", tiles = {"basic_materials_cement_block.png"}, groups = {cracky=2, not_in_creative_inventory=1}, - sounds = default.node_sound_stone_defaults(), + sounds = moreblocks.node_sound_stone_defaults(), sunlight_propagates = true, }) diff --git a/stairsplus/slabs.lua b/stairsplus/slabs.lua index abccd2a..520b17d 100644 --- a/stairsplus/slabs.lua +++ b/stairsplus/slabs.lua @@ -15,7 +15,7 @@ local function register_slab(modname, subname, recipeitem, groups, images, descr description = description, drop = drop, light_source = light, - sounds = default.node_sound_stone_defaults(), + sounds = moreblocks.node_sound_stone_defaults(), }) end diff --git a/stairsplus/slopes.lua b/stairsplus/slopes.lua index 5ab00b0..df3469b 100644 --- a/stairsplus/slopes.lua +++ b/stairsplus/slopes.lua @@ -15,7 +15,7 @@ local function register_slope(modname, subname, recipeitem, groups, images, desc description = description, drop = drop, light_source = light, - sounds = default.node_sound_stone_defaults(), + sounds = moreblocks.node_sound_stone_defaults(), }) end diff --git a/stairsplus/stairs.lua b/stairsplus/stairs.lua index 82770c2..a90a026 100644 --- a/stairsplus/stairs.lua +++ b/stairsplus/stairs.lua @@ -15,7 +15,7 @@ local function register_stair(modname, subname, recipeitem, groups, images, desc description = description, drop = drop, light_source = light, - sounds = default.node_sound_stone_defaults(), + sounds = moreblocks.node_sound_stone_defaults(), }) end From f8a7d66403b4b1e2d87eeb4249a9be3edb906861 Mon Sep 17 00:00:00 2001 From: afkplayer5000 <77247273+afkplayer5000@users.noreply.github.com> Date: Sun, 29 Aug 2021 00:23:47 -0600 Subject: [PATCH 2/2] Fix circular saw item duplication bug (#173) --- circular_saw.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/circular_saw.lua b/circular_saw.lua index 15c933e..933e2dd 100644 --- a/circular_saw.lua +++ b/circular_saw.lua @@ -337,6 +337,10 @@ function circular_saw.on_metadata_inventory_take( local input_stack = inv:get_stack(listname, index) if not input_stack:is_empty() and input_stack:get_name()~=stack:get_name() then local player_inv = player:get_inventory() + + -- Prevent arbitrary item duplication. + inv:remove_item(listname, input_stack) + if player_inv:room_for_item("main", input_stack) then player_inv:add_item("main", input_stack) end