DynamicMetaStore.java
package com.hypixel.hytale.server.core.meta;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class DynamicMetaStore<K> extends AbstractMetaStore<K> {
@Nonnull
private final Int2ObjectMap<Object> map;
public DynamicMetaStore(K parent, IMetaRegistry<K> registry) {
this(parent, registry, false);
}
public DynamicMetaStore(K parent, IMetaRegistry<K> registry, boolean bypassEncodedCache) {
super(parent, registry, bypassEncodedCache);
this.map = new Int2ObjectOpenHashMap<Object>();
}
protected <T> T get0(@Nonnull MetaKey<T> key) {
return (T)this.map.get(key.getId());
}
public <T> T getMetaObject(@Nonnull MetaKey<T> key) {
T o (T).get0(key);
(o == ) {
.map.put(key.getId(), o = (T).decodeOrNewMetaObject(key));
}
o;
}
<T> T {
(T).get0(key);
}
<T> T {
.markMetaStoreDirty();
(T).map.put(key.getId(), obj);
}
<T> T {
.markMetaStoreDirty();
(T).map.remove(key.getId());
}
<T> T {
.markMetaStoreDirty();
(key PersistentMetaKey) {
.tryDecodeUnknownKey((PersistentMetaKey)key);
}
(T).removeMetaObject(key);
}
{
.map.containsKey(key.getId());
}
{
(Int2ObjectMap.Entry entry : .map.int2ObjectEntrySet()) {
consumer.accept(entry.getIntKey(), entry.getValue());
}
}
DynamicMetaStore<K> {
DynamicMetaStore<K> clone = <K>(parent, .registry);
clone.map.putAll(.map);
clone;
}
{
.markMetaStoreDirty();
(.registry != other.registry) {
();
} {
.map.putAll(other.map);
}
}
}