From feb177d0e0e98fc3a2a08cbbacbf0f76990f1244 Mon Sep 17 00:00:00 2001 From: flux <25628292+fluxionary@users.noreply.github.com> Date: Tue, 21 Jun 2022 15:26:35 -0700 Subject: [PATCH] support more legacy api --- stairsplus/API.md | 6 +- stairsplus/api/alias.lua | 24 +-- stairsplus/api/node.lua | 2 +- stairsplus/api/shape.lua | 14 -- stairsplus/compat2/old_moreblocks.lua | 217 ++++++++++++++++++++++++-- 5 files changed, 218 insertions(+), 45 deletions(-) diff --git a/stairsplus/API.md b/stairsplus/API.md index 36aded5..7a7a45a 100644 --- a/stairsplus/API.md +++ b/stairsplus/API.md @@ -97,7 +97,7 @@ These are for registering shapes of a node Register all registered shapes for a node. we do not recommend using this, due to the 32767 node limit. we recommend using -* `stairsplus.api.register_custom(node, shapes, [overrides], [meta])` +* `stairsplus.api.register_shapes(node, shapes, [overrides], [meta])` Register variants for a custom list of shapes. * `stairsplus.api.register_group(node, shape_group, [overrides], [meta])` Register variants for a defined shape group. @@ -141,7 +141,7 @@ These are for registering shapes of a node * `stairsplus.api.register_alias_single(old_node, new_node, shape)` Hopefully this is self-explanatory. * `stairsplus.api.register_alias_all(old_node, new_node)` -* `stairsplus.api.register_alias_custom(old_node, new_node, list)` +* `stairsplus.api.register_alias_shapes(old_node, new_node, shapes)` * `stairsplus.api.register_alias_group(old_node, new_node, group)` * `stairsplus.api.register_alias_groups(old_node, new_node, groups)` @@ -149,7 +149,7 @@ These are for registering shapes of a node `alias_force` implies that the shapes for the "old_node" already exist, so after aliasing them, we remove them from internal data structures. * `stairsplus.api.register_alias_force_all(old_node, new_node)` -* `stairsplus.api.register_alias_force_custom(old_node, new_node, list)` +* `stairsplus.api.register_alias_force_shapes(old_node, new_node, shape)` * `stairsplus.api.register_alias_force_group(old_node, new_node, group)` * `stairsplus.api.register_alias_force_groups(old_node, new_node, groups)` diff --git a/stairsplus/api/alias.lua b/stairsplus/api/alias.lua index 435562f..81ec9f1 100644 --- a/stairsplus/api/alias.lua +++ b/stairsplus/api/alias.lua @@ -2,7 +2,7 @@ local api = stairsplus.api local table_is_empty = stairsplus.util.table_is_empty -function api.register_alias_single(old_node, new_node, shape) +function api.register_alias_shape(old_node, new_node, shape) local old_shaped_node = api.format_name(old_node, shape) local new_shaped_node = api.format_name(new_node, shape) @@ -20,19 +20,19 @@ end function api.register_alias_all(old_node, new_node) for shape in pairs(api.registered_shapes) do - api.register_alias_single(old_node, new_node, shape) + api.register_alias_shape(old_node, new_node, shape) end end -function api.register_alias_custom(old_node, new_node, list) - for _, shape in ipairs(list) do - api.register_alias_single(old_node, new_node, shape) +function api.register_alias_shapes(old_node, new_node, shapes) + for _, shape in ipairs(shapes) do + api.register_alias_shape(old_node, new_node, shape) end end function api.register_alias_group(old_node, new_node, group) for _, shape in ipairs(api.shapes_by_group[group] or {}) do - api.register_alias_single(old_node, new_node, shape) + api.register_alias_shape(old_node, new_node, shape) end end @@ -42,7 +42,7 @@ function api.register_alias_groups(old_node, new_node, groups) end end -function api.register_alias_force_single(old_node, new_node, shape) +function api.register_alias_force_shape(old_node, new_node, shape) local old_shaped_node = api.format_name(old_node, shape) local new_shaped_node = api.format_name(new_node, shape) @@ -81,19 +81,19 @@ end function api.register_alias_force_all(old_node, new_node) for shape in pairs(api.registered_shapes) do - api.register_alias_force_single(old_node, new_node, shape) + api.register_alias_force_shape(old_node, new_node, shape) end end -function api.register_alias_force_custom(old_node, new_node, list) - for _, shape in ipairs(list) do - api.register_alias_force_single(old_node, new_node, shape) +function api.register_alias_force_shapes(old_node, new_node, shapes) + for _, shape in ipairs(shapes) do + api.register_alias_force_shape(old_node, new_node, shape) end end function api.register_alias_force_group(old_node, new_node, group) for _, shape in ipairs(api.shapes_by_group[group] or {}) do - api.register_alias_force_single(old_node, new_node, shape) + api.register_alias_force_shape(old_node, new_node, shape) end end diff --git a/stairsplus/api/node.lua b/stairsplus/api/node.lua index 65ffdea..993dbd8 100644 --- a/stairsplus/api/node.lua +++ b/stairsplus/api/node.lua @@ -238,7 +238,7 @@ function api.register_all(node, overrides, meta) end end -function api.register_custom(node, shapes, overrides, meta) +function api.register_singles(node, shapes, overrides, meta) for _, shape in ipairs(shapes) do api.register_single(node, shape, overrides, meta) end diff --git a/stairsplus/api/shape.lua b/stairsplus/api/shape.lua index 336d5cf..75c91a7 100644 --- a/stairsplus/api/shape.lua +++ b/stairsplus/api/shape.lua @@ -1,17 +1,3 @@ --- register shapes (e.g. 1/16 slab, 1/8 slab, 1/4 slab, etc) ---[[ -stairsplus.api.register_shape("micro_1", { - name_format = "micro_%s_1", - description = "@1 1/16 Microblock", - shape_groups = {micro = 1}, - eighths = 1, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, 0, 0, -0.4375, 0.5}, - }, -}) -]] local api = stairsplus.api api.registered_shapes = {} diff --git a/stairsplus/compat2/old_moreblocks.lua b/stairsplus/compat2/old_moreblocks.lua index bc42f11..6ca920f 100644 --- a/stairsplus/compat2/old_moreblocks.lua +++ b/stairsplus/compat2/old_moreblocks.lua @@ -6,34 +6,221 @@ local api = stairsplus.api local is_legacy_drawtype = stairsplus.compat.is_legacy_drawtype local legacy_mode = stairsplus.settings.legacy_mode -function stairsplus:register_all(modname, subname, recipeitem, fields) +local function clean_legacy_fields(fields) + fields = fields or {} + + fields.drawtype = nil + fields.light_source = nil + fields.inventory_image = nil + fields.inventory_overlay = nil + fields.wield_image = nil + fields.wield_overlay = nil + fields.wield_scale = nil + fields.tool_capabilities = nil + fields.node_placement_prediction = nil + fields.node_dig_prediction = nil + fields.on_place = nil + fields.on_secondary_use = nil + fields.on_drop = nil + fields.on_use = nil + fields.after_use = nil + fields.paramtype2 = nil + fields.node_box = nil + fields.mesh = nil + fields.connects_to = nil + fields.connect_sides = nil + fields.selection_box = nil + fields.collision_box = nil + fields.legacy_facedir_simple = nil + fields.legacy_wallmounted = nil + if type(fields.drop) ~= "string" then + fields.drop = nil + end + fields.on_construct = nil + fields.on_destruct = nil + fields.after_destruct = nil + fields.after_place_node = nil + fields.after_dig_node = nil + fields.can_dig = nil + fields.on_punch = nil + fields.on_rightclick = nil + fields.on_dig = nil + fields.on_timer = nil + fields.on_receive_fields = nil + return fields +end + +local function register_group(modname, subname, recipeitem, fields, group) + fields = clean_legacy_fields(fields) local meta = {} if is_legacy_drawtype(recipeitem) then meta.ignore_drawtype = true end - if legacy_mode then - api.register_group(recipeitem, "legacy", fields, meta) - else - api.register_group(recipeitem, "common", fields, meta) - end + api.register_group(recipeitem, group, fields, meta) local old_name = ("%s:%s"):format(modname, subname) if old_name ~= recipeitem then - api.register_alias_all(old_name, recipeitem) + api.register_alias_group(old_name, recipeitem, group) + end +end + +function stairsplus:register_all(modname, subname, recipeitem, fields) + if legacy_mode then + register_group(modname, subname, recipeitem, fields, "legacy") + else + register_group(modname, subname, recipeitem, fields, "common") + end +end + +function stairsplus:register_micro(modname, subname, recipeitem, fields) + register_group(modname, subname, recipeitem, fields, "micro") +end + +function stairsplus:register_panel(modname, subname, recipeitem, fields) + register_group(modname, subname, recipeitem, fields, "panel") +end + +function stairsplus:register_slab(modname, subname, recipeitem, fields) + register_group(modname, subname, recipeitem, fields, "slab") +end + +function stairsplus:register_slope(modname, subname, recipeitem, fields) + register_group(modname, subname, recipeitem, fields, "slope") +end + +function stairsplus:register_stair(modname, subname, recipeitem, fields) + register_group(modname, subname, recipeitem, fields, "stair") +end + +local fix_shape_table = { + micro = "micro_8", + panel = "panel_8", + slab = "slab_8", + slab_quarter = "slab_4", + slab_three_quarter = "slab_12", + stair_alt = "stair_alt_8", +} + +local function interpret_subset(subset) + local shapes = {} + for _, v in ipairs(subset) do + local shape = table.concat(v, "") + shape = fix_shape_table[shape] or shape + table.insert(shapes, shape) + end + return shapes +end + +function stairsplus:register_custom_subset(subset, modname, subname, recipeitem, fields) + local shapes = interpret_subset(subset) + + fields = clean_legacy_fields(fields) + local meta = {} + if is_legacy_drawtype(recipeitem) then + meta.ignore_drawtype = true + end + + api.register_singles(recipeitem, shapes, fields, meta) + + local old_name = ("%s:%s"):format(modname, subname) + if old_name ~= recipeitem then + api.register_alias_shapes(old_name, recipeitem, shapes) end end function stairsplus:register_alias_all(modname_old, subname_old, modname_new, subname_new) - api.register_alias_all( - ("%s:%s"):format(modname_old, subname_old), - ("%s:%s"):format(modname_new, subname_new) - ) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + + if legacy_mode then + api.register_alias_group(old_node, new_node, "legacy") + else + api.register_alias_group(old_node, new_node, "common") + end +end + +function stairsplus:register_alias_micro(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_group(old_node, new_node, "micro") +end + +function stairsplus:register_alias_panel(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_group(old_node, new_node, "panel") +end + +function stairsplus:register_alias_slab(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_group(old_node, new_node, "slab") +end + +function stairsplus:register_alias_slope(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_group(old_node, new_node, "slope") +end + +function stairsplus:register_alias_stair(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_group(old_node, new_node, "stair") +end + +function stairsplus:register_custom_subset_alias(subset, modname_old, subname_old, modname_new, subname_new) + local shapes = interpret_subset(subset) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_shapes(old_node, new_node, shapes) end function stairsplus:register_alias_force_all(modname_old, subname_old, modname_new, subname_new) - api.register_alias_force_all( - ("%s:%s"):format(modname_old, subname_old), - ("%s:%s"):format(modname_new, subname_new) - ) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + + if legacy_mode then + api.register_alias_force_group(old_node, new_node, "legacy") + else + api.register_alias_force_group(old_node, new_node, "common") + end +end + +function stairsplus:register_alias_force_micro(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_force_group(old_node, new_node, "micro") +end + +function stairsplus:register_alias_force_panel(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_force_group(old_node, new_node, "panel") +end + +function stairsplus:register_alias_force_slab(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_force_group(old_node, new_node, "slab") +end + +function stairsplus:register_alias_force_slope(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_force_group(old_node, new_node, "slope") +end + +function stairsplus:register_alias_force_stair(modname_old, subname_old, modname_new, subname_new) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_force_group(old_node, new_node, "stair") +end + +function stairsplus:register_custom_subset_alias(subset, modname_old, subname_old, modname_new, subname_new) + local shapes = interpret_subset(subset) + local old_node = ("%s:%s"):format(modname_old, subname_old) + local new_node = ("%s:%s"):format(modname_new, subname_new) + api.register_alias_force_shapes(old_node, new_node, shapes) end