1
- local S = minetest .get_translator (minetest .get_current_modname ())
1
+ local S = core .get_translator (core .get_current_modname ())
2
2
3
3
better_command_blocks = {}
4
4
@@ -22,7 +22,7 @@ local mesecons_rules = {
22
22
local already_run = {}
23
23
24
24
--- Gets a metadata string or a fallback falue
25
- --- @param meta minetest .MetaDataRef
25
+ --- @param meta core .MetaDataRef
26
26
--- @param key string
27
27
--- @param fallback any
28
28
--- @return any
@@ -42,13 +42,13 @@ local types = {
42
42
43
43
--- Opens command block formspec
44
44
--- @param pos vector.Vector
45
- --- @param node minetest .Node
46
- --- @param player minetest .Player
45
+ --- @param node core .Node
46
+ --- @param player core .Player
47
47
local function on_rightclick (pos , node , player )
48
- if not minetest .check_player_privs (player , " better_command_blocks" ) then return end
49
- local meta = minetest .get_meta (pos )
48
+ if not core .check_player_privs (player , " better_command_blocks" ) then return end
49
+ local meta = core .get_meta (pos )
50
50
local command = meta :get_string (" _command" )
51
- local group = minetest .get_item_group (node .name , " command_block" )
51
+ local group = core .get_item_group (node .name , " command_block" )
52
52
if not types [group ] then return end
53
53
local power = meta :get_string (" _power" ) == " false" and " Always Active" or " Needs Power"
54
54
local message = meta :get_string (" _message" )
@@ -60,28 +60,28 @@ local function on_rightclick(pos, node, player)
60
60
" field[6.5,0.5;2,1;delay;Delay (seconds);" ,delay ," ]" ,
61
61
" field_close_on_enter[delay;false]" ,
62
62
" button[8.5,0.5;1,1;set_delay;Set]" ,
63
- " field[0.5,2;8,1;command;Command;" ,minetest .formspec_escape (command )," ]" ,
63
+ " field[0.5,2;8,1;command;Command;" ,core .formspec_escape (command )," ]" ,
64
64
" field_close_on_enter[command;false]" ,
65
65
" button[8.5,2;1,1;set_command;Set]" ,
66
66
" button[0.5,3.5;3,1;type;" ,types [group ][1 ]," ]" ,
67
67
" button[3.5,3.5;3,1;conditional;" ,types [group ][2 ] and " Conditional" or " Unconditional" ," ]" ,
68
68
" button[6.5,3.5;3,1;power;" ,power ," ]" ,
69
- " textarea[0.5,5;9,1;;Previous output;" ,minetest .formspec_escape (message )," ]" ,
69
+ " textarea[0.5,5;9,1;;Previous output;" ,core .formspec_escape (message )," ]" ,
70
70
})
71
71
local player_name = player :get_player_name ()
72
- minetest .show_formspec (player_name , " better_command_blocks:" .. minetest .pos_to_string (pos ), formspec )
72
+ core .show_formspec (player_name , " better_command_blocks:" .. core .pos_to_string (pos ), formspec )
73
73
end
74
74
75
75
local command_block_itemstrings = {}
76
76
77
- minetest .register_on_player_receive_fields (function (player , formname , fields )
78
- if not minetest .check_player_privs (player , " better_command_blocks" ) then return end
77
+ core .register_on_player_receive_fields (function (player , formname , fields )
78
+ if not core .check_player_privs (player , " better_command_blocks" ) then return end
79
79
-- better_command_blocks:(x,y,z)
80
- local pos = minetest .string_to_pos (formname :match (" ^better_command_blocks:(%(%-?[%d%.]+,%-?[%d%.]+,%-?[%d%.]+%))$" ))
80
+ local pos = core .string_to_pos (formname :match (" ^better_command_blocks:(%(%-?[%d%.]+,%-?[%d%.]+,%-?[%d%.]+%))$" ))
81
81
if not pos then return end
82
- local meta = minetest .get_meta (pos )
83
- local node = minetest .get_node (pos )
84
- local group = minetest .get_item_group (node .name , " command_block" )
82
+ local meta = core .get_meta (pos )
83
+ local node = core .get_node (pos )
84
+ local group = core .get_item_group (node .name , " command_block" )
85
85
if group < 1 then return end
86
86
local show_formspec
87
87
if fields .command then
@@ -100,11 +100,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
100
100
if new_group == 4 or new_group == 7 then new_group = new_group - 3 end
101
101
local new_node = table .copy (node )
102
102
new_node .name = command_block_itemstrings [new_group ]
103
- minetest .swap_node (pos , new_node )
103
+ core .swap_node (pos , new_node )
104
104
if new_group == 2 or new_group == 5 then
105
- minetest .get_node_timer (pos ):start (1 )
105
+ core .get_node_timer (pos ):start (1 )
106
106
else
107
- minetest .get_node_timer (pos ):stop ()
107
+ core .get_node_timer (pos ):stop ()
108
108
end
109
109
if new_group == 2 or new_group == 5 then -- repeating
110
110
if (tonumber (meta :get_string (" _delay" )) or 1 ) < 1 then
@@ -121,7 +121,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
121
121
if new_group > 6 then new_group = new_group - 6 end
122
122
local new_node = table .copy (node )
123
123
new_node .name = command_block_itemstrings [new_group ]
124
- minetest .swap_node (pos , new_node )
124
+ core .swap_node (pos , new_node )
125
125
show_formspec = true
126
126
elseif fields .power then
127
127
local result = fields .power == " Needs Power" and " false" or " true"
@@ -134,21 +134,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
134
134
show_formspec = true
135
135
end
136
136
if show_formspec then
137
- on_rightclick (pos , minetest .get_node (pos ), player )
137
+ on_rightclick (pos , core .get_node (pos ), player )
138
138
end
139
139
end )
140
140
141
141
--- Checks for chain command blocks in front of the current command block
142
142
--- @param pos vector.Vector
143
143
local function check_for_chain (pos )
144
- local dir = minetest .facedir_to_dir (minetest .get_node (pos ).param2 )
144
+ local dir = core .facedir_to_dir (core .get_node (pos ).param2 )
145
145
local next = vector .add (dir , pos )
146
- local next_group = minetest .get_item_group (minetest .get_node (next ).name , " command_block" )
147
- local next_dir = minetest .facedir_to_dir (minetest .get_node (next ).param2 )
146
+ local next_group = core .get_item_group (core .get_node (next ).name , " command_block" )
147
+ local next_dir = core .facedir_to_dir (core .get_node (next ).param2 )
148
148
if next_group == 0 then return end
149
149
if dir ~= next_dir then return end
150
150
if next_group == 3 or next_group == 6 then -- chain
151
- local pos_string = minetest .pos_to_string (next )
151
+ local pos_string = core .pos_to_string (next )
152
152
if not already_run [pos_string ] then
153
153
better_command_blocks .run (next )
154
154
end
@@ -169,14 +169,14 @@ local function run_command(pos, meta, cmd_def, name, param, context)
169
169
end]]
170
170
meta :set_int (" _success" , (success == true and 1 ) or (success or 0 ))
171
171
meta :set_string (" _message" , message or " " )
172
- meta :set_int (" _count" , count )
172
+ meta :set_int (" _count" , count or - 1 )
173
173
if success == 1 and message and message ~= " " then
174
- if minetest .settings :get_bool (" better_command_blocks.command_block_output" , true )
175
- and minetest .settings :get_bool (" better_commands.send_command_feedback" , true ) then
176
- minetest .chat_send_all (minetest .colorize (" #aaaaaa" , S (
174
+ if core .settings :get_bool (" better_command_blocks.command_block_output" , true )
175
+ and core .settings :get_bool (" better_commands.send_command_feedback" , true ) then
176
+ core .chat_send_all (core .colorize (" #aaaaaa" , S (
177
177
" [@1: @2]" ,
178
178
S (" Command Block" ),
179
- minetest .strip_colors (message )
179
+ core .strip_colors (message )
180
180
)))
181
181
end
182
182
end
@@ -186,18 +186,18 @@ end
186
186
--- Triggers the command block
187
187
--- @param pos vector.Vector
188
188
function better_command_blocks .run (pos )
189
- local node = minetest .get_node (pos )
190
- local meta = minetest .get_meta (pos )
189
+ local node = core .get_node (pos )
190
+ local meta = core .get_meta (pos )
191
191
if meta :get_string (" _power" ) ~= " false" then
192
192
if meta :get_string (" _mesecons_active" ) ~= " true" then
193
193
return
194
194
end
195
195
end
196
- local group = minetest .get_item_group (node .name , " command_block" )
196
+ local group = core .get_item_group (node .name , " command_block" )
197
197
if group > 3 then -- conditional
198
- local dir = minetest .facedir_to_dir (node .param2 )
198
+ local dir = core .facedir_to_dir (node .param2 )
199
199
local previous = pos - dir
200
- if minetest .get_meta (previous ):get_int (" _success" ) < 1 then
200
+ if core .get_meta (previous ):get_int (" _success" ) < 1 then
201
201
if group == 6 then -- chain
202
202
check_for_chain (pos )
203
203
end
@@ -206,16 +206,16 @@ function better_command_blocks.run(pos)
206
206
end
207
207
208
208
if group == 3 or group == 6 then -- chain
209
- local pos_string = minetest .pos_to_string (pos )
209
+ local pos_string = core .pos_to_string (pos )
210
210
if already_run [pos_string ] then return end
211
211
already_run [pos_string ] = true
212
- minetest .after (0 , function () already_run [pos_string ] = nil end )
212
+ core .after (0 , function () already_run [pos_string ] = nil end )
213
213
end
214
214
215
215
local command = meta :get_string (" _command" )
216
216
if command ~= " " then
217
- local command_type , param = command :match (" (%S+)%s+(.*)$" )
218
- local def = minetest .registered_chatcommands [command_type ]
217
+ local command_type , param = command :match (" %/? (%S+)%s+(.*)$" )
218
+ local def = core .registered_chatcommands [command_type ]
219
219
if def then
220
220
local name = meta :get_string (" _name" )
221
221
-- Other mods' commands may require <name> to be a valid player name.
@@ -227,16 +227,15 @@ function better_command_blocks.run(pos)
227
227
executor = pos ,
228
228
pos = pos ,
229
229
command_block = true ,
230
- dir = minetest .facedir_to_dir (minetest .get_node (pos ).param2 ),
230
+ dir = core .facedir_to_dir (core .get_node (pos ).param2 ),
231
231
}
232
232
if better_commands then context = better_commands .complete_context (S (" Command Block" ), context ) end
233
233
if group == 2 or group == 5 then -- repeating
234
234
run_command (pos , meta , def , name , param , context )
235
- minetest .get_node_timer (pos ):start (tonumber (meta :get_string (" _delay" )) or 1 )
236
235
else
237
236
local delay = tonumber (meta :get_string (" _delay" )) or 0
238
237
if delay > 0 then
239
- minetest .after (delay , function ()
238
+ core .after (delay , function ()
240
239
run_command (pos , meta , def , name , param , context )
241
240
end )
242
241
else
@@ -245,15 +244,18 @@ function better_command_blocks.run(pos)
245
244
end
246
245
end
247
246
end
247
+ if group == 2 or group == 5 then -- repeating
248
+ core .get_node_timer (pos ):start (tonumber (meta :get_string (" _delay" )) or 1 )
249
+ end
248
250
end
249
251
250
252
--- Runs when activated by Mesecons
251
253
--- @param pos vector.Vector
252
254
local function mesecons_activate (pos )
253
- local meta = minetest .get_meta (pos )
255
+ local meta = core .get_meta (pos )
254
256
meta :set_string (" _mesecons_active" , " true" )
255
257
if meta :get_string (" _power" ) ~= " false" then
256
- local group = minetest .get_item_group (minetest .get_node (pos ).name , " command_block" )
258
+ local group = core .get_item_group (core .get_node (pos ).name , " command_block" )
257
259
if group ~= 3 and group ~= 6 then
258
260
better_command_blocks .run (pos )
259
261
end
@@ -263,18 +265,18 @@ end
263
265
--- Runs when deactivated by Mesecons
264
266
--- @param pos vector.Vector
265
267
local function mesecons_deactivate (pos )
266
- local meta = minetest .get_meta (pos )
268
+ local meta = core .get_meta (pos )
267
269
meta :set_string (" _mesecons_active" , " " )
268
270
if meta :get_string (" _power" ) ~= " false" then
269
- minetest .get_node_timer (pos ):stop ()
271
+ core .get_node_timer (pos ):stop ()
270
272
end
271
273
end
272
274
273
275
for i , command_block in pairs (command_blocks ) do
274
276
local name , desc = unpack (command_block )
275
277
local def = {
276
278
description = desc ,
277
- groups = {cracky = 1 , command_block = i , creative_breakable = 1 , mesecon_effector_off = 1 , mesecon_effector_on = 1 },
279
+ groups = {oddly_breakable_by_hand = 3 , cracky = 3 , command_block = i , creative_breakable = 1 , mesecon_effector_off = 1 , mesecon_effector_on = 1 },
278
280
tiles = {
279
281
{name = " better_command_blocks_" .. name .. " _top.png" , animation = anim },
280
282
{name = " better_command_blocks_" .. name .. " _bottom.png" , animation = anim },
@@ -296,20 +298,20 @@ for i, command_block in pairs(command_blocks) do
296
298
_mcl_blast_resistance = 3600000 ,
297
299
_mcl_hardness = - 1 ,
298
300
can_dig = function (pos , player )
299
- return minetest .check_player_privs (player , " better_command_blocks" )
301
+ return core .check_player_privs (player , " better_command_blocks" )
300
302
end ,
301
303
drop = " " ,
302
304
on_place = function (itemstack , player , pointed_thing )
303
- if minetest .check_player_privs (player , " better_command_blocks" ) then
304
- return minetest .item_place (itemstack , player , pointed_thing )
305
+ if core .check_player_privs (player , " better_command_blocks" ) then
306
+ return core .item_place (itemstack , player , pointed_thing )
305
307
end
306
308
end ,
307
309
after_place_node = function (pos , placer , itemstack , pointed_thing )
308
- minetest .get_meta (pos ):set_string (" _player" , placer :get_player_name ())
310
+ core .get_meta (pos ):set_string (" _player" , placer :get_player_name ())
309
311
end
310
312
}
311
313
local itemstring = " better_command_blocks:" .. name .. " _command_block"
312
- minetest .register_node (itemstring , def )
314
+ core .register_node (itemstring , def )
313
315
command_block_itemstrings [i ] = itemstring
314
316
315
317
local conditional_def = table .copy (def )
@@ -325,15 +327,15 @@ for i, command_block in pairs(command_blocks) do
325
327
{name = " better_command_blocks_" .. name .. " _back.png" , animation = anim },
326
328
}
327
329
itemstring = " better_command_blocks:" .. name .. " _command_block_conditional"
328
- minetest .register_node (itemstring , conditional_def )
330
+ core .register_node (itemstring , conditional_def )
329
331
command_block_itemstrings [i + 3 ] = itemstring
330
332
end
331
333
332
- minetest .register_alias (" better_command_blocks:command_block" , " better_command_blocks:impulse_command_block" )
333
- minetest .register_alias (" better_command_blocks:command_block_conditional" , " better_command_blocks:impulse_command_block_conditional" )
334
+ core .register_alias (" better_command_blocks:command_block" , " better_command_blocks:impulse_command_block" )
335
+ core .register_alias (" better_command_blocks:command_block_conditional" , " better_command_blocks:impulse_command_block_conditional" )
334
336
335
337
--- @diagnostic disable-next-line : missing-fields
336
- minetest .register_privilege (" better_command_blocks" , {
338
+ core .register_privilege (" better_command_blocks" , {
337
339
description = S (" Allows players to use Better Command Blocks" ),
338
340
give_to_singleplayer = false ,
339
341
give_to_admin = true
0 commit comments