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