IWorldChunks interface

Пакет: com.hypixel.hytale.server.core.universe.world

Файл: com/hypixel/hytale/server/core/universe/world/IWorldChunks.java

extends: IChunkAccessorSync, IWorldChunksAsync

Поля (4)

МодификаторыТипИмя
WorldChunk var3
WorldChunk var3
CompletableFuture var4
CompletableFuture var4

Методы (5)

МодификаторыВозвратСигнатура
abstract for for(; !var1.isDone()
if if(var3 != null)
if if(var3 != null)
abstract boolean isInThreadboolean isInThread()
default <T> T waitForFutureWithoutLock<T> T waitForFutureWithoutLock(@Nonnull CompletableFuture<T> var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world;

class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.server.core.universe.world.accessor.IChunkAccessorSync;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import javax.annotation.Nonnull;

@Deprecated
class="kw">public class="kw">interface IWorldChunks class="kw">extends IChunkAccessorSync, IWorldChunksAsync {
   @Deprecated
   void consumeTaskQueue();

   boolean isInThread();

   @Override
   class="kw">default WorldChunk getChunk(long var1) {
      WorldChunk var3 = this.loadChunkIfInMemory(var1);
      if (var3 != null) {
         class="kw">return var3;
      }

      CompletableFuture var4 = this.getChunkAsync(var1);
      class="kw">return this.waitForFutureWithoutLock(var4);
   }

   @Override
   class="kw">default WorldChunk getNonTickingChunk(long var1) {
      WorldChunk var3 = this.getChunkIfInMemory(var1);
      if (var3 != null) {
         class="kw">return var3;
      }

      CompletableFuture var4 = this.getNonTickingChunkAsync(var1);
      class="kw">return this.waitForFutureWithoutLock(var4);
   }

   class="kw">default <T> T waitForFutureWithoutLock(@Nonnull CompletableFuture<T> var1) {
      if (!this.isInThread()) {
         class="kw">return var1.join();
      }

      AssetRegistry.ASSET_LOCK.readLock().unlock();

      for (; !var1.isDone(); Thread.yield()) {
         AssetRegistry.ASSET_LOCK.readLock().lock();

         try {
            this.consumeTaskQueue();
         } class="kw">finally {
            AssetRegistry.ASSET_LOCK.readLock().unlock();
         }
      }

      AssetRegistry.ASSET_LOCK.readLock().lock();
      class="kw">return var1.join();
   }
}