From 00d7c9bdead4d77f0ca88036eda44b8cce6cca34 Mon Sep 17 00:00:00 2001 From: Zefram Date: Wed, 30 Apr 2014 10:49:54 +0100 Subject: [PATCH] Refill behaviour for power tools and cans Supply the on_refill hook for power tools and cans, to perform appropriate charging. This is to be used by unified_inventory's creative-mode refill slot. --- technic/helpers.lua | 11 +++++++++++ technic/items.lua | 3 +++ technic/machines/register/battery_box.lua | 1 + technic/tools/cans.lua | 10 ++++++++++ technic/tools/chainsaw.lua | 1 + technic/tools/flashlight.lua | 1 + technic/tools/mining_drill.lua | 5 +++++ technic/tools/mining_lasers.lua | 1 + technic/tools/sonic_screwdriver.lua | 1 + 9 files changed, 34 insertions(+) diff --git a/technic/helpers.lua b/technic/helpers.lua index 663a66a..624a8a7 100644 --- a/technic/helpers.lua +++ b/technic/helpers.lua @@ -14,3 +14,14 @@ function technic.swap_node(pos, name) return node.name end +-- Fully charge RE chargeable item. +-- Must be defined early to reference in item definitions. +function technic.refill_RE_charge(stack) + local max_charge = technic.power_tools[stack:get_name()] + if not max_charge then return stack end + technic.set_RE_wear(stack, max_charge, max_charge) + local meta = minetest.deserialize(stack:get_metadata()) or {} + meta.charge = max_charge + stack:set_metadata(minetest.serialize(meta)) + return stack +end diff --git a/technic/items.lua b/technic/items.lua index 9149460..d62642c 100644 --- a/technic/items.lua +++ b/technic/items.lua @@ -33,6 +33,7 @@ minetest.register_tool("technic:blue_energy_crystal", { "technic_diamond_block_blue.png", "technic_diamond_block_blue.png"), wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, tool_capabilities = { max_drop_level = 0, groupcaps = { @@ -48,6 +49,7 @@ minetest.register_tool("technic:green_energy_crystal", { "technic_diamond_block_green.png", "technic_diamond_block_green.png"), wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, tool_capabilities = { max_drop_level = 0, groupcaps = { @@ -63,6 +65,7 @@ minetest.register_tool("technic:red_energy_crystal", { "technic_diamond_block_red.png", "technic_diamond_block_red.png"), wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, tool_capabilities = { max_drop_level = 0, groupcaps = { diff --git a/technic/machines/register/battery_box.lua b/technic/machines/register/battery_box.lua index 8efcb15..3b5728b 100644 --- a/technic/machines/register/battery_box.lua +++ b/technic/machines/register/battery_box.lua @@ -19,6 +19,7 @@ minetest.register_tool("technic:battery", { description = S("RE Battery"), inventory_image = "technic_battery.png", wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, tool_capabilities = { charge = 0, max_drop_level = 0, diff --git a/technic/tools/cans.lua b/technic/tools/cans.lua index ab92811..737443e 100644 --- a/technic/tools/cans.lua +++ b/technic/tools/cans.lua @@ -81,6 +81,11 @@ minetest.register_tool("technic:water_can", { return itemstack end end, + on_refill = function(stack) + stack:set_metadata(tostring(water_can_max_load)) + set_can_wear(stack, water_can_max_load, water_can_max_load) + return stack + end, }) minetest.register_tool("technic:lava_can", { @@ -131,5 +136,10 @@ minetest.register_tool("technic:lava_can", { return itemstack end end, + on_refill = function(stack) + stack:set_metadata(tostring(lava_can_max_load)) + set_can_wear(stack, lava_can_max_load, lava_can_max_load) + return stack + end, }) diff --git a/technic/tools/chainsaw.lua b/technic/tools/chainsaw.lua index 273e36d..c8f6d37 100644 --- a/technic/tools/chainsaw.lua +++ b/technic/tools/chainsaw.lua @@ -256,6 +256,7 @@ minetest.register_tool("technic:chainsaw", { inventory_image = "technic_chainsaw.png", stack_max = 1, wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, on_use = function(itemstack, user, pointed_thing) if pointed_thing.type ~= "node" then return itemstack diff --git a/technic/tools/flashlight.lua b/technic/tools/flashlight.lua index 7beac5e..ff49c0a 100644 --- a/technic/tools/flashlight.lua +++ b/technic/tools/flashlight.lua @@ -14,6 +14,7 @@ minetest.register_tool("technic:flashlight", { inventory_image = "technic_flashlight.png", stack_max = 1, wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, }) minetest.register_craft({ diff --git a/technic/tools/mining_drill.lua b/technic/tools/mining_drill.lua index 2a7cfe7..202123d 100644 --- a/technic/tools/mining_drill.lua +++ b/technic/tools/mining_drill.lua @@ -327,6 +327,7 @@ minetest.register_tool("technic:mining_drill", { inventory_image = "technic_mining_drill.png", stack_max = 1, wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, on_use = function(itemstack, user, pointed_thing) if pointed_thing.type ~= "node" then return itemstack @@ -351,6 +352,7 @@ minetest.register_tool("technic:mining_drill_mk2", { description = S("Mining Drill Mk%d"):format(2), inventory_image = "technic_mining_drill_mk2.png", wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, on_use = function(itemstack, user, pointed_thing) mining_drill_mk2_handler(itemstack, user, pointed_thing) return itemstack @@ -366,6 +368,7 @@ for i = 1, 4 do inventory_image = "technic_mining_drill_mk2.png^technic_tool_mode"..i..".png", wield_image = "technic_mining_drill_mk2.png", wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, groups = {not_in_creative_inventory=1}, on_use = function(itemstack, user, pointed_thing) mining_drill_mk2_handler(itemstack, user, pointed_thing) @@ -378,6 +381,7 @@ minetest.register_tool("technic:mining_drill_mk3", { description = S("Mining Drill Mk%d"):format(3), inventory_image = "technic_mining_drill_mk3.png", wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, on_use = function(itemstack, user, pointed_thing) mining_drill_mk3_handler(itemstack,user,pointed_thing) return itemstack @@ -393,6 +397,7 @@ for i=1,5,1 do inventory_image = "technic_mining_drill_mk3.png^technic_tool_mode"..i..".png", wield_image = "technic_mining_drill_mk3.png", wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, groups = {not_in_creative_inventory=1}, on_use = function(itemstack, user, pointed_thing) mining_drill_mk3_handler(itemstack,user,pointed_thing) diff --git a/technic/tools/mining_lasers.lua b/technic/tools/mining_lasers.lua index c6ba57f..50df526 100644 --- a/technic/tools/mining_lasers.lua +++ b/technic/tools/mining_lasers.lua @@ -169,6 +169,7 @@ for _, m in pairs(mining_lasers_list) do inventory_image = "technic_mining_laser_mk"..m[1]..".png", stack_max = 1, wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, on_use = function(itemstack, user) local meta = minetest.deserialize(itemstack:get_metadata()) if not meta or not meta.charge then diff --git a/technic/tools/sonic_screwdriver.lua b/technic/tools/sonic_screwdriver.lua index cc4edab..0a9b3a9 100644 --- a/technic/tools/sonic_screwdriver.lua +++ b/technic/tools/sonic_screwdriver.lua @@ -8,6 +8,7 @@ minetest.register_tool("technic:sonic_screwdriver", { description = S("Sonic Screwdriver"), inventory_image = "technic_sonic_screwdriver.png", wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, on_use = function(itemstack, user, pointed_thing) -- Must be pointing to facedir applicable node if pointed_thing.type ~= "node" then -- 2.30.2