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) {
   }
}