SuppressionSpanHelper class
Пакет: com.hypixel.hytale.server.spawning.suppression
Файл: com/hypixel/hytale/server/spawning/suppression/SuppressionSpanHelper.java
Поля (19)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
ThreadLocal<ArrayDeque<SuppressionSpanHelper.Span>> |
SPAN_POOL |
|
private int |
max |
|
private int |
min |
|
ArrayDeque |
var1 |
|
int |
var10 |
|
SuppressionSpanHelper.Span |
var11 |
|
SuppressionSpanHelper.Span |
var12 |
|
SuppressionSpanHelper.Span |
var13 |
|
int |
var2 |
|
ArrayDeque |
var3 |
|
SuppressionSpanHelper.Span |
var3 |
|
|
var3 |
|
SuppressionSpanHelper.Span |
var3 |
|
SuppressionSpanHelper.Span |
var3 |
|
List |
var4 |
|
SuppressionSpanHelper.Span |
var5 |
|
boolean |
var6 |
|
|
var6 |
|
int |
var9 |
Методы (15)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
private |
Spanprivate Span() |
public |
int |
adjustSpawnRangeMaxint adjustSpawnRangeMax(int var1, int var2) |
public |
int |
adjustSpawnRangeMinint adjustSpawnRangeMin(int var1) |
|
public void |
expandTopublic void expandTo(int var1) |
|
|
for for(ChunkSuppressionEntry.SuppressionSpan var8 : var4) |
abstract |
|
for for(var3 = this.optimisedSuppressionSpans.get(this.currentSpanIndex) |
|
|
if if(var2 != null) |
|
|
if if(!var6) |
|
|
if if(this.currentSpanIndex < var2) |
|
|
if if(var2 < var3.min) |
|
public boolean |
includespublic boolean includes(int var1) |
|
public void |
initpublic void init(int var1, int var2) |
public |
void |
optimiseSuppressedSpansvoid optimiseSuppressedSpans(int var1, @Nullable ChunkSuppressionEntry var2) |
public |
void |
resetvoid reset() |
|
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;
}
}
}