From a0c5390b7671cbc4cc20c18bf7be0e99a3a7d90e Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Fri, 18 Dec 2020 22:17:07 +0100 Subject: [PATCH] Fix: improve category detection Removing everything from the first underscore blows up when the mod name has an underscore itself. Solve by extracting the category as the part of the name that begins after the colon and ends at the first underscore. As a bonus, this should make it easier to place nodes in the same category even if they are from different mods. --- CHANGELOG.md | 2 ++ stairsplus/common.lua | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11f38fb..340f18a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed +- Fix category detection + - [Fixed stairs placement over oddly-shaped nodes.](https://github.com/minetest-mods/moreblocks/pull/166) ## [2.1.0] - 2020-12-14 diff --git a/stairsplus/common.lua b/stairsplus/common.lua index 182e55e..5534d8f 100644 --- a/stairsplus/common.lua +++ b/stairsplus/common.lua @@ -30,16 +30,25 @@ local wall_right_dirmap = {9, 18, 7, 12} local wall_left_dirmap = {11, 16, 5, 14} local ceil_dirmap = {20, 23, 22, 21} +-- extract the stairsplus category from a node name +-- assumes the name is in the form mod_name:category_original_ndoe_name +local function name_to_category(name) + local colon = name:find(":") or 0 + colon = colon + 1 + local under = name:find("_", colon) + return name:sub(colon, under) +end + 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 + -- category for what we are placing + local item_prefix = name_to_category(itemstack:get_name()) + -- category 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 under_prefix = under_node and name_to_category(under_node.name) local same_cat = item_prefix == under_prefix