CachedPositionProvider class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.positionproviders.cached
Файл: com/hypixel/hytale/builtin/hytalegenerator/positionproviders/cached/CachedPositionProvider.java
extends: PositionProvider
Поля (18)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
return |
|
ArrayList |
var10 |
|
Pipe.One |
var11 |
|
PositionProvider.Context |
var12 |
|
long |
var13 |
|
Control |
var15 |
|
Vector3i |
var2 |
|
Vector3i |
var2 |
|
Vector3d |
var2 |
|
Vector3i |
var3 |
|
int |
var3 |
|
|
var3 |
|
Vector3i |
var4 |
|
long |
var5 |
|
Vector3d[] |
var7 |
|
|
var7 |
|
Vector3d |
var8 |
|
Bounds3d |
var9 |
Методы (11)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException() |
|
|
for for(var4.x = var2.x; var4.x <= var3.x; var4.x++) |
|
|
for for(var4.z = var2.z; var4.z <= var3.z; var4.z++) |
|
|
for for(var4.y = var2.y; var4.y <= var3.y; var4.y++) |
|
|
for for(Vector3d var19 : var7) |
public |
void |
getvoid get(@Nonnull PositionProvider.Context var1) |
|
|
if if(var2 > 0 && var3 >= 0) |
|
|
if if(var7 == null) |
|
|
if if(var15.stop) |
public |
int |
sectionFloorint sectionFloor(int var1) |
private |
int |
toSectionAddressint toSectionAddress(double var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.positionproviders.cached;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3d;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Control;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Pipe;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.positionproviders.PositionProvider;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import java.util.ArrayList;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class CachedPositionProvider class="kw">extends PositionProvider {
@Nonnull
class="kw">private class="kw">final PositionProvider positionProvider;
class="kw">private class="kw">final int sectionSize;
class="kw">private CacheThreadMemory cache;
class="kw">public CachedPositionProvider(@Nonnull PositionProvider var1, int var2, int var3) {
if (var2 > 0 && var3 >= 0) {
this.positionProvider = var1;
this.sectionSize = var2;
this.cache = new CacheThreadMemory(var3);
} else {
throw new IllegalArgumentException();
}
}
@Override
class="kw">public void generate(@Nonnull PositionProvider.Context var1) {
this.get(var1);
}
class="kw">public void get(@Nonnull PositionProvider.Context var1) {
Vector3i var2 = this.sectionAddress(var1.bounds.min);
Vector3i var3 = this.sectionAddress(var1.bounds.max);
Vector3i var4 = new Vector3i(var2);
for (var4.x = var2.x; var4.x <= var3.x; var4.x++) {
for (var4.z = var2.z; var4.z <= var3.z; var4.z++) {
for (var4.y = var2.y; var4.y <= var3.y; var4.y++) {
long var5 = HashUtil.hash(var4.x, var4.y, var4.z);
Vector3d[] var7 = (Vector3d[])this.cache.sections.get(var5);
if (var7 == null) {
Vector3d var8 = this.sectionMin(var4);
Bounds3d var9 = new Bounds3d(var8, new Vector3d(var8).add(this.sectionSize, this.sectionSize, this.sectionSize));
ArrayList var10 = new ArrayList<>();
Pipe.One var11 = (var1x, var2x) -> var10.add(var1x);
PositionProvider.Context var12 = new PositionProvider.Context(var9, var11, null, null);
this.positionProvider.generate(var12);
var7 = new Vector3d[var10.size()];
var10.toArray(var7);
this.cache.sections.put(var5, var7);
this.cache.expirationList.add(var5);
if (this.cache.expirationList.size() > this.cache.size) {
long var13 = this.cache.expirationList.removeLong(0);
this.cache.sections.remove(var13);
}
}
Control var15 = new Control();
for (Vector3d var19 : var7) {
if (var1.bounds.contains(var19)) {
if (var15.stop) {
class="kw">return;
}
var1.pipe.accept(new Vector3d(var19), var15);
}
}
}
}
}
}
@Nonnull
class="kw">private Vector3i sectionAddress(@Nonnull Vector3d var1) {
Vector3i var2 = Vector3dUtil.toVector3i(var1);
var2.x = this.sectionFloor(var2.x) / this.sectionSize;
var2.y = this.sectionFloor(var2.y) / this.sectionSize;
var2.z = this.sectionFloor(var2.z) / this.sectionSize;
class="kw">return var2;
}
@Nonnull
class="kw">private Vector3d sectionMin(@Nonnull Vector3i var1) {
Vector3d var2 = Vector3iUtil.toVector3d(var1);
var2.x = var2.x * this.sectionSize;
var2.y = var2.y * this.sectionSize;
var2.z = var2.z * this.sectionSize;
class="kw">return var2;
}
class="kw">private int toSectionAddress(double var1) {
int var3 = (int)var1;
var3 = this.sectionFloor(var3);
class="kw">return var3 / this.sectionSize;
}
class="kw">public int sectionFloor(int var1) {
class="kw">return var1 < 0 ? var1 - var1 % this.sectionSize - this.sectionSize : var1 - var1 % this.sectionSize;
}
}