Span class

Пакет: com.hypixel.hytale.server.spawning.suppression

Файл: com/hypixel/hytale/server/spawning/suppression/SuppressionSpanHelper.java

Поля (2)

МодификаторыТипИмя
private int max
private int min

Методы (4)

МодификаторыВозвратСигнатура
public void expandTopublic void expandTo(int var1)
public boolean includespublic boolean includes(int var1)
public void initpublic void init(int var1, int var2)
public void resetpublic void reset()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.suppression;

class="kw">import com.hypixel.hytale.server.spawning.suppression.component.ChunkSuppressionEntry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.ArrayDeque;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class SuppressionSpanHelper {
   class="kw">private class="kw">static class="kw">final ThreadLocal<ArrayDeque<SuppressionSpanHelper.Span>> SPAN_POOL = ThreadLocal.withInitial(ArrayDeque::new);
   class="kw">private class="kw">final List<SuppressionSpanHelper.Span> optimisedSuppressionSpans = new ObjectArrayList();
   class="kw">private int currentSpanIndex = 0;

   class="kw">public SuppressionSpanHelper() {
   }

   class="kw">public void optimiseSuppressedSpans(int var1, @Nullable ChunkSuppressionEntry var2) {
      if (var2 != null) {
         ArrayDeque var3 = SPAN_POOL.get();
         List var4 = var2.getSuppressionSpans();
         SuppressionSpanHelper.Span var5 = allocateSpan(var3);
         var5.init(0, 0);
         this.optimisedSuppressionSpans.add(var5);
         boolean var6 = false;

         for (ChunkSuppressionEntry.SuppressionSpan var8 : var4) {
            if (var8.includesRole(var1)) {
               var6 = true;
               int var9 = var8.getMinY();
               int var10 = var8.getMaxY();
               SuppressionSpanHelper.Span var11 = this.optimisedSuppressionSpans.getLast();
               if (var11.includes(var9)) {
                  if (!var11.includes(var10)) {
                     var11.expandTo(var10);
                  }
               } else {
                  SuppressionSpanHelper.Span var12 = allocateSpan(var3);
                  var12.init(var9, var10);
                  this.optimisedSuppressionSpans.add(var12);
               }
            }
         }

         if (!var6) {
            SuppressionSpanHelper.Span var13 = this.optimisedSuppressionSpans.removeFirst();
            var13.reset();
            var3.push(var13);
         }
      }
   }

   class="kw">public int adjustSpawnRangeMin(int var1) {
      if (this.optimisedSuppressionSpans.isEmpty()) {
         class="kw">return var1;
      }

      int var2 = this.optimisedSuppressionSpans.size() - 1;

      SuppressionSpanHelper.Span var3;
      for (var3 = this.optimisedSuppressionSpans.get(this.currentSpanIndex);
         var1 >= var3.max && this.currentSpanIndex < var2;
         var3 = this.optimisedSuppressionSpans.get(this.currentSpanIndex)
      ) {
         this.currentSpanIndex++;
      }

      if (var3.includes(var1)) {
         if (this.currentSpanIndex < var2) {
            this.currentSpanIndex++;
         }

         class="kw">return var3.max;
      } else {
         class="kw">return var1;
      }
   }

   class="kw">public int adjustSpawnRangeMax(int var1, int var2) {
      if (this.optimisedSuppressionSpans.isEmpty()) {
         class="kw">return var2;
      } else {
         SuppressionSpanHelper.Span var3 = this.optimisedSuppressionSpans.get(this.currentSpanIndex);
         if (var2 < var3.min) {
            class="kw">return var2;
         } else if (var3.includes(var2)) {
            class="kw">return var3.min;
         } else {
            class="kw">return var1 < var3.min && var2 >= var3.max ? var3.min : var2;
         }
      }
   }

   class="kw">public void reset() {
      ArrayDeque var1 = SPAN_POOL.get();

      for (int var2 = this.optimisedSuppressionSpans.size() - 1; var2 >= 0; var2--) {
         SuppressionSpanHelper.Span var3 = this.optimisedSuppressionSpans.remove(var2);
         var3.reset();
         var1.push(var3);
      }

      this.currentSpanIndex = 0;
   }

   @Nonnull
   class="kw">private class="kw">static SuppressionSpanHelper.Span allocateSpan(@Nonnull ArrayDeque<SuppressionSpanHelper.Span> var0) {
      class="kw">return var0.isEmpty() ? new SuppressionSpanHelper.Span() : var0.pop();
   }

   class="kw">private class="kw">static class Span {
      class="kw">private int min = -1;
      class="kw">private int max = -1;

      class="kw">private Span() {
      }

      class="kw">public void init(int var1, int var2) {
         this.min = var1;
         this.max = var2;
      }

      class="kw">public void expandTo(int var1) {
         this.max = var1;
      }

      class="kw">public boolean includes(int var1) {
         class="kw">return var1 >= this.min && var1 <= this.max;
      }

      class="kw">public void reset() {
         this.min = this.max = -1;
      }
   }
}