WildernessTracker class
Пакет: com.hypixel.hytale.builtin.adventure.wilderness.resource
Файл: com/hypixel/hytale/builtin/adventure/wilderness/resource/WildernessTracker.java
implements: Resource<ChunkStore>
Поля (56)
| Модификаторы | Тип | Имя |
|---|---|---|
|
CONTINUE,
CONSUME, |
EXIT |
|
protected static final ThreadLocal<WildernessTracker.Recycler> |
RESOURCE |
final |
int |
VECTOR_POOL_CAPACITY |
|
|
break |
|
|
break |
|
private final Vector3i |
coords |
|
private int |
count |
|
protected Vector3i |
removed |
|
|
return |
|
Vector3i |
var1 |
|
|
var1 |
|
int |
var10 |
|
int |
var10 |
|
double |
var10 |
|
int |
var11 |
|
int |
var11 |
|
int |
var12 |
|
int |
var12 |
|
double |
var12 |
|
int |
var13 |
|
int |
var13 |
|
double |
var14 |
|
double |
var17 |
|
int |
var2 |
|
int |
var2 |
|
double |
var20 |
|
double |
var23 |
|
int |
var3 |
|
int |
var3 |
|
int |
var4 |
|
int |
var4 |
|
Vector3i |
var4 |
|
Vector3i |
var4 |
|
int |
var5 |
|
int |
var5 |
|
int |
var6 |
|
int |
var6 |
|
int |
var6 |
|
int |
var6 |
|
int |
var6 |
|
int |
var6 |
|
int |
var7 |
|
int |
var7 |
|
int |
var7 |
|
int |
var7 |
|
WildernessTracker.Recycler |
var7 |
|
int |
var8 |
|
int |
var8 |
|
int |
var8 |
|
int |
var8 |
|
int |
var8 |
|
int |
var8 |
|
int |
var9 |
|
int |
var9 |
|
Vector3i |
var9 |
|
|
var9 |
Методы (34)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
protected |
Counterprotected Counter(@Nonnull Vector3i var1) |
|
|
Iterator Iterator() |
|
protected |
Recyclerprotected Recycler() |
public |
void |
addHomeChunkvoid addHomeChunk(int var1, int var2, int var3, boolean var4) |
|
public WildernessTracker.Counter |
applypublic WildernessTracker.Counter apply(@Nonnull Vector3i var1, @Nullable WildernessTracker.Counter var2) |
public |
void |
collectHomeChunksvoid collectHomeChunks(@Nonnull Vector3i var1, int var2, int var3, int var4, @Nonnull Collection<Vector3i> var5) |
public |
void |
collectHomeChunksvoid collectHomeChunks(@Nonnull Vector3d var1, int var2, int var3, int var4, @Nonnull Collection<Vector3i> var5) |
public |
void |
collectHomeChunksvoid collectHomeChunks(int var1, int var2, int var3, int var4, int var5, int var6, @Nonnull Collection<Vector3i> var7) |
public |
void |
collectWildernessChunksvoid collectWildernessChunks(@Nonnull Vector3i var1, int var2, int var3, int var4, @Nonnull Collection<Vector3i> var5) |
public |
void |
collectWildernessChunksvoid collectWildernessChunks(@Nonnull Vector3d var1, int var2, int var3, int var4, @Nonnull Collection<Vector3i> var5) |
public |
void |
collectWildernessChunksvoid collectWildernessChunks(int var1, int var2, int var3, int var4, int var5, int var6, @Nonnull Collection<Vector3i> var7) |
|
protected static WildernessTracker.Counter |
decrementprotected static WildernessTracker.Counter decrement(@Nonnull Vector3i var0, @Nullable WildernessTracker.Counter var1) |
|
|
for for(int var16 = -var5; var16 <= var5; var16++) |
|
|
for for(int var19 = -var6; var19 <= var6; var19++) |
|
|
for for(int var22 = -var4; var22 <= var4; var22++) |
public |
long |
generationlong generation() |
static |
ResourceType<ChunkStore, WildernessTracker> |
getResourceTypeResourceType<ChunkStore, WildernessTracker> getResourceType() |
|
|
if if(var5 != -1 && var6 != -1) |
|
|
if if(var5 != -1 && var6 != -1) |
|
|
if if(var3x.removed != null) |
|
protected static WildernessTracker.Counter |
incrementprotected static WildernessTracker.Counter increment(@Nonnull Vector3i var0, @Nullable WildernessTracker.Counter var1) |
public |
boolean |
isDisabledboolean isDisabled() |
public |
boolean |
isEnabledboolean isEnabled() |
public |
boolean |
isHomeboolean isHome(@Nonnull Vector3i var1) |
public |
boolean |
isHomeboolean isHome(@Nonnull Vector3d var1) |
public |
boolean |
isHomeboolean isHome(int var1, int var2, int var3) |
public |
boolean |
isWildernessboolean isWilderness(@Nonnull Vector3i var1) |
public |
boolean |
isWildernessboolean isWilderness(@Nonnull Vector3d var1) |
public |
boolean |
isWildernessboolean isWilderness(int var1, int var2, int var3) |
public |
boolean |
isWildernessChunkboolean isWildernessChunk(int var1, int var2, int var3) |
public |
boolean |
isWildernessChunkboolean isWildernessChunk(@Nonnull Vector3i var1) |
static |
<T> void |
iterate<T> void iterate(@Nonnull WildernessTracker var0,
int var1,
int var2,
int var3,
int var4,
int var5,
int var6,
@Nullable T var7,
@Nonnull TriFunction<WildernessTracker, Vector3i, T, WildernessTracker.Iterator> var8) |
protected |
void |
recyclevoid recycle(@Nonnull Vector3i var1) |
public |
void |
removeHomeChunkvoid removeHomeChunk(int var1, int var2, int var3, boolean var4) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.wilderness.resource;
class="kw">import com.hypixel.hytale.builtin.adventure.wilderness.WildernessConfig;
class="kw">import com.hypixel.hytale.builtin.adventure.wilderness.WildernessPlugin;
class="kw">import com.hypixel.hytale.component.Resource;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.function.function.TriFunction;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.util.Collection;
class="kw">import java.util.Map;
class="kw">import java.util.Queue;
class="kw">import java.util.concurrent.ArrayBlockingQueue;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.concurrent.atomic.AtomicLong;
class="kw">import java.util.function.BiFunction;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class WildernessTracker class="kw">implements Resource<ChunkStore> {
class="kw">protected class="kw">static class="kw">final int VECTOR_POOL_CAPACITY = 1000;
class="kw">protected class="kw">final boolean enabled;
class="kw">protected class="kw">final int ownedChunkRadius;
class="kw">protected class="kw">final int ownedChunkRadiusY;
class="kw">protected class="kw">final int unownedChunkRadius;
class="kw">protected class="kw">final int unownedChunkRadiusY;
class="kw">protected class="kw">final AtomicLong generation = new AtomicLong();
class="kw">protected class="kw">final Map<Vector3i, WildernessTracker.Counter> homeChunks = new ConcurrentHashMap<>();
class="kw">protected class="kw">final Queue<Vector3i> vecPool = new ArrayBlockingQueue<>(1000);
class="kw">public WildernessTracker() {
this.enabled = false;
this.ownedChunkRadius = 8;
this.ownedChunkRadiusY = 2;
this.unownedChunkRadius = 2;
this.unownedChunkRadiusY = 1;
}
class="kw">public WildernessTracker(@Nonnull WildernessConfig var1) {
this.enabled = var1.isEnabled();
this.ownedChunkRadius = var1.getOwnedHomeChunkRadius();
this.ownedChunkRadiusY = var1.getOwnedHomeChunkRadiusY();
this.unownedChunkRadius = var1.getUnownedHomeChunkRadius();
this.unownedChunkRadiusY = var1.getUnownedHomeChunkRadiusY();
}
class="kw">public WildernessTracker(@Nonnull WildernessTracker var1) {
this.enabled = var1.enabled;
this.ownedChunkRadius = var1.ownedChunkRadius;
this.ownedChunkRadiusY = var1.ownedChunkRadiusY;
this.unownedChunkRadius = var1.unownedChunkRadius;
this.unownedChunkRadiusY = var1.unownedChunkRadiusY;
this.homeChunks.putAll(var1.homeChunks);
}
@Nonnull
class="kw">public WildernessTracker clone() {
class="kw">return new WildernessTracker(this);
}
class="kw">public long generation() {
class="kw">return this.generation.get();
}
class="kw">public boolean isEnabled() {
class="kw">return this.enabled;
}
class="kw">public boolean isDisabled() {
class="kw">return !this.enabled;
}
class="kw">public boolean isHome(@Nonnull Vector3i var1) {
class="kw">return !this.isWilderness(var1);
}
class="kw">public boolean isHome(@Nonnull Vector3d var1) {
class="kw">return !this.isWilderness(var1);
}
class="kw">public boolean isHome(int var1, int var2, int var3) {
class="kw">return !this.isWilderness(var1, var2, var3);
}
class="kw">public boolean isWilderness(@Nonnull Vector3i var1) {
int var2 = var1.x;
int var3 = var1.y;
int var4 = var1.z;
class="kw">return this.isWilderness(var2, var3, var4);
}
class="kw">public boolean isWilderness(@Nonnull Vector3d var1) {
int var2 = MathUtil.floor(var1.x);
int var3 = MathUtil.floor(var1.y);
int var4 = MathUtil.floor(var1.z);
class="kw">return this.isWilderness(var2, var3, var4);
}
class="kw">public boolean isWilderness(int var1, int var2, int var3) {
Vector3i var4 = this.newVector();
try {
var4.x = ChunkUtil.chunkCoordinate(var1);
var4.y = ChunkUtil.chunkCoordinate(var2);
var4.z = ChunkUtil.chunkCoordinate(var3);
class="kw">return !this.homeChunks.containsKey(var4);
} class="kw">finally {
this.recycle(var4);
}
}
class="kw">public boolean isWildernessChunk(int var1, int var2, int var3) {
Vector3i var4 = this.newVector();
try {
var4.x = var1;
var4.y = var2;
var4.z = var3;
class="kw">return !this.homeChunks.containsKey(var4);
} class="kw">finally {
this.recycle(var4);
}
}
class="kw">public boolean isWildernessChunk(@Nonnull Vector3i var1) {
class="kw">return !this.homeChunks.containsKey(var1);
}
class="kw">public void collectHomeChunks(@Nonnull Vector3i var1, int var2, int var3, int var4, @Nonnull Collection<Vector3i> var5) {
int var6 = var1.x;
int var7 = var1.y;
int var8 = var1.z;
this.collectHomeChunks(var6, var7, var8, var2, var3, var4, var5);
}
class="kw">public void collectHomeChunks(@Nonnull Vector3d var1, int var2, int var3, int var4, @Nonnull Collection<Vector3i> var5) {
int var6 = MathUtil.floor(var1.x);
int var7 = MathUtil.floor(var1.y);
int var8 = MathUtil.floor(var1.z);
this.collectHomeChunks(var6, var7, var8, var2, var3, var4, var5);
}
class="kw">public void collectWildernessChunks(@Nonnull Vector3i var1, int var2, int var3, int var4, @Nonnull Collection<Vector3i> var5) {
int var6 = var1.x;
int var7 = var1.y;
int var8 = var1.z;
this.collectWildernessChunks(var6, var7, var8, var2, var3, var4, var5);
}
class="kw">public void collectWildernessChunks(@Nonnull Vector3d var1, int var2, int var3, int var4, @Nonnull Collection<Vector3i> var5) {
int var6 = MathUtil.floor(var1.x);
int var7 = MathUtil.floor(var1.y);
int var8 = MathUtil.floor(var1.z);
this.collectWildernessChunks(var6, var7, var8, var2, var3, var4, var5);
}
class="kw">public void collectHomeChunks(int var1, int var2, int var3, int var4, int var5, int var6, @Nonnull Collection<Vector3i> var7) {
int var8 = ChunkUtil.chunkCoordinate(var1);
int var9 = ChunkUtil.chunkCoordinate(var2);
int var10 = ChunkUtil.chunkCoordinate(var3);
int var11 = ChunkUtil.chunkCoordinate(var4);
int var12 = ChunkUtil.chunkCoordinate(var5);
int var13 = ChunkUtil.chunkCoordinate(var6);
iterate(this, var8, var9, var10, var11, var12, var13, var7, (var0, var1x, var2x) -> {
if (var0.homeChunks.containsKey(var1x)) {
var2x.add(new Vector3i(var1x));
}
class="kw">return WildernessTracker.Iterator.CONTINUE;
});
}
class="kw">public void collectWildernessChunks(int var1, int var2, int var3, int var4, int var5, int var6, @Nonnull Collection<Vector3i> var7) {
int var8 = ChunkUtil.chunkCoordinate(var1);
int var9 = ChunkUtil.chunkCoordinate(var2);
int var10 = ChunkUtil.chunkCoordinate(var3);
int var11 = ChunkUtil.chunkCoordinate(var4);
int var12 = ChunkUtil.chunkCoordinate(var5);
int var13 = ChunkUtil.chunkCoordinate(var6);
iterate(this, var8, var9, var10, var11, var12, var13, var7, (var0, var1x, var2x) -> {
if (!var0.homeChunks.containsKey(var1x)) {
var2x.add(new Vector3i(var1x));
}
class="kw">return WildernessTracker.Iterator.CONTINUE;
});
}
class="kw">public void addHomeChunk(int var1, int var2, int var3, boolean var4) {
int var5 = var4 ? this.ownedChunkRadius : this.unownedChunkRadius;
int var6 = var4 ? this.ownedChunkRadiusY : this.unownedChunkRadiusY;
if (var5 != -1 && var6 != -1) {
iterate(
this,
var1,
var2,
var3,
var5,
var6,
var5,
null,
(var0, var1x, var2x) -> var0.homeChunks.compute(var1x, WildernessTracker.Counter::increment).coords == var1x
? WildernessTracker.Iterator.CONSUME
: WildernessTracker.Iterator.CONTINUE
);
this.generation.incrementAndGet();
}
}
class="kw">public void removeHomeChunk(int var1, int var2, int var3, boolean var4) {
int var5 = var4 ? this.ownedChunkRadius : this.unownedChunkRadius;
int var6 = var4 ? this.ownedChunkRadiusY : this.unownedChunkRadiusY;
if (var5 != -1 && var6 != -1) {
WildernessTracker.Recycler var7 = WildernessTracker.Recycler.RESOURCE.get();
iterate(this, var1, var2, var3, var5, var6, var5, var7, (var1x, var2x, var3x) -> {
var1x.homeChunks.compute(var2x, var3x);
if (var3x.removed != null) {
this.recycle(var3x.removed);
var3x.removed = null;
}
class="kw">return WildernessTracker.Iterator.CONTINUE;
});
this.generation.incrementAndGet();
}
}
class="kw">protected class="kw">static <T> void iterate(
@Nonnull WildernessTracker var0,
int var1,
int var2,
int var3,
int var4,
int var5,
int var6,
@Nullable T var7,
@Nonnull TriFunction<WildernessTracker, Vector3i, T, WildernessTracker.Iterator> var8
) {
Vector3i var9 = var0.newVector();
try {
double var10 = 1.0 / (var4 * var4);
double var12 = 1.0 / (var5 * var5);
double var14 = 1.0 / (var6 * var6);
for (int var16 = -var5; var16 <= var5; var16++) {
double var17 = var16 * var16 * var12;
for (int var19 = -var6; var19 <= var6; var19++) {
double var20 = var19 * var19 * var14;
for (int var22 = -var4; var22 <= var4; var22++) {
double var23 = var22 * var22 * var10;
if (!(var23 + var17 + var20 > 1.0)) {
var9.set(var1 + var22, var2 + var16, var3 + var19);
class="kw">switch ((WildernessTracker.Iterator)var8.apply(var0, var9, var7)) {
case CONTINUE:
class="kw">default:
break;
case CONSUME:
var9 = var0.newVector();
break;
case EXIT:
class="kw">return;
}
}
}
}
}
} class="kw">finally {
var0.recycle(var9);
}
}
@Nonnull
class="kw">protected Vector3i newVector() {
Vector3i var1 = this.vecPool.poll();
class="kw">return var1 != null ? var1 : new Vector3i();
}
class="kw">protected void recycle(@Nonnull Vector3i var1) {
this.vecPool.offer(var1);
}
class="kw">public class="kw">static ResourceType<ChunkStore, WildernessTracker> getResourceType() {
class="kw">return WildernessPlugin.get().getWildernessTrackerResourceType();
}
@Nonnull
class="kw">public class="kw">static WildernessTracker getTracker(@Nonnull World var0) {
class="kw">return var0.getChunkStore().getStore().getResource(getResourceType());
}
class="kw">protected class="kw">static class Counter {
@Nonnull
class="kw">private class="kw">final Vector3i coords;
class="kw">private int count = 0;
class="kw">protected Counter(@Nonnull Vector3i var1) {
this.coords = var1;
}
@Nonnull
class="kw">protected class="kw">static WildernessTracker.Counter increment(@Nonnull Vector3i var0, @Nullable WildernessTracker.Counter var1) {
var1 = var1 != null ? var1 : new WildernessTracker.Counter(var0);
var1.count++;
class="kw">return var1;
}
@Nullable
class="kw">protected class="kw">static WildernessTracker.Counter decrement(@Nonnull Vector3i var0, @Nullable WildernessTracker.Counter var1) {
class="kw">return var1 != null && --var1.count == 0 ? null : var1;
}
}
class="kw">protected enum Iterator {
CONTINUE,
CONSUME,
EXIT;
Iterator() {
}
}
class="kw">protected class="kw">static class Recycler class="kw">implements BiFunction<Vector3i, WildernessTracker.Counter, WildernessTracker.Counter> {
class="kw">protected class="kw">static class="kw">final ThreadLocal<WildernessTracker.Recycler> RESOURCE = ThreadLocal.withInitial(WildernessTracker.Recycler::new);
@Nullable
class="kw">protected Vector3i removed;
class="kw">protected Recycler() {
}
@Nullable
class="kw">public WildernessTracker.Counter apply(@Nonnull Vector3i var1, @Nullable WildernessTracker.Counter var2) {
if (WildernessTracker.Counter.decrement(var1, var2) == null && var2 != null) {
this.removed = var2.coords;
class="kw">return null;
} else {
class="kw">return var2;
}
}
}
}