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