@@ -156,7 +156,8 @@ function core.yaw_to_dir(yaw)
156
156
end
157
157
158
158
function core .get_node_drops (nodename , toolname )
159
- local drop = ItemStack ({name = nodename }):get_definition ().drop
159
+ local def = core .registered_nodes [nodename ]
160
+ local drop = def and def .drop
160
161
if drop == nil then
161
162
-- default drop
162
163
return {nodename }
@@ -205,7 +206,6 @@ function core.get_node_drops(nodename, toolname)
205
206
end
206
207
207
208
function core .item_place_node (itemstack , placer , pointed_thing , param2 )
208
- local item = itemstack :peek_item ()
209
209
local def = itemstack :get_definition ()
210
210
if def .type ~= " node" or pointed_thing .type ~= " node" then
211
211
return itemstack , false
@@ -215,20 +215,21 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2)
215
215
local oldnode_under = core .get_node_or_nil (under )
216
216
local above = pointed_thing .above
217
217
local oldnode_above = core .get_node_or_nil (above )
218
+ local playername = placer :get_player_name ()
218
219
219
220
if not oldnode_under or not oldnode_above then
220
- core .log (" info" , placer : get_player_name () .. " tried to place"
221
+ core .log (" info" , playername .. " tried to place"
221
222
.. " node in unloaded position " .. core .pos_to_string (above ))
222
223
return itemstack , false
223
224
end
224
225
225
- local olddef_under = ItemStack ({ name = oldnode_under .name }): get_definition ()
226
+ local olddef_under = core . registered_nodes [ oldnode_under .name ]
226
227
olddef_under = olddef_under or core .nodedef_default
227
- local olddef_above = ItemStack ({ name = oldnode_above .name }): get_definition ()
228
+ local olddef_above = core . registered_nodes [ oldnode_above .name ]
228
229
olddef_above = olddef_above or core .nodedef_default
229
230
230
231
if not olddef_above .buildable_to and not olddef_under .buildable_to then
231
- core .log (" info" , placer : get_player_name () .. " tried to place"
232
+ core .log (" info" , playername .. " tried to place"
232
233
.. " node in invalid position " .. core .pos_to_string (above )
233
234
.. " , replacing " .. oldnode_above .name )
234
235
return itemstack , false
@@ -243,17 +244,17 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2)
243
244
place_to = {x = under .x , y = under .y , z = under .z }
244
245
end
245
246
246
- if core .is_protected (place_to , placer : get_player_name () ) and
247
+ if core .is_protected (place_to , playername ) and
247
248
not minetest .check_player_privs (placer , " protection_bypass" ) then
248
- core .log (" action" , placer : get_player_name ()
249
+ core .log (" action" , playername
249
250
.. " tried to place " .. def .name
250
251
.. " at protected position "
251
252
.. core .pos_to_string (place_to ))
252
- core .record_protection_violation (place_to , placer : get_player_name () )
253
+ core .record_protection_violation (place_to , playername )
253
254
return itemstack
254
255
end
255
256
256
- core .log (" action" , placer : get_player_name () .. " places node "
257
+ core .log (" action" , playername .. " places node "
257
258
.. def .name .. " at " .. core .pos_to_string (place_to ))
258
259
259
260
local oldnode = core .get_node (place_to )
@@ -262,17 +263,17 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2)
262
263
-- Calculate direction for wall mounted stuff like torches and signs
263
264
if def .place_param2 ~= nil then
264
265
newnode .param2 = def .place_param2
265
- elseif (def .paramtype2 == ' wallmounted' or
266
- def .paramtype2 == ' colorwallmounted' ) and not param2 then
266
+ elseif (def .paramtype2 == " wallmounted" or
267
+ def .paramtype2 == " colorwallmounted" ) and not param2 then
267
268
local dir = {
268
269
x = under .x - above .x ,
269
270
y = under .y - above .y ,
270
271
z = under .z - above .z
271
272
}
272
273
newnode .param2 = core .dir_to_wallmounted (dir )
273
274
-- Calculate the direction for furnaces and chests and stuff
274
- elseif (def .paramtype2 == ' facedir' or
275
- def .paramtype2 == ' colorfacedir' ) and not param2 then
275
+ elseif (def .paramtype2 == " facedir" or
276
+ def .paramtype2 == " colorfacedir" ) and not param2 then
276
277
local placer_pos = placer :getpos ()
277
278
if placer_pos then
278
279
local dir = {
@@ -310,7 +311,6 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2)
310
311
end
311
312
312
313
-- Run script hook
313
- local _ , callback
314
314
for _ , callback in ipairs (core .registered_on_placenodes ) do
315
315
-- Deepcopy pos, node and pointed_thing because callback can modify them
316
316
local place_to_copy = {x = place_to .x , y = place_to .y , z = place_to .z }
@@ -451,8 +451,9 @@ function core.handle_node_drops(pos, drops, digger)
451
451
end
452
452
453
453
function core .node_dig (pos , node , digger )
454
- local def = ItemStack ({name = node .name }):get_definition ()
455
- if not def .diggable or (def .can_dig and not def .can_dig (pos ,digger )) then
454
+ local def = core .registered_nodes [node .name ]
455
+ if def and (not def .diggable or
456
+ (def .can_dig and not def .can_dig (pos , digger ))) then
456
457
core .log (" info" , digger :get_player_name () .. " tried to dig "
457
458
.. node .name .. " which is not diggable "
458
459
.. core .pos_to_string (pos ))
@@ -477,7 +478,7 @@ function core.node_dig(pos, node, digger)
477
478
478
479
local wdef = wielded :get_definition ()
479
480
local tp = wielded :get_tool_capabilities ()
480
- local dp = core .get_dig_params (def .groups , tp )
481
+ local dp = core .get_dig_params (def and def .groups , tp )
481
482
if wdef and wdef .after_use then
482
483
wielded = wdef .after_use (wielded , digger , node , dp ) or wielded
483
484
else
0 commit comments