DiskResourceStorageProvider class

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

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

implements: IResourceStorageProvider

Поля (20)

МодификаторыТипИмя
public static final String FILE_EXTENSION
final String ID
private static final HytaleLogger LOGGER
private final Path path
Path var1
Path var2
Path var2
Path var3
BuilderCodec var4
String var4
Path var5
BuilderCodec var5
Path var5
BasicFileAttributes var6
var6
String var6
Resource var7
Path var7
ExtraInfo var8
BsonDocument var9

Методы (11)

МодификаторыВозвратСигнатура
public DiskResourceStoragepublic DiskResourceStorage(@Nonnull Path var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Resource storage path must be within world directory: " + this.path)
abstract throw new RuntimeExceptionthrow new RuntimeException("Failed to migrate old chunkstore resources!", var6)
abstract throw new RuntimeExceptionthrow new RuntimeException("Failed to migrate old entitystore resources!", var5)
abstract throw new RuntimeExceptionthrow new RuntimeException("Failed to create Resources directory", var3)
if if(var2 == null)
if if(var5 == null)
if if(var4 == null)
public <T extends Resource<ECS_TYPE>, ECS_TYPE> CompletableFuture<T> loadpublic <T extends Resource<ECS_TYPE>, ECS_TYPE> CompletableFuture<T> load(@Nonnull Store<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, @Nonnull ResourceType<ECS_TYPE, T> var3)
public <T extends Resource<ECS_TYPE>, ECS_TYPE> CompletableFuture<Void> removepublic <T extends Resource<ECS_TYPE>, ECS_TYPE> CompletableFuture<Void> remove(@Nonnull Store<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, @Nonnull ResourceType<ECS_TYPE, T> var3)
public <T extends Resource<ECS_TYPE>, ECS_TYPE> CompletableFuture<Void> savepublic <T extends Resource<ECS_TYPE>, ECS_TYPE> CompletableFuture<Void> save(@Nonnull Store<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, @Nonnull ResourceType<ECS_TYPE, T> var3, T var4)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.util.RawJsonReader;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.component.ComponentRegistry;
class="kw">import com.hypixel.hytale.component.IResourceStorage;
class="kw">import com.hypixel.hytale.component.Resource;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.Options;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.WorldProvider;
class="kw">import com.hypixel.hytale.server.core.util.BsonUtil;
class="kw">import com.hypixel.hytale.server.core.util.io.FileUtil;
class="kw">import com.hypixel.hytale.sneakythrow.SneakyThrow;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.StandardCopyOption;
class="kw">import java.nio.file.attribute.BasicFileAttributes;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.bson.BsonDocument;

class="kw">public class DiskResourceStorageProvider class="kw">implements IResourceStorageProvider {
   class="kw">public class="kw">static class="kw">final String ID = "Disk";
   class="kw">public class="kw">static class="kw">final BuilderCodec<DiskResourceStorageProvider> CODEC = BuilderCodec.builder(
         DiskResourceStorageProvider.class, DiskResourceStorageProvider::new
      )
      .append(new KeyedCodec<>("Path", Codec.STRING), (var0, var1) -> var0.path = var1, var0 -> var0.path)
      .add()
      .build();
   @Nonnull
   class="kw">private String path = "resources";

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

   @Nonnull
   class="kw">public String getPath() {
      class="kw">return this.path;
   }

   @Nonnull
   @Override
   class="kw">public <T class="kw">extends WorldProvider> IResourceStorage getResourceStorage(@Nonnull World var1) {
      Path var2 = PathUtil.resolvePathWithinDir(var1.getSavePath(), this.path);
      if (var2 == null) {
         throw new IllegalStateException("Resource storage path must be within world directory: " + this.path);
      } else {
         class="kw">return new DiskResourceStorageProvider.DiskResourceStorage(var2);
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "DiskResourceStorageProvider{path=" + this.path + "}";
   }

   @Deprecated(forRemoval = true)
   class="kw">public class="kw">static void migrateFiles(@Nonnull World var0) {
      Path var1 = var0.getSavePath().resolve("resources");
      Path var2 = var1.resolve("chunkstore");
      if (Files.exists(var2)) {
         try {
            FileUtil.moveDirectoryContents(var2, var1, StandardCopyOption.REPLACE_EXISTING);
            FileUtil.deleteDirectory(var2);
         } catch (IOException var6) {
            throw new RuntimeException("Failed to migrate old chunkstore resources!", var6);
         }
      }

      Path var3 = var1.resolve("entitystore");
      if (Files.exists(var3)) {
         try {
            FileUtil.moveDirectoryContents(var3, var1, StandardCopyOption.REPLACE_EXISTING);
            FileUtil.deleteDirectory(var3);
         } catch (IOException var5) {
            throw new RuntimeException("Failed to migrate old entitystore resources!", var5);
         }
      }
   }

   class="kw">public class="kw">static class DiskResourceStorage class="kw">implements IResourceStorage {
      class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
      class="kw">public class="kw">static class="kw">final String FILE_EXTENSION = ".json";
      @Nonnull
      class="kw">private class="kw">final Path path;

      class="kw">public DiskResourceStorage(@Nonnull Path var1) {
         this.path = var1;
         if (!Options.isBare()) {
            try {
               Files.createDirectories(var1);
            } catch (IOException var3) {
               throw new RuntimeException("Failed to create Resources directory", var3);
            }
         }
      }

      @Nonnull
      @Override
      class="kw">public <T class="kw">extends Resource<ECS_TYPE>, ECS_TYPE> CompletableFuture<T> load(
         @Nonnull Store<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, @Nonnull ResourceType<ECS_TYPE, T> var3
      ) {
         BuilderCodec var4 = var2.getResourceCodec(var3);
         class="kw">return var4 == null ? CompletableFuture.completedFuture(var2.createResource(var3)) : CompletableFuture.supplyAsync(SneakyThrow.sneakySupplier(() -> {
            String var4 = var2.getResourceId(var3);
            Path var5 = this.path.resolve(var4 + ".json");

            BasicFileAttributes var6;
            try {
               var6 = Files.readAttributes(var5, BasicFileAttributes.class);
            } catch (IOException var8) {
               LOGGER.at(Level.FINE).log("File '%s' was not found, using the class="kw">default file", var5);
               class="kw">return var2.createResource(var3);
            }

            if (var6.size() == 0L) {
               LOGGER.at(Level.WARNING).log("Error loading file %s, file was found to be entirely empty, using the class="kw">default file", var5);
               class="kw">return var2.createResource(var3);
            } else {
               Resource var7 = RawJsonReader.readSyncWithBak(var5, var4, LOGGER);
               class="kw">return (Resource)(var7 != null ? var7 : var2.createResource(var3));
            }
         }));
      }

      @Nonnull
      @Override
      class="kw">public <T class="kw">extends Resource<ECS_TYPE>, ECS_TYPE> CompletableFuture<Void> save(
         @Nonnull Store<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, @Nonnull ResourceType<ECS_TYPE, T> var3, T var4
      ) {
         BuilderCodec var5 = var2.getResourceCodec(var3);
         if (var5 == null) {
            class="kw">return CompletableFuture.completedFuture(null);
         }

         String var6 = var2.getResourceId(var3);
         Path var7 = this.path.resolve(var6 + ".json");
         ExtraInfo var8 = ExtraInfo.THREAD_LOCAL.get();
         BsonDocument var9 = var5.encode(var4, var8).asDocument();
         var8.getValidationResults().logOrThrowValidatorExceptions(LOGGER);
         class="kw">return BsonUtil.writeDocument(var7, var9);
      }

      @Nonnull
      @Override
      class="kw">public <T class="kw">extends Resource<ECS_TYPE>, ECS_TYPE> CompletableFuture<Void> remove(
         @Nonnull Store<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, @Nonnull ResourceType<ECS_TYPE, T> var3
      ) {
         String var4 = var2.getResourceId(var3);
         if (var4 == null) {
            class="kw">return CompletableFuture.completedFuture(null);
         }

         Path var5 = this.path.resolve(var4 + ".json");

         try {
            Files.deleteIfExists(var5);
            class="kw">return CompletableFuture.completedFuture(null);
         } catch (IOException var7) {
            class="kw">return CompletableFuture.failedFuture(var7);
         }
      }
   }
}