destroy()
Syntax
destroy(pos)
destroy(pos, tool)
destroy(pos, tool, nbt)
Destroys the block like it was mined by a player. Add -1 for silk touch, and a positive number for fortune level. If tool is specified, and optionally its nbt, it will use that tool and will attempt to mine the block with this tool. If called without item context, this function, unlike harvest, will affect all kinds of blocks. If called with item in context, it will fail to break blocks that cannot be broken by a survival player.
Without item context it returns false if failed to destroy the block and
true if block breaking was successful. In item context, true means that
breaking item has no nbt to use, null indicating that the tool should be
considered broken in process, and nbt type value, for a resulting NBT tag on a
hypothetical tool. Its up to the programmer to use that nbt to apply it where it
belong
Throws unknown_item if tool doesn’t exist.
Here is a sample code that can be used to mine blocks using items in player
inventory, without using player context for mining. Obviously, in this case the
use of harvest would be much more applicable:
mine(x,y,z) ->
(
p = player();
slot = p~'selected_slot';
item_tuple = inventory_get(p, slot);
if (!item_tuple, destroy(x,y,z,'air'); return()); // empty hand, just break with 'air'
[item, count, tag] = item_tuple;
tag_back = destroy(x,y,z, item, tag);
if (tag_back == false, // failed to break the item
return(tag_back)
);
if (tag_back == true, // block broke, tool has no tag
return(tag_back)
);
if (tag_back == null, //item broke
delete(tag:'Damage');
inventory_set(p, slot, count-1, item, tag);
return(tag_back)
);
if (type(tag_back) == 'nbt', // item didn't break, here is the effective nbt
inventory_set(p, slot, count, item, tag_back);
return(tag_back)
);
print('How did we get here?');
)