UniverseResources class
Пакет: com.hypixel.hytale.server.core.universe.resources
Файл: com/hypixel/hytale/server/core/universe/resources/UniverseResources.java
Поля (6)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
Map |
var1 |
|
Map |
var2 |
|
ExtraInfo |
var3 |
|
Object |
var3 |
|
UniverseResourceType |
var4 |
Методы (8)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Invalid universe resource id: " + var1) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Duplicate universe resource id: " + var1) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Universe resources are already loaded") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Universe resources are not loaded yet") |
|
|
if if(this.resources != null) |
|
|
if if(var2 == null) |
|
|
if if(var3 == null) |
public |
void |
loadvoid load(@Nonnull Collection<? extends UniverseResourceType<?>> var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.resources;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import java.util.Collection;
class="kw">import java.util.Collections;
class="kw">import java.util.HashSet;
class="kw">import java.util.Map;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import javax.annotation.Nonnull;
class="kw">public class="kw">final class UniverseResources {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">private class="kw">static class="kw">final Map<String, UniverseResourceType<?>> REGISTRY = new ConcurrentHashMap<>();
@Nonnull
class="kw">private class="kw">final IUniverseResourceStorage storage;
class="kw">private class="kw">volatile Map<UniverseResourceType<?>, Object> resources;
@Nonnull
class="kw">public class="kw">static <T> UniverseResourceType<T> register(@Nonnull Class<T> var0, @Nonnull String var1, @Nonnull BuilderCodec<T> var2) {
if (!PathUtil.isValidName(var1)) {
throw new IllegalArgumentException("Invalid universe resource id: " + var1);
} else {
ExtraInfo var3 = ExtraInfo.THREAD_LOCAL.get();
var2.validateDefaults(var3, new HashSet<>());
var3.getValidationResults().logOrThrowValidatorExceptions(LOGGER, "Default Universe Resource Validation Failed!\n");
UniverseResourceType var4 = new UniverseResourceType<>(var0, var1, var2);
if (REGISTRY.putIfAbsent(var1, var4) != null) {
throw new IllegalArgumentException("Duplicate universe resource id: " + var1);
} else {
class="kw">return var4;
}
}
}
@Nonnull
class="kw">public class="kw">static Collection<UniverseResourceType<?>> registeredTypes() {
class="kw">return Collections.unmodifiableCollection(REGISTRY.values());
}
class="kw">public UniverseResources(@Nonnull IUniverseResourceStorage var1) {
this.storage = var1;
}
class="kw">public void load(@Nonnull Collection<? class="kw">extends UniverseResourceType<?>> var1) {
if (this.resources != null) {
throw new IllegalStateException("Universe resources are already loaded");
}
this.resources = Map.copyOf(this.storage.loadAll(var1));
}
@Nonnull
class="kw">public <T> T get(@Nonnull UniverseResourceType<T> var1) {
Map var2 = this.resources;
if (var2 == null) {
throw new IllegalStateException("Universe resources are not loaded yet");
} else {
Object var3 = var2.get(var1);
if (var3 == null) {
throw new IllegalStateException("Universe resource '" + var1.getId() + "' was registered after resources loaded");
} else {
class="kw">return var1.getTypeClass().cast(var3);
}
}
}
@Nonnull
class="kw">public CompletableFuture<Void> flush(@Nonnull UniverseResourceType<?> var1) {
class="kw">return this.save(var1);
}
@Nonnull
class="kw">public CompletableFuture<Void> flushAll() {
Map var1 = this.resources;
class="kw">return var1 == null
? CompletableFuture.completedFuture(null)
: CompletableFuture.allOf(var1.keySet().stream().map(this::save).toArray(CompletableFuture[]::new));
}
@Nonnull
class="kw">private <T> CompletableFuture<Void> save(@Nonnull UniverseResourceType<T> var1) {
class="kw">return this.storage.save(var1, this.get(var1));
}
}