@@ -37,53 +37,48 @@ private void remove(ChunkPos c)
3737 }
3838 private void request (ChunkPos c )
3939 {
40- ChunkPos s ;
41- int cnt = 0 ;
42- do
40+ ChunkPos s = new ChunkPos ( lastS . x ()+ randomChunkRange + 1 , lastS . z ()+ randomChunkRange + 1 ) ;
41+ List < ChunkPos > posList = new ArrayList <>(( randomChunkRange * 2 + 1 )*( randomChunkRange * 2 + 1 )) ;
42+ for ( int x =- randomChunkRange ; x <= randomChunkRange ; x ++)
4343 {
44- if ( cnt > 1000 )
44+ for ( int z =- randomChunkRange ; z <= randomChunkRange ; z ++ )
4545 {
46- int maxX = Integer . MIN_VALUE ;
47- int maxZ = Integer . MIN_VALUE ;
48- for ( ChunkPos chunkPos : c2sMap . values ())
49- {
50- maxX = Math . max ( maxX , chunkPos . x ());
51- maxZ = Math . max ( maxZ , chunkPos . z ());
52- }
53- s = new ChunkPos ( maxX + 1 , maxZ + 1 );
54- System . out . println ( "Infinite loop warning: request" ) ;
46+ posList . add ( new ChunkPos ( lastS . x ()+ x , lastS . z ()+ z )) ;
47+ }
48+ }
49+ Collections . shuffle ( posList );
50+ for ( ChunkPos pos : posList )
51+ {
52+ if (! s2cMap . containsKey ( pos ))
53+ {
54+ s = pos ;
5555 break ;
5656 }
57- s = new ChunkPos (lastS .x () + getRandom (randomChunkRange ), lastS .z () + getRandom (randomChunkRange ));
58- cnt ++;
5957 }
60- while (c2sMap .containsValue (s ));
6158 put (s ,c );
6259 }
6360 private ChunkPos init (ChunkPos s )
6461 {
65- if (c2sMap .containsValue (s ))return s2cMap .get (s );
66- ChunkPos c ;
67- int cnt =0 ;
68- do
62+ if (s2cMap .containsKey (s ))return s2cMap .get (s );
63+ ChunkPos c =new ChunkPos (s .x ()+randomChunkRange +1 ,s .z ()+randomChunkRange +1 );
64+ List <ChunkPos > posList =new ArrayList <>((randomChunkRange *2 +1 )*(randomChunkRange *2 +1 ));
65+ for (int x =-randomChunkRange ;x <=randomChunkRange ;x ++)
66+ {
67+ for (int z =-randomChunkRange ;z <=randomChunkRange ;z ++)
68+ {
69+ posList .add (new ChunkPos (s .x ()+x ,s .z ()+z ));
70+ }
71+ }
72+ Collections .shuffle (posList );
73+ for (ChunkPos pos :posList )
6974 {
70- if (cnt > 1000 )
75+ if (! c2sMap . containsKey ( pos ) )
7176 {
72- int maxX =Integer .MIN_VALUE ;
73- int maxZ =Integer .MIN_VALUE ;
74- for (ChunkPos chunkPos :c2sMap .keySet ())
75- {
76- maxX =Math .max (maxX ,chunkPos .x ());
77- maxZ =Math .max (maxZ ,chunkPos .z ());
78- }
79- c =new ChunkPos (maxX +1 , maxZ +1 );
80- System .out .println ("Infinite loop warning: init" );
77+ c =pos ;
8178 break ;
8279 }
83- c = new ChunkPos (s .x () + getRandom (randomChunkRange ), s .z () + getRandom (randomChunkRange ));
84- cnt ++;
8580 }
86- while ( c2sMap . containsKey ( c ));
81+ //TODO but why do we need this??
8782 put (s ,c );
8883 return c ;
8984 }
0 commit comments