MigrationChunkLoader class

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

Файл: com/hypixel/hytale/server/core/universe/world/storage/provider/MigrationChunkStorageProvider.java

implements: IChunkLoader

Поля (8)

МодификаторыТипИмя
private final IChunkLoader[] loaders
IOException var1
var1
LongOpenHashSet var1
CompletableFuture var3
var3
IChunkLoader var5
CompletableFuture var6

Методы (10)

МодификаторыВозвратСигнатура
abstract return new LongArrayListreturn new LongArrayList(var1)
public void closepublic void close()
for for(IChunkLoader var5 : this.loaders)
for for(int var4 = 1; var4 < this.loaders.length; var4++)
for for(IChunkLoader var5 : this.loaders)
public LongList getIndexespublic LongList getIndexes()
if if(var1 == null)
if if(var1 != null)
if if(var5x != null)
public CompletableFuture<Holder<ChunkStore>> loadHolderpublic CompletableFuture<Holder<ChunkStore>> loadHolder(int var1, int var2)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.IChunkLoader;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.IChunkSaver;
class="kw">import com.hypixel.hytale.sneakythrow.SneakyThrow;
class="kw">import it.unimi.dsi.fastutil.longs.LongArrayList;
class="kw">import it.unimi.dsi.fastutil.longs.LongList;
class="kw">import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
class="kw">import java.io.IOException;
class="kw">import java.util.Arrays;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.checkerframework.checker.nullness.compatqual.NonNullDecl;

class="kw">public class MigrationChunkStorageProvider class="kw">implements IChunkStorageProvider<MigrationChunkStorageProvider.MigrationData> {
   class="kw">public class="kw">static class="kw">final String ID = "Migration";
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<MigrationChunkStorageProvider> CODEC = BuilderCodec.<MigrationChunkStorageProvider>builder(
         MigrationChunkStorageProvider.class, MigrationChunkStorageProvider::new
      )
      .documentation(
         "A provider that combines multiple storage providers in a chain to assist with migrating worlds between storage formats.\n\nCan also be used to set storage to load chunks but block saving them if combined with the **Empty** storage provider"
      )
      .<IChunkStorageProvider<?>[]>append(
         new KeyedCodec<>("Loaders", new ArrayCodec<>(IChunkStorageProvider.CODEC, IChunkStorageProvider[]::new)),
         (var0, var1) -> var0.from = var1,
         var0 -> var0.from
      )
      .documentation(
         "A list of storage providers to use as chunk loaders.\n\nEach loader will be tried in order to load a chunk, returning the chunk if found otherwise trying the next loaded until found or none are left."
      )
      .add()
      .<IChunkStorageProvider<?>>append(new KeyedCodec<>("Saver", IChunkStorageProvider.CODEC), (var0, var1) -> var0.to = var1, var0 -> var0.to)
      .documentation("The storage provider to use to save chunks.")
      .add()
      .build();
   class="kw">private IChunkStorageProvider<?>[] from;
   class="kw">private IChunkStorageProvider<?> to;

   class="kw">public MigrationChunkStorageProvider() {
   }

   class="kw">public MigrationChunkStorageProvider(@Nonnull IChunkStorageProvider[] var1, @Nonnull IChunkStorageProvider var2) {
      this.from = var1;
      this.to = var2;
   }

   class="kw">public MigrationChunkStorageProvider.MigrationData initialize(@NonNullDecl Store<ChunkStore> var1) class="kw">throws IOException {
      MigrationChunkStorageProvider.MigrationData var2 = new MigrationChunkStorageProvider.MigrationData();
      var2.loaderData = new Object[this.from.length];

      for (int var3 = 0; var3 < this.from.length; var3++) {
         var2.loaderData[var3] = this.from[var3].initialize(var1);
      }

      var2.saverData = this.to.initialize(var1);
      class="kw">return var2;
   }

   class="kw">public void delete(@Nonnull MigrationChunkStorageProvider.MigrationData var1, @Nonnull Store<ChunkStore> var2) class="kw">throws IOException {
      for (int var3 = 0; var3 < this.from.length; var3++) {
         ((IChunkStorageProvider<Object>)this.from[var3]).delete(var1.loaderData[var3], var2);
      }

      ((IChunkStorageProvider<Object>)this.to).delete(var1.saverData, var2);
   }

   class="kw">public void close(@NonNullDecl MigrationChunkStorageProvider.MigrationData var1, @NonNullDecl Store<ChunkStore> var2) class="kw">throws IOException {
      for (int var3 = 0; var3 < this.from.length; var3++) {
         ((IChunkStorageProvider<Object>)this.from[var3]).close(var1.loaderData[var3], var2);
      }

      ((IChunkStorageProvider<Object>)this.to).close(var1.saverData, var2);
   }

   @Nonnull
   class="kw">public IChunkLoader getLoader(@Nonnull MigrationChunkStorageProvider.MigrationData var1, @Nonnull Store<ChunkStore> var2) class="kw">throws IOException {
      IChunkLoader[] var3 = new IChunkLoader[this.from.length];

      for (int var4 = 0; var4 < this.from.length; var4++) {
         var3[var4] = ((IChunkStorageProvider<Object>)this.from[var4]).getLoader(var1.loaderData[var4], var2);
      }

      class="kw">return new MigrationChunkStorageProvider.MigrationChunkLoader(var3);
   }

   @Nonnull
   class="kw">public IChunkSaver getSaver(@Nonnull MigrationChunkStorageProvider.MigrationData var1, @Nonnull Store<ChunkStore> var2) class="kw">throws IOException {
      class="kw">return ((IChunkStorageProvider<Object>)this.to).getSaver(var1.saverData, var2);
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "MigrationChunkStorageProvider{from=" + Arrays.toString(this.from) + ", to=" + this.to + "}";
   }

   class="kw">public class="kw">static class MigrationChunkLoader class="kw">implements IChunkLoader {
      @Nonnull
      class="kw">private class="kw">final IChunkLoader[] loaders;

      class="kw">public MigrationChunkLoader(@Nonnull IChunkLoader... var1) {
         this.loaders = var1;
      }

      @Override
      class="kw">public void close() class="kw">throws IOException {
         IOException var1 = null;

         for (IChunkLoader var5 : this.loaders) {
            try {
               var5.close();
            } catch (Exception var7) {
               if (var1 == null) {
                  var1 = new IOException("Failed to close one or more loaders!");
               }

               var1.addSuppressed(var7);
            }
         }

         if (var1 != null) {
            throw var1;
         }
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Holder<ChunkStore>> loadHolder(int var1, int var2) {
         CompletableFuture var3 = this.loaders[0].loadHolder(var1, var2);

         for (int var4 = 1; var4 < this.loaders.length; var4++) {
            IChunkLoader var5 = this.loaders[var4];
            CompletableFuture var6 = var3;
            var3 = var6.<CompletableFuture<Holder<ChunkStore>>>handle((var4x, var5x) -> {
               if (var5x != null) {
                  class="kw">return var5.loadHolder(var1, var2).exceptionally(var1x -> {
                     var1x.addSuppressed(var5x);
                     throw SneakyThrow.sneakyThrow(var1x);
                  });
               } else {
                  class="kw">return var4x == null ? var5.loadHolder(var1, var2) : var6;
               }
            }).thenCompose(Function.identity());
         }

         class="kw">return var3;
      }

      @Nonnull
      @Override
      class="kw">public LongList getIndexes() class="kw">throws IOException {
         LongOpenHashSet var1 = new LongOpenHashSet();

         for (IChunkLoader var5 : this.loaders) {
            var1.addAll(var5.getIndexes());
         }

         class="kw">return new LongArrayList(var1);
      }
   }

   class="kw">public class="kw">static class MigrationData {
      class="kw">private Object[] loaderData;
      class="kw">private Object saverData;

      class="kw">public MigrationData() {
      }
   }
}