@@ -6,6 +6,10 @@ const spiralloop = require('spiralloop')
6
6
const { level } = require ( 'prismarine-provider-anvil' )
7
7
const nbt = require ( 'prismarine-nbt' )
8
8
9
+ function sleep ( ms = 0 ) {
10
+ return new Promise ( resolve => setTimeout ( resolve , ms ) )
11
+ }
12
+
9
13
module . exports . server = async function ( serv , options = { } ) {
10
14
const { version, worldFolder, generation = { name : 'diamond_square' , options : { worldHeight : 80 } } } = options
11
15
const { registry } = serv
@@ -236,7 +240,7 @@ module.exports.player = function (player, serv, settings) {
236
240
return t
237
241
}
238
242
239
- async function sendNearbyChunks ( view ) {
243
+ async function sendNearbyChunks ( view , group ) {
240
244
player . lastPositionChunkUpdated = player . position
241
245
const playerChunkX = Math . floor ( player . position . x / 16 )
242
246
const playerChunkZ = Math . floor ( player . position . z / 16 )
@@ -246,17 +250,18 @@ module.exports.player = function (player, serv, settings) {
246
250
. filter ( ( [ x , z ] ) => Math . abs ( x - playerChunkX ) > view || Math . abs ( z - playerChunkZ ) > view )
247
251
. forEach ( ( [ x , z ] ) => player . _unloadChunk ( x , z ) )
248
252
249
- const promises = [ ]
250
- spiral ( [ view * 2 , view * 2 ] )
253
+ return spiral ( [ view * 2 , view * 2 ] )
251
254
. map ( t => ( {
252
255
chunkX : playerChunkX + t [ 0 ] - view ,
253
256
chunkZ : playerChunkZ + t [ 1 ] - view
254
257
} ) )
255
258
. filter ( ( { chunkX, chunkZ } ) => serv . _worldLoadPlayerChunk ( chunkX , chunkZ , player ) )
256
- . forEach ( ( { chunkX, chunkZ } ) => {
257
- promises . push ( player . world . getColumn ( chunkX , chunkZ ) . then ( ( column ) => player . sendChunk ( chunkX , chunkZ , column ) ) )
258
- } )
259
- return Promise . all ( promises )
259
+ . reduce ( ( acc , { chunkX, chunkZ } ) => {
260
+ const p = acc
261
+ . then ( ( ) => player . world . getColumn ( chunkX , chunkZ ) )
262
+ . then ( ( column ) => player . sendChunk ( chunkX , chunkZ , column ) )
263
+ return group ? p . then ( ( ) => sleep ( 5 ) ) : p
264
+ } , Promise . resolve ( ) )
260
265
}
261
266
262
267
player . worldSendInitialChunks = ( ) => {
0 commit comments