3 #include "server/server_item.h"
4 #include "server/server_node.h"
5 #include "server/server_terrain.h"
6 #include "server/tree_physics.h"
8 static void use_dig(__attribute__((unused)) ServerPlayer *player, ItemStack *stack, bool pointed, v3s32 pos)
14 TerrainChunk *chunk = terrain_get_chunk_nodep(server_terrain, pos, &offset, CHUNK_MODE_PASSIVE);
17 TerrainChunkMeta *meta = chunk->extra;
18 assert(pthread_rwlock_wrlock(&chunk->lock) == 0);
20 TerrainNode *node = &chunk->data[offset.x][offset.y][offset.z];
22 if (!(node_def[node->type].dig_class & item_def[stack->type].dig_class)) {
23 pthread_rwlock_unlock(&chunk->lock);
27 *node = server_node_create(NODE_AIR);
28 meta->tgsb.raw.nodes[offset.x][offset.y][offset.z] = STAGE_PLAYER;
30 pthread_rwlock_unlock(&chunk->lock);
32 server_terrain_lock_and_send_chunk(chunk);
34 // destroy trees if they have no connection to ground
35 // todo: run in seperate thread to not block client connection
36 tree_physics_check(pos);
39 ServerItemDef server_item_def[COUNT_ITEM] = {