@@ -995,21 +995,22 @@ void finish_bulk_light_update(Map *map, mapblock_v3 minblock,
995
995
// --- STEP 2: Get all newly inserted light sources
996
996
997
997
// For each block:
998
- for (s16 b_x = minblock.X ; b_x <= maxblock.X ; b_x++)
999
- for (s16 b_y = minblock.Y ; b_y <= maxblock.Y ; b_y++)
1000
- for (s16 b_z = minblock.Z ; b_z <= maxblock.Z ; b_z++) {
1001
- const v3s16 blockpos (b_x, b_y, b_z);
998
+ v3s16 blockpos;
999
+ v3s16 relpos;
1000
+ for (blockpos.X = minblock.X ; blockpos.X <= maxblock.X ; blockpos.X ++)
1001
+ for (blockpos.Y = minblock.Y ; blockpos.Y <= maxblock.Y ; blockpos.Y ++)
1002
+ for (blockpos.Z = minblock.Z ; blockpos.Z <= maxblock.Z ; blockpos.Z ++) {
1002
1003
MapBlock *block = map->getBlockNoCreateNoEx (blockpos);
1003
1004
if (!block || block->isDummy ())
1004
1005
// Skip not existing blocks
1005
1006
continue ;
1006
1007
// For each node in the block:
1007
- for (s32 x = 0 ; x < MAP_BLOCKSIZE; x++)
1008
- for (s32 z = 0 ; z < MAP_BLOCKSIZE; z++)
1009
- for (s32 y = 0 ; y < MAP_BLOCKSIZE; y++) {
1010
- v3s16 relpos (x, y, z);
1011
- MapNode node = block->getNodeNoCheck (x, y, z, &is_valid);
1008
+ for (relpos.X = 0 ; relpos.X < MAP_BLOCKSIZE; relpos.X ++)
1009
+ for (relpos.Z = 0 ; relpos.Z < MAP_BLOCKSIZE; relpos.Z ++)
1010
+ for (relpos.Y = 0 ; relpos.Y < MAP_BLOCKSIZE; relpos.Y ++) {
1011
+ MapNode node = block->getNodeNoCheck (relpos.X , relpos.Y , relpos.Y , &is_valid);
1012
1012
const ContentFeatures &f = ndef->get (node);
1013
+
1013
1014
// For each light bank
1014
1015
for (size_t b = 0 ; b < 2 ; b++) {
1015
1016
LightBank bank = banks[b];
@@ -1088,14 +1089,15 @@ void blit_back_with_light(ServerMap *map, MMVManip *vm,
1088
1089
}
1089
1090
1090
1091
// --- STEP 2: Get nodes from borders to unlight
1092
+ v3s16 blockpos;
1093
+ v3s16 relpos;
1091
1094
1092
1095
// In case there are unloaded holes in the voxel manipulator
1093
1096
// unlight each block.
1094
1097
// For each block:
1095
- for (s16 b_x = minblock.X ; b_x <= maxblock.X ; b_x++)
1096
- for (s16 b_y = minblock.Y ; b_y <= maxblock.Y ; b_y++)
1097
- for (s16 b_z = minblock.Z ; b_z <= maxblock.Z ; b_z++) {
1098
- v3s16 blockpos (b_x, b_y, b_z);
1098
+ for (blockpos.X = minblock.X ; blockpos.X <= maxblock.X ; blockpos.X ++)
1099
+ for (blockpos.Y = minblock.Y ; blockpos.Y <= maxblock.Y ; blockpos.Y ++)
1100
+ for (blockpos.Z = minblock.Z ; blockpos.Z <= maxblock.Z ; blockpos.Z ++) {
1099
1101
MapBlock *block = map->getBlockNoCreateNoEx (blockpos);
1100
1102
if (!block || block->isDummy ())
1101
1103
// Skip not existing blocks.
@@ -1104,15 +1106,17 @@ void blit_back_with_light(ServerMap *map, MMVManip *vm,
1104
1106
// For each border of the block:
1105
1107
for (const VoxelArea &a : block_pad) {
1106
1108
// For each node of the border:
1107
- for (s32 x = a.MinEdge .X ; x <= a.MaxEdge .X ; x ++)
1108
- for (s32 z = a.MinEdge .Z ; z <= a.MaxEdge .Z ; z ++)
1109
- for (s32 y = a.MinEdge .Y ; y <= a.MaxEdge .Y ; y ++) {
1110
- v3s16 relpos (x, y, z);
1109
+ for (relpos. X = a.MinEdge .X ; relpos. X <= a.MaxEdge .X ; relpos. X ++)
1110
+ for (relpos. Z = a.MinEdge .Z ; relpos. Z <= a.MaxEdge .Z ; relpos. Z ++)
1111
+ for (relpos. Y = a.MinEdge .Y ; relpos. Y <= a.MaxEdge .Y ; relpos. Y ++) {
1112
+
1111
1113
// Get old and new node
1112
- MapNode oldnode = block->getNodeNoCheck (x, y, z , &is_valid);
1114
+ MapNode oldnode = block->getNodeNoCheck (relpos. X , relpos. Y , relpos. Z , &is_valid);
1113
1115
const ContentFeatures &oldf = ndef->get (oldnode);
1114
1116
MapNode newnode = vm->getNodeNoExNoEmerge (relpos + offset);
1115
- const ContentFeatures &newf = ndef->get (newnode);
1117
+ const ContentFeatures &newf = oldnode == newnode ? oldf :
1118
+ ndef->get (newnode);
1119
+
1116
1120
// For each light bank
1117
1121
for (size_t b = 0 ; b < 2 ; b++) {
1118
1122
LightBank bank = banks[b];
@@ -1229,13 +1233,14 @@ void repair_block_light(ServerMap *map, MapBlock *block,
1229
1233
1230
1234
// For each border of the block:
1231
1235
for (const VoxelArea &a : block_pad) {
1236
+ v3s16 relpos;
1232
1237
// For each node of the border:
1233
- for (s32 x = a.MinEdge .X ; x <= a.MaxEdge .X ; x ++)
1234
- for (s32 z = a.MinEdge .Z ; z <= a.MaxEdge .Z ; z ++)
1235
- for (s32 y = a.MinEdge .Y ; y <= a.MaxEdge .Y ; y ++) {
1236
- v3s16 relpos (x, y, z);
1238
+ for (relpos. X = a.MinEdge .X ; relpos. X <= a.MaxEdge .X ; relpos. X ++)
1239
+ for (relpos. Z = a.MinEdge .Z ; relpos. Z <= a.MaxEdge .Z ; relpos. Z ++)
1240
+ for (relpos. Y = a.MinEdge .Y ; relpos. Y <= a.MaxEdge .Y ; relpos. Y ++) {
1241
+
1237
1242
// Get node
1238
- MapNode node = block->getNodeNoCheck (x, y, z , &is_valid);
1243
+ MapNode node = block->getNodeNoCheck (relpos. X , relpos. Y , relpos. Z , &is_valid);
1239
1244
const ContentFeatures &f = ndef->get (node);
1240
1245
// For each light bank
1241
1246
for (size_t b = 0 ; b < 2 ; b++) {
0 commit comments