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());
}
}
}
}