Cristiano Magro
2024-08-27 535e04d542520f58a2db8d4d7a222b73e5c96ef1
commit | author | age
be2f30 1 local S = technic.getter
82cba9 2
03a537 3 local function set_can_wear(itemstack, level, max_level)
Z 4     local temp
5     if level == 0 then
6         temp = 0
7     else
8         temp = 65536 - math.floor(level / max_level * 65535)
9         if temp > 65535 then temp = 65535 end
10         if temp < 1 then temp = 1 end
11     end
12     itemstack:set_wear(temp)
13 end
82cba9 14
6771ad 15 function technic.register_can(d)
Z 16     local data = {}
17     for k, v in pairs(d) do data[k] = v end
18     minetest.register_tool(data.can_name, {
19         description = data.can_description,
20         inventory_image = data.can_inventory_image,
21         stack_max = 1,
22         wear_represents = "content_level",
23         liquids_pointable = true,
24         on_use = function(itemstack, user, pointed_thing)
62e04b 25             if pointed_thing.type ~= "node" then return end
Z 26             local node = minetest.get_node(pointed_thing.under)
27             if node.name ~= data.liquid_source_name then return end
a08ba2 28             local meta = technic.get_stack_meta_cans(itemstack)
C 29             local charge = meta:get_int("can_level")
62e04b 30             if charge == data.can_capacity then return end
Z 31             if minetest.is_protected(pointed_thing.under, user:get_player_name()) then
0f6bdb 32                 minetest.log("action", user:get_player_name()..
S 33                     " tried to take "..node.name..
34                     " at protected position "..minetest.pos_to_string(pointed_thing.under)..
35                     " with a "..data.can_name)
6771ad 36                 return
eac484 37             end
62e04b 38             minetest.remove_node(pointed_thing.under)
Z 39             charge = charge + 1
a08ba2 40             meta:set_int("can_level", charge)
62e04b 41             set_can_wear(itemstack, charge, data.can_capacity)
Z 42             return itemstack
43         end,
44         on_place = function(itemstack, user, pointed_thing)
45             if pointed_thing.type ~= "node" then return end
46             local pos = pointed_thing.under
b2a124 47             local node_name = minetest.get_node(pos).name
B 48             local def = minetest.registered_nodes[node_name] or {}
62e04b 49             if def.on_rightclick and user and not user:get_player_control().sneak then
Z 50                 return def.on_rightclick(pos, minetest.get_node(pos), user, itemstack, pointed_thing)
6771ad 51             end
b2a124 52             if not def.buildable_to or node_name == data.liquid_source_name then
62e04b 53                 pos = pointed_thing.above
b2a124 54                 node_name = minetest.get_node(pos).name
B 55                 def = minetest.registered_nodes[node_name] or {}
56                 -- Try to place node above the pointed source, or abort.
57                 if not def.buildable_to or node_name == data.liquid_source_name then return end
6771ad 58             end
a08ba2 59             local meta = technic.get_stack_meta_cans(itemstack)
C 60             local charge = meta:get_int("can_level")
62e04b 61             if charge == 0 then return end
Z 62             if minetest.is_protected(pos, user:get_player_name()) then
0f6bdb 63                 minetest.log("action", user:get_player_name()..
S 64                     " tried to place "..data.liquid_source_name..
65                     " at protected position "..minetest.pos_to_string(pos)..
66                     " with a "..data.can_name)
6771ad 67                 return
Z 68             end
62e04b 69             minetest.set_node(pos, {name=data.liquid_source_name})
Z 70             charge = charge - 1
a08ba2 71             meta:set_int("can_level", charge)
62e04b 72             set_can_wear(itemstack, charge, data.can_capacity)
Z 73             return itemstack
6771ad 74         end,
Z 75         on_refill = function(stack)
a08ba2 76             local meta = technic.get_stack_meta_cans(stack)
C 77             meta:set_int("can_level", data.can_capacity)
6771ad 78             set_can_wear(stack, data.can_capacity, data.can_capacity)
Z 79             return stack
80         end,
81     })
82 end
83
84 technic.register_can({
85     can_name = "technic:water_can",
86     can_description = S("Water Can"),
87     can_inventory_image = "technic_water_can.png",
88     can_capacity = 16,
89     liquid_source_name = "default:water_source",
90     liquid_flowing_name = "default:water_flowing",
82cba9 91 })
R 92
6771ad 93 minetest.register_craft({
Z 94     output = 'technic:water_can 1',
95     recipe = {
96         {'technic:zinc_ingot', 'technic:rubber','technic:zinc_ingot'},
97         {'technic:carbon_steel_ingot', '', 'technic:carbon_steel_ingot'},
98         {'technic:zinc_ingot', 'technic:carbon_steel_ingot', 'technic:zinc_ingot'},
99     }
82cba9 100 })
be2f30 101
6771ad 102 technic.register_can({
Z 103     can_name = "technic:lava_can",
104     can_description = S("Lava Can"),
105     can_inventory_image = "technic_lava_can.png",
106     can_capacity = 8,
107     liquid_source_name = "default:lava_source",
108     liquid_flowing_name = "default:lava_flowing",
109 })
110
111 minetest.register_craft({
112     output = 'technic:lava_can 1',
113     recipe = {
114         {'technic:zinc_ingot', 'technic:stainless_steel_ingot','technic:zinc_ingot'},
115         {'technic:stainless_steel_ingot', '', 'technic:stainless_steel_ingot'},
116         {'technic:zinc_ingot', 'technic:stainless_steel_ingot', 'technic:zinc_ingot'},
117     }
118 })
904800 119
A 120 technic.register_can({
121     can_name = 'technic:river_water_can',
122     can_description = S("River Water Can"),
123     can_inventory_image = "technic_river_water_can.png",
124     can_capacity = 16,
125     liquid_source_name = "default:river_water_source",
126     liquid_flowing_name = "default:river_water_flowing",
127 })
128
129 minetest.register_craft({
130     output = 'technic:river_water_can 1',
131     recipe = {
132         {'technic:zinc_ingot', 'technic:rubber', 'technic:zinc_ingot'},
133         {'default:steel_ingot', '', 'default:steel_ingot'},
134         {'technic:zinc_ingot', 'default:steel_ingot', 'technic:zinc_ingot'},
135     }
136 })