From f17b84ade477f304acf0692e48770717d4c0baec Mon Sep 17 00:00:00 2001 From: The4codeblocks <72419529+The4codeblocks@users.noreply.github.com> Date: Wed, 21 May 2025 11:44:11 -0500 Subject: [PATCH] Allow direct microblock input (#212) --- circular_saw.lua | 29 ++++++++++++++++++++--------- stairsplus/custom.lua | 2 +- stairsplus/microblocks.lua | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/circular_saw.lua b/circular_saw.lua index dbd11c6..ae98bea 100644 --- a/circular_saw.lua +++ b/circular_saw.lua @@ -139,7 +139,7 @@ function circular_saw:reset(pos) end inv:set_list("input", {}) - --inv:set_list("micro", {}) + inv:set_list("micro", {}) local microblockcount = inv:get_stack("micro",1):get_count() meta:set_int("anz", microblockcount) @@ -169,20 +169,19 @@ function circular_saw:update_inventory(pos, amount) local stack = inv:get_stack("input", 1) local microstack = inv:get_stack("micro",1) - -- At least one "normal" block is necessary to see what kind of stairs are requested. + -- At least one (micro)block is necessary to see what kind of stairs are requested. if stack:is_empty() and microstack:is_empty() then - -- Any microblocks not taken out yet are now lost. - -- (covers material loss in the machine) + self:reset(pos) return end - local node_name = stack:get_name() or "" -- planned to extract from microblock TODO + local node_name = circular_saw.microblocks[microstack:get_name()] or stack:get_name() or "" local node_def = stack:get_definition() local name_parts = circular_saw.known_nodes[node_name] or "" - local modname = name_parts[1] or circular_saw.microblocks[microstack:get_name()][1] - local material = name_parts[2] or circular_saw.microblocks[microstack:get_name()][2] + local modname = name_parts[1] + local material = name_parts[2] local owned_by = meta:get_string("owner") if owned_by and owned_by ~= "" then @@ -243,11 +242,11 @@ function circular_saw.allow_metadata_inventory_move( end --- Only input- and recycle-slot are intended as input slots: +-- Only input- and recycle-slot (and microblock slot when empty) are intended as input slots: function circular_saw.allow_metadata_inventory_put( pos, listname, index, stack, player) -- The player is not allowed to put something in there: - if listname == "output" or listname == "micro" then + if listname == "output" then return 0 end @@ -295,6 +294,16 @@ function circular_saw.allow_metadata_inventory_put( end return 0 end + + if listname == "micro" then + if not (inv:is_empty("input") and inv:is_empty("micro")) then return 0 end + for name, t in pairs(circular_saw.microblocks) do + if name == stackname and inv:room_for_item("input", stack) then + return count + end + end + return 0 + end end -- Taking is allowed from all slots (even the internal microblock slot). @@ -314,6 +323,8 @@ function circular_saw.on_metadata_inventory_put( if listname == "input" then -- Each new block is worth 8 microblocks: circular_saw:update_inventory(pos, 8 * count) + elseif listname == "micro" then + circular_saw:update_inventory(pos, count) elseif listname == "recycle" then -- Lets look which shape this represents: local cost = circular_saw:get_cost(inv, stackname) diff --git a/stairsplus/custom.lua b/stairsplus/custom.lua index 6b7bb5e..8ae5418 100644 --- a/stairsplus/custom.lua +++ b/stairsplus/custom.lua @@ -94,5 +94,5 @@ function stairsplus:register_custom_subset(subset, modname, subname, recipeitem, end circular_saw.known_nodes[recipeitem] = {modname, subname} - circular_saw.microblocks[modname.. ":micro_" .. subname] = {modname, subname} + circular_saw.microblocks[modname.. ":micro_" .. subname] = recipeitem end diff --git a/stairsplus/microblocks.lua b/stairsplus/microblocks.lua index 110dda5..ef8a9bc 100644 --- a/stairsplus/microblocks.lua +++ b/stairsplus/microblocks.lua @@ -40,5 +40,5 @@ function stairsplus:register_micro(modname, subname, recipeitem, fields) end circular_saw.known_nodes[recipeitem] = {modname, subname} - circular_saw.microblocks[modname.. ":micro_" .. subname] = {modname, subname} + circular_saw.microblocks[modname.. ":micro_" .. subname] = recipeitem end