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.
This commit is contained in:
Giuseppe Bilotta 2020-12-18 22:17:07 +01:00
parent 8a14250127
commit a0c5390b76
2 changed files with 15 additions and 4 deletions

View File

@ -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

View File

@ -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