From 87e27d9f20fd257f922109b08b3e8b0e98e94df9 Mon Sep 17 00:00:00 2001 From: Oblomov Date: Mon, 14 Dec 2020 14:38:16 +0100 Subject: [PATCH 1/5] Refresh built-in crafting recipe overrides (#161) --- redefinitions.lua | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/redefinitions.lua b/redefinitions.lua index 6cb8ea4..1856c98 100644 --- a/redefinitions.lua +++ b/redefinitions.lua @@ -7,24 +7,42 @@ Licensed under the zlib license. See LICENSE.md for more information. -- Redefinitions of some default crafting recipes: -minetest.register_craft({ - output = "default:sign_wall 4", +-- Signs: +1 +minetest.clear_craft({ recipe = { - {"default:wood", "default:wood", "default:wood"}, - {"default:wood", "default:wood", "default:wood"}, - {"", "default:stick", ""}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'', 'group:stick', ''}, + } +}) + +minetest.clear_craft({ + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'group:wood', 'group:wood', 'group:wood'}, + {'', 'group:stick', ''}, } }) minetest.register_craft({ - output = "default:ladder 4", + output = 'default:sign_wall_steel 4', recipe = { - {"default:stick", "", "default:stick"}, - {"default:stick", "default:stick", "default:stick"}, - {"default:stick", "", "default:stick"}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'', 'group:stick', ''}, } }) +minetest.register_craft({ + output = 'default:sign_wall_wood 4', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'group:wood', 'group:wood', 'group:wood'}, + {'', 'group:stick', ''}, + } +}) + + minetest.clear_craft({ recipe = { {"default:papyrus", "default:papyrus", "default:papyrus"} @@ -37,6 +55,7 @@ minetest.register_craft({ } }) + minetest.register_craft({ output = "default:rail 24", recipe = { From 5aacb05b14676731f49e734d222e5f4119f4dab9 Mon Sep 17 00:00:00 2001 From: Oblomov Date: Mon, 14 Dec 2020 14:44:21 +0100 Subject: [PATCH 2/5] Add Clean (Super) Glow Glass and traps (#159) --- CHANGELOG.md | 4 +++ crafting.lua | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++ nodes.lua | 65 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b50f6d6..13514fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Added + +- Clean Glass versions of Trap and (Super) Glowing Glass + ### Removed - Legacy Stairs+ conversion code. diff --git a/crafting.lua b/crafting.lua index cd07711..34d1dc0 100644 --- a/crafting.lua +++ b/crafting.lua @@ -348,12 +348,36 @@ minetest.register_craft({ recipe = {"moreblocks:sweeper", "default:glass"}, }) +minetest.register_craft({ + output = "moreblocks:trap_clean_glass", + type = "shapeless", + recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glass"}, +}) + +minetest.register_craft({ + output = "moreblocks:trap_clean_glass", + type = "shapeless", + recipe = {"moreblocks:sweeper", "moreblocks:trap_glass"}, +}) + minetest.register_craft({ output = "moreblocks:glow_glass", type = "shapeless", recipe = {"default:torch", "default:glass"}, }) +minetest.register_craft({ + output = "moreblocks:clean_glow_glass", + type = "shapeless", + recipe = {"default:torch", "moreblocks:clean_glass"}, +}) + +minetest.register_craft({ + output = "moreblocks:clean_glow_glass", + type = "shapeless", + recipe = {"moreblocks:sweeper", "moreblocks:glow_glass"}, +}) + minetest.register_craft({ output = "moreblocks:trap_glow_glass", type = "shapeless", @@ -366,6 +390,26 @@ minetest.register_craft({ recipe = {"default:mese_crystal_fragment", "moreblocks:glow_glass"}, }) +-- several recipes are possible for the trap+clean+glow, we only present 3 of them +minetest.register_craft({ + output = "moreblocks:trap_clean_glow_glass", + type = "shapeless", + recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glow_glass"}, +}) + +minetest.register_craft({ + output = "moreblocks:trap_clean_glow_glass", + type = "shapeless", + recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glass", "default:torch"}, +}) + +minetest.register_craft({ + output = "moreblocks:trap_clean_glow_glass", + type = "shapeless", + recipe = {"moreblocks:sweeper", "moreblocks:trap_glow_glass" }, +}) + + minetest.register_craft({ output = "moreblocks:super_glow_glass", type = "shapeless", @@ -378,6 +422,24 @@ minetest.register_craft({ recipe = {"default:torch", "moreblocks:glow_glass"}, }) +minetest.register_craft({ + output = "moreblocks:clean_super_glow_glass", + type = "shapeless", + recipe = {"default:torch", "default:torch", "moreblocks:clean_glass"}, +}) + +minetest.register_craft({ + output = "moreblocks:clean_super_glow_glass", + type = "shapeless", + recipe = {"default:torch", "moreblocks:clean_glow_glass"}, +}) + +minetest.register_craft({ + output = "moreblocks:clean_super_glow_glass", + type = "shapeless", + recipe = {"moreblocks:sweeper", "moreblocks:super_glow_glass"}, +}) + minetest.register_craft({ output = "moreblocks:trap_super_glow_glass", @@ -391,6 +453,32 @@ minetest.register_craft({ recipe = {"default:mese_crystal_fragment", "moreblocks:super_glow_glass"}, }) +-- several recipes are possible for the trap+clean+glow, we only present 4 of them +minetest.register_craft({ + output = "moreblocks:trap_clean_super_glow_glass", + type = "shapeless", + recipe = {"default:mese_crystal_fragment", "moreblocks:clean_super_glow_glass"}, +}) + +minetest.register_craft({ + output = "moreblocks:trap_clean_super_glow_glass", + type = "shapeless", + recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glow_glass", "default:torch"}, +}) + +minetest.register_craft({ + output = "moreblocks:trap_clean_super_glow_glass", + type = "shapeless", + recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glass", "default:torch", "default:torch"}, +}) + +minetest.register_craft({ + output = "moreblocks:trap_clean_super_glow_glass", + type = "shapeless", + recipe = {"moreblocks:sweeper", "moreblocks:trap_super_glow_glass" }, +}) + + minetest.register_craft({ output = "moreblocks:coal_stone", type = "shapeless", diff --git a/nodes.lua b/nodes.lua index e255e0a..79abcb5 100644 --- a/nodes.lua +++ b/nodes.lua @@ -349,6 +349,19 @@ local nodes = { sounds = sound_stone, no_stairs = true, }, + ["trap_clean_glass"] = { + description = S("Trap Clean Glass"), + drawtype = "glasslike_framed_optional", + tiles = {"moreblocks_clean_glass.png^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png"}, + use_texture_alpha = true, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = sound_glass, + no_stairs = true, + }, ["trap_sandstone"] = { description = S("Trap Sandstone"), drawtype = "glasslike_framed", @@ -407,6 +420,18 @@ local nodes = { groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, }, + ["clean_glow_glass"] = { + description = S("Clean Glow Glass"), + drawtype = "glasslike_framed_optional", + tiles = {"moreblocks_clean_glass.png^[colorize:#E9CD61", "moreblocks_clean_glass_detail.png^[colorize:#E9CD61"}, + use_texture_alpha = true, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + light_source = 11, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = sound_glass, + }, ["trap_glow_glass"] = { description = S("Trap Glow Glass"), drawtype = "glasslike_framed_optional", @@ -421,6 +446,20 @@ local nodes = { sounds = sound_glass, no_stairs = true, }, + ["trap_clean_glow_glass"] = { + description = S("Trap Clean Glow Glass"), + drawtype = "glasslike_framed_optional", + tiles = {"moreblocks_clean_glass.png^[colorize:#E9CD61^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png^[colorize:#E9CD61"}, + use_texture_alpha = true, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + light_source = 11, + walkable = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = sound_glass, + no_stairs = true, + }, ["super_glow_glass"] = { description = S("Super Glow Glass"), drawtype = "glasslike_framed_optional", @@ -433,6 +472,18 @@ local nodes = { groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, }, + ["clean_super_glow_glass"] = { + description = S("Clean Super Glow Glass"), + drawtype = "glasslike_framed_optional", + tiles = {"moreblocks_clean_glass.png^[colorize:#FFFF78", "moreblocks_clean_glass_detail.png^[colorize:#FFFF78"}, + use_texture_alpha = true, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + light_source = default.LIGHT_MAX, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = sound_glass, + }, ["trap_super_glow_glass"] = { description = S("Trap Super Glow Glass"), drawtype = "glasslike_framed_optional", @@ -447,6 +498,20 @@ local nodes = { sounds = sound_glass, no_stairs = true, }, + ["trap_clean_super_glow_glass"] = { + description = S("Trap Clean Super Glow Glass"), + drawtype = "glasslike_framed_optional", + tiles = {"moreblocks_clean_glass.png^[colorize:#FFFF78^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png^[colorize:#FFFF78"}, + use_texture_alpha = true, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + light_source = default.LIGHT_MAX, + walkable = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = sound_glass, + no_stairs = true, + }, ["rope"] = { description = S("Rope"), drawtype = "signlike", From ab91ad967a9fc67cfc2754d1f4292c3d4ca4b0cd Mon Sep 17 00:00:00 2001 From: Oblomov Date: Mon, 14 Dec 2020 14:46:50 +0100 Subject: [PATCH 3/5] Improve the placement logic for slabs, etc (#160) Co-authored-by: Hugo Locurcio --- CHANGELOG.md | 23 ++++++----- stairsplus/common.lua | 93 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13514fa..1dcd16b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,22 +9,25 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added -- Clean Glass versions of Trap and (Super) Glowing Glass +- Clean Glass versions of Trap and (Super) Glowing Glass. +- Compressed desert cobblestone. + +### Changed + +- Revised placing strategy that takes into account which side of the face + (top/bottom for horizontal, left/right for vertical placement) is being clicked. + Aux (sprint/special, default E) key can be used to place the node with the orientation + it would have if placed from the other side. + When placing nodes next to nodes of the same gategory (e.g.slab to slab) the other + node's orientation is copied, flipping it placing on top or below an upright or + upside-down node. In this case the aux key will disable the special processing of + same-category nodes. ### Removed - Legacy Stairs+ conversion code. - It was only required to import worlds last edited before Q3 2013. -### Changed - -- Switch to GitHub Actions. - - Benefits include faster responses. - -### Added - -- Compressed desert cobblestone. - ## [2.0.0] - 2019-11-25 ### Added diff --git a/stairsplus/common.lua b/stairsplus/common.lua index de852ca..15e8652 100644 --- a/stairsplus/common.lua +++ b/stairsplus/common.lua @@ -15,6 +15,97 @@ local descriptions = { ["stair"] = S("%s Stairs"), } +-- Extends the standad rotate_node placement so that it takes into account +-- the side (top/bottom or left/right) of the face being pointed at. +-- As with the standard rotate_node, sneak can be used to force the perpendicular +-- placement (wall placement on floor/ceiling, floor/ceiling placement on walls). +-- Additionally, the aux / sprint / special key can be used to place the node +-- as if from the opposite side. +-- +-- When placing a node next to one of the same category (e.g. slab to slab or +-- stair to stair), the default placement (regardless of sneak) is to copy the +-- under node's param2, flipping if placed above or below it. The aux key disable +-- this behavior. +local wall_right_dirmap = {9, 18, 7, 12} +local wall_left_dirmap = {11, 16, 5, 14} +local ceil_dirmap = {20, 23, 22, 21} + +stairsplus.rotate_node_aux = function(itemstack, placer, pointed_thing) + local sneak = placer and placer:get_player_control().sneak + local aux = placer and placer:get_player_control().aux1 + + -- namestring for what we are placing, up to the first _ (exclusive) + local item_prefix = itemstack:get_name():gsub("_.*$", "") + -- namestring for what we are placing against + local under = pointed_thing.under + local under_node = minetest.get_node(under) + local under_prefix = under_node and under_node.name:gsub("_.*$", "") + + local same_cat = item_prefix == under_prefix + + -- standard (floor) facedir, also used for sneak placement against the lower half of the wall + local p2 = placer and minetest.dir_to_facedir(placer:get_look_dir()) or 0 + + -- check which face and which quadrant we are interested in + -- this is used both to check if we're handling parallel placement in the same-category case, + -- and in general for sneak placement + local face_pos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) + local face_off = vector.subtract(face_pos, under) + local wallmounted = minetest.dir_to_wallmounted(face_off) + + if same_cat and not aux then + p2 = under_node.param2 + -- flip if placing above or below an upright or upside-down node + -- TODO should we also flip when placing next to a side-mounted node? + if wallmounted < 2 then + if p2 < 4 then + p2 = (p2 + 2) % 4 + p2 = ceil_dirmap[p2 + 1] + elseif p2 > 19 then + p2 = ceil_dirmap[p2 - 19] - 20 + p2 = (p2 + 2) % 4 + end + end + else + -- for same-cat placement, aux is used to disable param2 copying + if same_cat then + aux = not aux + end + + local remap = nil + + -- standard placement against the wall + local use_wallmap = (wallmounted > 1 and not sneak) or (wallmounted < 2 and sneak) + + -- standard placement against the ceiling, or sneak placement against the upper half of the wall + local use_ceilmap = wallmounted == 1 and not sneak + use_ceilmap = use_ceilmap or (wallmounted > 1 and sneak and face_off.y > 0) + + if use_wallmap then + local left = (p2 == 0 and face_off.x < 0) or + (p2 == 1 and face_off.z > 0) or + (p2 == 2 and face_off.x > 0) or + (p2 == 3 and face_off.z < 0) + if aux then + left = not left + end + remap = left and wall_left_dirmap or wall_right_dirmap + elseif use_ceilmap then + remap = ceil_dirmap + end + + if aux then + p2 = (p2 + 2) % 4 + end + + if remap then + p2 = remap[p2 + 1] + end + end + + return minetest.item_place(itemstack, placer, pointed_thing, p2) +end + stairsplus.register_single = function(category, alternate, info, modname, subname, recipeitem, fields) local src_def = minetest.registered_nodes[recipeitem] or {} local desc_base = descriptions[category]:format(fields.description) @@ -42,7 +133,7 @@ stairsplus.register_single = function(category, alternate, info, modname, subnam -- Darken light sources slightly to make up for their smaller visual size def.light_source = math.max(0, (def.light_source or 0) - 1) - def.on_place = minetest.rotate_node + def.on_place = stairsplus.rotate_node_aux def.groups = stairsplus:prepare_groups(fields.groups) if category == "slab" then From c3b45149b0c505306e678b4b27e2878c3407f5c0 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 14 Dec 2020 14:50:02 +0100 Subject: [PATCH 4/5] Update the changelog with recent fixes --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1dcd16b..55d2a89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. upside-down node. In this case the aux key will disable the special processing of same-category nodes. +### Fixed + +- Revised minetest_game crafting recipe overrides to match Minetest 5.0.0 and later. + ### Removed - Legacy Stairs+ conversion code. From cf0f8757093cfaa35c853d286068864256385f62 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 14 Dec 2020 14:52:04 +0100 Subject: [PATCH 5/5] Bump to version 2.1.0 --- CHANGELOG.md | 5 ++++- README.md | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55d2a89..af7f67a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [2.1.0] - 2020-12-14 + ### Added - Clean Glass versions of Trap and (Super) Glowing Glass. @@ -115,7 +117,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Initial versioned release. -[Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v2.0.0...HEAD +[Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v2.1.0...HEAD +[2.1.0]: https://github.com/minetest-mods/moreblocks/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/minetest-mods/moreblocks/compare/v1.3.0...v2.0.0 [1.3.0]: https://github.com/minetest-mods/moreblocks/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/minetest-mods/moreblocks/compare/v1.1.0...v1.2.0 diff --git a/README.md b/README.md index 38a1dd4..2d5d575 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ on that line. ## Version compatibility -More Blocks is currently primarily tested with Minetest 5.1.0. +More Blocks is currently primarily tested with Minetest 5.3.0. It may or may not work with newer or older versions. Issues arising in older versions than 5.0.0 will generally not be fixed.