AssetRegistry class

Пакет: com.hypixel.hytale.assetstore

Файл: com/hypixel/hytale/assetstore/AssetRegistry.java

Поля (7)

МодификаторыТипИмя
final ReadWriteLock ASSET_LOCK
long var0
IEventDispatcher var1
IEventDispatcher var1
long var1
long var1
long var1

Методы (10)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("tag can't be null!")
abstract return new Object2IntOpenHashMapreturn new Object2IntOpenHashMap(CLIENT_TAG_MAP)
static <K, T extends JsonAssetWithMap<K, M>, M extends AssetMap<K, T>> AssetStore<K, T, M> getAssetStore<K, T extends JsonAssetWithMap<K, M>, M extends AssetMap<K, T>> AssetStore<K, T, M> getAssetStore(Class<T> var0)
static int getOrCreateTagIndexint getOrCreateTagIndex(@Nonnull String var0)
static int getTagIndexint getTagIndex(@Nonnull String var0)
if if(var0 == null)
if if(var0 == null)
if if(var0 == null)
static boolean registerClientTagboolean registerClientTag(@Nonnull String var0)
static <K, T extends JsonAssetWithMap<K, M>, M extends AssetMap<K, T>, S extends AssetStore<K, T, M>> void unregister<K, T extends JsonAssetWithMap<K, M>, M extends AssetMap<K, T>, S extends AssetStore<K, T, M>> void unregister(@Nonnull S var0)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.assetstore;

class="kw">import com.hypixel.hytale.assetstore.event.RegisterAssetStoreEvent;
class="kw">import com.hypixel.hytale.assetstore.event.RemoveAssetStoreEvent;
class="kw">import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
class="kw">import com.hypixel.hytale.event.IEventDispatcher;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import java.util.Collections;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import java.util.concurrent.locks.ReadWriteLock;
class="kw">import java.util.concurrent.locks.ReentrantReadWriteLock;
class="kw">import java.util.concurrent.locks.StampedLock;
class="kw">import javax.annotation.Nonnull;

class="kw">public class AssetRegistry {
   class="kw">public class="kw">static class="kw">final ReadWriteLock ASSET_LOCK = new ReentrantReadWriteLock();
   class="kw">public class="kw">static boolean HAS_INIT = false;
   class="kw">public class="kw">static class="kw">final int TAG_NOT_FOUND = Integer.MIN_VALUE;
   class="kw">private class="kw">static class="kw">final Map<Class<? class="kw">extends JsonAssetWithMap>, AssetStore<?, ?, ?>> storeMap = new HashMap<>();
   class="kw">private class="kw">static class="kw">final Map<Class<? class="kw">extends JsonAssetWithMap>, AssetStore<?, ?, ?>> storeMapUnmodifiable = Collections.unmodifiableMap(storeMap);
   class="kw">private class="kw">static class="kw">final AtomicInteger NEXT_TAG_INDEX = new AtomicInteger();
   class="kw">private class="kw">static class="kw">final StampedLock TAG_LOCK = new StampedLock();
   class="kw">private class="kw">static class="kw">final Object2IntMap<String> TAG_MAP = new Object2IntOpenHashMap();
   class="kw">private class="kw">static class="kw">final Object2IntMap<String> CLIENT_TAG_MAP = new Object2IntOpenHashMap();

   class="kw">public AssetRegistry() {
   }

   @Nonnull
   class="kw">public class="kw">static Map<Class<? class="kw">extends JsonAssetWithMap>, AssetStore<?, ?, ?>> getStoreMap() {
      class="kw">return storeMapUnmodifiable;
   }

   class="kw">public class="kw">static <K, T class="kw">extends JsonAssetWithMap<K, M>, M class="kw">extends AssetMap<K, T>> AssetStore<K, T, M> getAssetStore(Class<T> var0) {
      class="kw">return (AssetStore<K, T, M>)storeMap.get(var0);
   }

   @Nonnull
   class="kw">public class="kw">static <K, T class="kw">extends JsonAssetWithMap<K, M>, M class="kw">extends AssetMap<K, T>, S class="kw">extends AssetStore<K, T, M>> S register(@Nonnull S var0) {
      ASSET_LOCK.writeLock().lock();

      try {
         if (storeMap.putIfAbsent(var0.getAssetClass(), var0) != null) {
            throw new IllegalArgumentException("Asset Store already exists for " + var0.getAssetClass());
         }
      } class="kw">finally {
         ASSET_LOCK.writeLock().unlock();
      }

      IEventDispatcher var1 = var0.getEventBus().dispatchFor(RegisterAssetStoreEvent.class);
      if (var1.hasListener()) {
         var1.dispatch(new RegisterAssetStoreEvent(var0));
      }

      class="kw">return var0;
   }

   class="kw">public class="kw">static <K, T class="kw">extends JsonAssetWithMap<K, M>, M class="kw">extends AssetMap<K, T>, S class="kw">extends AssetStore<K, T, M>> void unregister(@Nonnull S var0) {
      ASSET_LOCK.writeLock().lock();

      try {
         storeMap.remove(var0.getAssetClass());
      } class="kw">finally {
         ASSET_LOCK.writeLock().unlock();
      }

      IEventDispatcher var1 = var0.getEventBus().dispatchFor(RemoveAssetStoreEvent.class);
      if (var1.hasListener()) {
         var1.dispatch(new RemoveAssetStoreEvent(var0));
      }
   }

   class="kw">public class="kw">static int getTagIndex(@Nonnull String var0) {
      if (var0 == null) {
         throw new IllegalArgumentException("tag can't be null!");
      }

      long var1 = TAG_LOCK.readLock();

      try {
         class="kw">return TAG_MAP.getInt(var0);
      } class="kw">finally {
         TAG_LOCK.unlockRead(var1);
      }
   }

   class="kw">public class="kw">static int getOrCreateTagIndex(@Nonnull String var0) {
      if (var0 == null) {
         throw new IllegalArgumentException("tag can't be null!");
      }

      long var1 = TAG_LOCK.writeLock();

      try {
         class="kw">return TAG_MAP.computeIfAbsent(var0.intern(), var0x -> NEXT_TAG_INDEX.getAndIncrement());
      } class="kw">finally {
         TAG_LOCK.unlockWrite(var1);
      }
   }

   class="kw">public class="kw">static boolean registerClientTag(@Nonnull String var0) {
      if (var0 == null) {
         throw new IllegalArgumentException("tag can't be null!");
      }

      long var1 = TAG_LOCK.writeLock();

      try {
         class="kw">return CLIENT_TAG_MAP.put(var0, TAG_MAP.computeIfAbsent(var0, var0x -> NEXT_TAG_INDEX.getAndIncrement())) == Integer.MIN_VALUE;
      } class="kw">finally {
         TAG_LOCK.unlockWrite(var1);
      }
   }

   @Nonnull
   class="kw">public class="kw">static Object2IntMap<String> getClientTags() {
      long var0 = TAG_LOCK.readLock();

      try {
         class="kw">return new Object2IntOpenHashMap(CLIENT_TAG_MAP);
      } class="kw">finally {
         TAG_LOCK.unlockRead(var0);
      }
   }

   class="kw">static {
      TAG_MAP.defaultReturnValue(Integer.MIN_VALUE);
      CLIENT_TAG_MAP.defaultReturnValue(Integer.MIN_VALUE);
   }
}