1717
1818import java .util .Locale ;
1919import java .util .concurrent .ConcurrentLinkedQueue ;
20- import java .util .concurrent .atomic .AtomicBoolean ;
2120import java .util .concurrent .atomic .AtomicLong ;
2221
2322import com .azuredoom .levelingcore .LevelingCore ;
@@ -37,12 +36,12 @@ public class MobLevelSystem extends EntityTickingSystem<EntityStore> {
3736
3837 private final ConcurrentLinkedQueue <PendingUpdate > pending = new ConcurrentLinkedQueue <>();
3938
40- private final AtomicBoolean drainScheduled = new AtomicBoolean (false );
41-
4239 private static final int MAX_UPDATES_PER_DRAIN = 1000 ;
4340
4441 private final Config <GUIConfig > config ;
4542
43+ private boolean drainScheduled = false ;
44+
4645 public MobLevelSystem (Config <GUIConfig > config ) {
4746 this .config = config ;
4847 }
@@ -95,65 +94,64 @@ public void tick(
9594
9695 data .lastRecalcMs = nowMs ;
9796
98- pending .add (new PendingUpdate (npc , transform , store , data ));
97+ pending .add (new PendingUpdate (npc , transform , data ));
9998
100- if (drainScheduled .compareAndSet (false , true )) {
101- store .getExternalData ().getWorld ().execute (() -> drainPending (store ));
99+ if (!drainScheduled ) {
100+ drainScheduled = true ;
101+ drainPending (store );
102102 }
103103 }
104104
105105 private void drainPending (@ NonNullDecl Store <EntityStore > store ) {
106- store .getExternalData ().getWorld ().execute (() -> {
107- try {
108- var mobMaxLevel = computeMobMaxLevel ();
106+ try {
107+ var mobMaxLevel = computeMobMaxLevel ();
109108
110- var processed = 0 ;
111- PendingUpdate u ;
109+ var processed = 0 ;
110+ PendingUpdate u ;
112111
113- while (processed < MAX_UPDATES_PER_DRAIN && (u = pending .poll ()) != null ) {
114- var npc = u .npc ();
115- var transform = u .transform ();
116- var store1 = u .store ();
117- var data = u .data ();
112+ while (processed < MAX_UPDATES_PER_DRAIN && (u = pending .poll ()) != null ) {
113+ var npc = u .npc ();
114+ var transform = u .transform ();
115+ var data = u .data ();
118116
119- if (data .locked )
120- continue ;
117+ if (data .locked )
118+ continue ;
121119
122- var newLevel = Math .max (
123- 1 ,
124- Math .min (mobMaxLevel , MobLevelingUtil .computeDynamicLevel (config , npc , transform , store1 ))
125- );
120+ var newLevel = Math .max (
121+ 1 ,
122+ Math .min (mobMaxLevel , MobLevelingUtil .computeDynamicLevel (config , npc , transform , store ))
123+ );
126124
127- if (newLevel != data .level ) {
128- data .level = newLevel ;
129- }
125+ if (newLevel != data .level ) {
126+ data .level = newLevel ;
127+ }
130128
131- if (!data .locked ) {
132- data .level = Math .max (
133- 1 ,
134- Math .min (
135- mobMaxLevel ,
136- MobLevelingUtil .computeDynamicLevel (config , npc , transform , store1 )
137- )
138- );
139- }
129+ if (!data .locked ) {
130+ data .level = Math .max (
131+ 1 ,
132+ Math .min (
133+ mobMaxLevel ,
134+ MobLevelingUtil .computeDynamicLevel (config , npc , transform , store )
135+ )
136+ );
137+ }
140138
141- if (data .level != data .lastAppliedLevel ) {
142- if (MobLevelingUtil .applyMobScaling (config , npc , data .level , store1 )) {
143- data .lastAppliedLevel = data .level ;
144- }
139+ if (data .level != data .lastAppliedLevel ) {
140+ if (MobLevelingUtil .applyMobScaling (config , npc , data .level , store )) {
141+ data .lastAppliedLevel = data .level ;
145142 }
146-
147- processed ++;
148143 }
149- } finally {
150- drainScheduled .set (false );
151144
152- if (!pending .isEmpty () && drainScheduled .compareAndSet (false , true )) {
153- store .getExternalData ().getWorld ().execute (() -> drainPending (store ));
154- }
145+ processed ++;
146+ }
147+ } finally {
148+ if (!pending .isEmpty ()) {
149+ drainScheduled = true ;
150+ drainPending (store );
151+ } else {
152+ drainScheduled = false ;
155153 }
156- });
154+ }
157155 }
158156
159157 private int computeMobMaxLevel () {
0 commit comments