DiskPlayerStorageProvider class

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

Файл: com/hypixel/hytale/server/core/universe/playerdata/DiskPlayerStorageProvider.java

implements: PlayerStorageProvider

Поля (12)

МодификаторыТипИмя
public static final String FILE_EXTENSION
final String ID
private final Path path
var0x
String var1
var1x
Path var2
Holder var2
Path var2
Path var3
Path var4
BsonDocument var5

Методы (10)

МодификаторыВозвратСигнатура
public DiskPlayerStoragepublic DiskPlayerStorage(@Nonnull Path var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Player storage path must be within a trusted directory: " + this.path)
abstract throw new RuntimeExceptionthrow new RuntimeException("Failed to create players directory", var3)
public Set<UUID> getPlayerspublic Set<UUID> getPlayers()
if if(var0x == null)
if if(var1x == null)
public CompletableFuture<Holder<EntityStore>> loadpublic CompletableFuture<Holder<EntityStore>> load(@Nonnull UUID var1)
public CompletableFuture<Void> removepublic CompletableFuture<Void> remove(@Nonnull UUID var1)
public CompletableFuture<Void> savepublic CompletableFuture<Void> save(@Nonnull UUID var1, @Nonnull Holder<EntityStore> var2, boolean var3)
public CompletableFuture<Void> updatepublic CompletableFuture<Void> update(@Nonnull UUID var1, @Nonnull Consumer<Holder<EntityStore>> var2)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.server.core.Constants;
class="kw">import com.hypixel.hytale.server.core.Options;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.BsonUtil;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.function.Consumer;
class="kw">import java.util.stream.Collectors;
class="kw">import java.util.stream.Stream;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.bson.BsonDocument;

class="kw">public class DiskPlayerStorageProvider class="kw">implements PlayerStorageProvider {
   class="kw">public class="kw">static class="kw">final String ID = "Disk";
   class="kw">public class="kw">static class="kw">final BuilderCodec<DiskPlayerStorageProvider> CODEC = BuilderCodec.builder(DiskPlayerStorageProvider.class, DiskPlayerStorageProvider::new)
      .append(new KeyedCodec<>("Path", Codec.STRING), (var0, var1) -> var0.path = Path.of(var1), var0 -> var0.path.toString())
      .add()
      .build();
   @Nonnull
   class="kw">private Path path = Constants.UNIVERSE_PATH.resolve("players");

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

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

   @Nonnull
   @Override
   class="kw">public PlayerStorage getPlayerStorage() {
      if (!PathUtil.isInTrustedRoot(this.path)) {
         throw new IllegalStateException("Player storage path must be within a trusted directory: " + this.path);
      } else {
         class="kw">return new DiskPlayerStorageProvider.DiskPlayerStorage(this.path);
      }
   }

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

   class="kw">public class="kw">static class DiskPlayerStorage class="kw">implements PlayerStorage {
      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 DiskPlayerStorage(@Nonnull Path var1) {
         this.path = var1;
         if (!Options.isBare()) {
            try {
               Files.createDirectories(var1);
            } catch (IOException var3) {
               throw new RuntimeException("Failed to create players directory", var3);
            }
         }
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Holder<EntityStore>> load(@Nonnull UUID var1) {
         Path var2 = this.path.resolve(var1 + ".json");
         class="kw">return Universe.get().getStorageManager().doLoad(var2, () -> BsonUtil.readDocument(var2).thenApply(var0x -> {
            if (var0x == null) {
               var0x = new BsonDocument();
            }

            class="kw">return EntityStore.REGISTRY.deserialize(var0x);
         }));
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Void> save(@Nonnull UUID var1, @Nonnull Holder<EntityStore> var2, boolean var3) {
         Path var4 = this.path.resolve(var1 + ".json");
         if (!var3 && Universe.get().getStorageManager().hasQueuedSave(var4)) {
            class="kw">return CompletableFuture.completedFuture(null);
         }

         BsonDocument var5 = EntityStore.REGISTRY.serialize(var2);
         class="kw">return Universe.get().getStorageManager().doSave(var4, () -> BsonUtil.writeDocument(var4, var5));
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Void> update(@Nonnull UUID var1, @Nonnull Consumer<Holder<EntityStore>> var2) {
         Path var3 = this.path.resolve(var1 + ".json");
         class="kw">return Universe.get().getStorageManager().doSave(var3, () -> BsonUtil.readDocument(var3).thenApply(var1x -> {
            if (var1x == null) {
               var1x = new BsonDocument();
            }

            Holder var2 = EntityStore.REGISTRY.deserialize(var1x);
            var2.accept(var2);
            class="kw">return EntityStore.REGISTRY.serialize(var2);
         }).thenCompose(var1x -> BsonUtil.writeDocument(var3, var1x)));
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Void> remove(@Nonnull UUID var1) {
         Path var2 = this.path.resolve(var1 + ".json");

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

      @Nonnull
      @Override
      class="kw">public Set<UUID> getPlayers() class="kw">throws IOException {
         try (Stream var1 = Files.list(this.path)) {
            class="kw">return var1.<UUID>map(var0 -> {
               String var1 = var0.getFileName().toString();
               if (!var1.endsWith(".json")) {
                  class="kw">return null;
               }

               try {
                  class="kw">return UUID.fromString(var1.substring(0, var1.length() - ".json".length()));
               } catch (IllegalArgumentException var3) {
                  class="kw">return null;
               }
            }).filter(Objects::nonNull).collect(Collectors.toSet());
         }
      }
   }
}