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