DiskPlayerStorage class

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

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

implements: PlayerStorage

Поля (11)

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

Методы (8)

МодификаторыВозвратСигнатура
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());
         }
      }
   }
}