WorldPregenerateSystem class
Пакет: com.hypixel.hytale.server.core.universe.world.system
Файл: com/hypixel/hytale/server/core/universe/world/system/WorldPregenerateSystem.java
extends: StoreSystem<ChunkStore>
Поля (14)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
PROGRESS_INTERVAL |
|
int |
var10 |
|
List |
var11 |
|
int |
var12 |
|
long |
var15 |
|
World |
var2 |
|
long |
var2 |
|
Box2D |
var3 |
|
int |
var4 |
|
int |
var5 |
|
int |
var6 |
|
int |
var7 |
|
int |
var8 |
|
int |
var9 |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(int var13 = var4; var13 <= var6; var13 += 32) |
|
|
for for(int var14 = var5; var14 <= var7; var14 += 32) |
|
|
if if(var3 != null) |
|
|
if if(var2x != null) |
|
|
if if(++var12 % 100 == 0) |
static |
void |
pregeneratevoid pregenerate(@Nonnull World var0, @Nonnull Box2D var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.system;
class="kw">import com.hypixel.hytale.common.util.FormatUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemGroupDependency;
class="kw">import com.hypixel.hytale.component.system.StoreSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.shape.Box2D;
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 it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.ForkJoinPool;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">public class WorldPregenerateSystem class="kw">extends StoreSystem<ChunkStore> {
class="kw">private class="kw">static class="kw">final int PROGRESS_INTERVAL = 100;
class="kw">private class="kw">static class="kw">final int MAX_IN_FLIGHT = ForkJoinPool.getCommonPoolParallelism();
class="kw">private class="kw">static class="kw">final Set<Dependency<ChunkStore>> DEPENDENCIES = Set.of(new SystemGroupDependency<>(Order.AFTER, ChunkStore.INIT_GROUP));
class="kw">public WorldPregenerateSystem() {
}
@Nonnull
@Override
class="kw">public Set<Dependency<ChunkStore>> getDependencies() {
class="kw">return DEPENDENCIES;
}
@Override
class="kw">public void onSystemAddedToStore(@Nonnull Store<ChunkStore> var1) {
World var2 = var1.getExternalData().getWorld();
Box2D var3 = var2.getWorldConfig().getChunkConfig().getPregenerateRegion();
if (var3 != null) {
var2.getLogger().at(Level.INFO).log("Ensuring region is generated: %s", var3);
CompletableFuture.runAsync(() -> pregenerate(var2, var3));
}
}
class="kw">private class="kw">static void pregenerate(@Nonnull World var0, @Nonnull Box2D var1) {
long var2 = System.nanoTime();
int var4 = MathUtil.floor(var1.min.x);
int var5 = MathUtil.floor(var1.min.y);
int var6 = MathUtil.floor(var1.max.x);
int var7 = MathUtil.floor(var1.max.y);
int var8 = (var6 - var4) / 32 + 1;
int var9 = (var7 - var5) / 32 + 1;
int var10 = var8 * var9;
List var11 = new ReferenceArrayList();
int var12 = 0;
for (int var13 = var4; var13 <= var6; var13 += 32) {
for (int var14 = var5; var14 <= var7; var14 += 32) {
var11.add(var0.getChunkStore().getChunkReferenceAsync(ChunkUtil.indexChunkFromBlock(var13, var14)).whenComplete((var1x, var2x) -> {
if (var2x != null) {
((HytaleLogger.Api)var0.getLogger().at(Level.SEVERE).withCause(var2x)).log("Failed to load/generate chunk:");
}
}));
if (++var12 % 100 == 0) {
var0.getLogger().at(Level.INFO).log("Pregenerated %d/%d chunks", var12, var10);
}
var11.removeIf(CompletableFuture::isDone);
if (var11.size() >= MAX_IN_FLIGHT) {
CompletableFuture.anyOf(var11.toArray(CompletableFuture[]::new)).join();
var11.removeIf(CompletableFuture::isDone);
}
}
}
CompletableFuture.allOf(var11.toArray(CompletableFuture[]::new)).join();
long var15 = System.nanoTime();
var0.getLogger().at(Level.INFO).log("Finished loading %d chunks. Finished in %s", var10, FormatUtil.nanosToString(var15 - var2));
}
@Override
class="kw">public void onSystemRemovedFromStore(@Nonnull Store<ChunkStore> var1) {
}
}