Refill behaviour for power tools and cans
authorZefram <zefram@fysh.org>
Wed, 30 Apr 2014 09:49:54 +0000 (10:49 +0100)
committerZefram <zefram@fysh.org>
Wed, 30 Apr 2014 09:49:54 +0000 (10:49 +0100)
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
technic/items.lua
technic/machines/register/battery_box.lua
technic/tools/cans.lua
technic/tools/chainsaw.lua
technic/tools/flashlight.lua
technic/tools/mining_drill.lua
technic/tools/mining_lasers.lua
technic/tools/sonic_screwdriver.lua

index 663a66ae2a67e6c5e001b2c888516964fa67d991..624a8a7edd37f2ca004ca5728b60814354f2de16 100644 (file)
@@ -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
index 9149460e3bd723b542f2247165cd49ec4875b7fc..d62642cd245be71597be81bd3b1d49fcda24751c 100644 (file)
@@ -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 = {
index 8efcb1550f80d330a5c286fce75293829be5849d..3b5728bb0165e0bb8aceef011fbd088faae6a742 100644 (file)
@@ -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,
index ab928113ecabcabd06aa5a45b6bbd0cf711db90c..737443e7b913c339f5c6f063d30ea8e7e4e3d8e8 100644 (file)
@@ -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,
 })
 
index 273e36d380ec8154b13ce25833447b91ffd20640..c8f6d3747ce9cfbab2dde3424795af0a9fee42e7 100644 (file)
@@ -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
index 7beac5e76d471853ec6b3bad98148abcf44d4024..ff49c0acb9ccfbcfe29e3aa28e219c6ff316ab4c 100644 (file)
@@ -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({
index 2a7cfe75ccc236ccc80140f9168ab7be2c11bf38..202123db795f7dcb8f2d5b457856839d7dfdae55 100644 (file)
@@ -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)
index c6ba57f3c31fe41b79cd5e1955db76ca1b2711ae..50df5260920dcc3e56240bfef8098c1c6c582dde 100644 (file)
@@ -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
index cc4edab56d4e364dc7ea3aafe680a6730d95b5e8..0a9b3a9e442221b011e53ceccb8f42fde0e84c3c 100644 (file)
@@ -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