1
1
package net .countercraft .movecraft .repair ;
2
2
3
- import java .util .HashSet ;
4
- import java .util .Queue ;
5
- import java .util .Set ;
3
+ import java .util .*;
6
4
import java .util .concurrent .ConcurrentLinkedQueue ;
7
5
8
6
import org .bukkit .Bukkit ;
@@ -21,20 +19,29 @@ public void run() {
21
19
long start = System .currentTimeMillis ();
22
20
23
21
Set <Repair > completed = new HashSet <>();
24
- Set <Repair > executed = new HashSet <>();
25
- while (System .currentTimeMillis () - start < Config .RepairMaxTickTime ) {
26
- Repair repair = repairs .peek ();
22
+ List <Repair > executed = new ArrayList <>(repairs .size ());
23
+ List <Repair > waiting = new ArrayList <>(repairs .size ());
24
+ long time = System .currentTimeMillis ();
25
+ while (time - start < Config .RepairMaxTickTime ) {
26
+ Repair repair = repairs .poll ();
27
27
if (repair == null )
28
28
break ; // No repairs, jump out
29
29
30
- if (repair .run ()) {
31
- // Repair placed at least a block, return to back of queue
32
- executed .add (repairs .poll ());
33
- } // Else leave at top of queue
30
+ if (repair .run (time )) {
31
+ // Repair placed at least a block, put it back at the end
32
+ executed .add (repair );
33
+ } else {
34
+ // Put back at the top of the queue
35
+ waiting .add (repair );
36
+ }
34
37
35
- if (repair .isDone ())
38
+ if (repair .isDone ()) {
36
39
completed .add (repair );
40
+ }
41
+
42
+ time = System .currentTimeMillis ();
37
43
}
44
+ repairs .addAll (waiting );
38
45
repairs .addAll (executed );
39
46
40
47
for (Repair repair : completed ) {
0 commit comments