@@ -2,14 +2,16 @@ local S = technic.getter
2
2
3
3
technic .register_power_tool (" technic:prospector" , 300000 )
4
4
5
- local function get_metadata (toolstack )
6
- local m = minetest .deserialize (toolstack :get_metadata ())
7
- if not m then m = {} end
8
- if not m .charge then m .charge = 0 end
9
- if not m .target then m .target = " " end
10
- if not m .look_depth then m .look_depth = 7 end
11
- if not m .look_radius then m .look_radius = 1 end
12
- return m
5
+ -- Helper function to consolidate ItemStackMetaRef access and initialize
6
+ local function meta_to_table (meta )
7
+ local t = {}
8
+ local mt = meta :to_table ()
9
+
10
+ t .charge = tonumber (mt .fields [" technic:charge" ]) or 0
11
+ t .target = mt .fields .target or " "
12
+ t .look_depth = tonumber (mt .fields .look_depth ) or 7
13
+ t .look_radius = tonumber (mt .fields .look_radius ) or 1
14
+ return t
13
15
end
14
16
15
17
minetest .register_tool (" technic:prospector" , {
@@ -20,7 +22,8 @@ minetest.register_tool("technic:prospector", {
20
22
on_use = function (toolstack , user , pointed_thing )
21
23
if not user or not user :is_player () or user .is_fake_player then return end
22
24
if pointed_thing .type ~= " node" then return end
23
- local toolmeta = get_metadata (toolstack )
25
+ local meta = technic .get_stack_meta (toolstack )
26
+ local toolmeta = meta_to_table (meta )
24
27
local look_diameter = toolmeta .look_radius * 2 + 1
25
28
local charge_to_take = toolmeta .look_depth * (toolmeta .look_depth + 1 ) * look_diameter * look_diameter
26
29
if toolmeta .charge < charge_to_take then return end
@@ -30,7 +33,7 @@ minetest.register_tool("technic:prospector", {
30
33
end
31
34
if not technic .creative_mode then
32
35
toolmeta .charge = toolmeta .charge - charge_to_take
33
- toolstack : set_metadata ( minetest . serialize ( toolmeta ) )
36
+ meta : set_int ( " technic:charge " , toolmeta . charge )
34
37
technic .set_RE_wear (toolstack , toolmeta .charge , technic .power_tools [toolstack :get_name ()])
35
38
end
36
39
-- What in the heaven's name is this evil sorcery ?
@@ -77,7 +80,8 @@ minetest.register_tool("technic:prospector", {
77
80
end ,
78
81
on_place = function (toolstack , user , pointed_thing )
79
82
if not user or not user :is_player () or user .is_fake_player then return end
80
- local toolmeta = get_metadata (toolstack )
83
+ local meta = technic .get_stack_meta (toolstack )
84
+ local toolmeta = meta_to_table (meta )
81
85
local pointed
82
86
if pointed_thing .type == " node" then
83
87
local pname = minetest .get_node (pointed_thing .under ).name
@@ -125,19 +129,16 @@ minetest.register_on_player_receive_fields(function(user, formname, fields)
125
129
if not user or not user :is_player () or user .is_fake_player then return end
126
130
local toolstack = user :get_wielded_item ()
127
131
if toolstack :get_name () ~= " technic:prospector" then return true end
128
- local toolmeta = get_metadata (toolstack )
132
+ local meta = technic . get_stack_meta (toolstack )
129
133
for field , value in pairs (fields ) do
130
134
if field :sub (1 , 7 ) == " target_" then
131
- toolmeta .target = field :sub (8 )
132
- end
133
- if field :sub (1 , 12 ) == " look_radius_" then
134
- toolmeta .look_radius = field :sub (13 )
135
- end
136
- if field :sub (1 , 11 ) == " look_depth_" then
137
- toolmeta .look_depth = field :sub (12 )
135
+ meta :set_string (" target" , field :sub (8 ))
136
+ elseif field :sub (1 , 12 ) == " look_radius_" then
137
+ meta :set_string (" look_radius" , field :sub (13 ))
138
+ elseif field :sub (1 , 11 ) == " look_depth_" then
139
+ meta :set_string (" look_depth" , field :sub (12 ))
138
140
end
139
141
end
140
- toolstack :set_metadata (minetest .serialize (toolmeta ))
141
142
user :set_wielded_item (toolstack )
142
143
return true
143
144
end )
0 commit comments