UUIDSystem class
Пакет: com.hypixel.hytale.server.core.universe.world.storage
Файл: com/hypixel/hytale/server/core/universe/world/storage/EntityStore.java
extends: RefSystem<EntityStore>
Поля (4)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private static final HytaleLogger |
LOGGER |
|
UUIDComponent |
var5 |
|
UUIDComponent |
var5 |
|
Ref |
var6 |
Методы (4)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
|
if if(var6 != null) |
|
public void |
onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
public void |
onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.storage;
class="kw">import com.hypixel.hytale.codec.store.CodecKey;
class="kw">import com.hypixel.hytale.codec.store.CodecStore;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentRegistry;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.IResourceStorage;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.SystemGroup;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.metrics.MetricsRegistry;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.WorldProvider;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ReferenceMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ReferenceOpenHashMap;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class EntityStore class="kw">implements WorldProvider {
@Nonnull
class="kw">public class="kw">static class="kw">final MetricsRegistry<EntityStore> METRICS_REGISTRY = new MetricsRegistry<EntityStore>()
.register("Store", EntityStore::getStore, Store.METRICS_REGISTRY);
@Nonnull
class="kw">public class="kw">static class="kw">final ComponentRegistry<EntityStore> REGISTRY = new ComponentRegistry<>();
@Nonnull
class="kw">public class="kw">static class="kw">final CodecKey<Holder<EntityStore>> HOLDER_CODEC_KEY = new CodecKey<>("EntityHolder");
@Nonnull
class="kw">public class="kw">static class="kw">final SystemGroup<EntityStore> SEND_PACKET_GROUP = REGISTRY.registerSystemGroup();
@Nonnull
class="kw">private class="kw">final AtomicInteger networkIdCounter = new AtomicInteger(1);
@Nonnull
class="kw">private class="kw">final World world;
class="kw">private Store<EntityStore> store;
@Nonnull
class="kw">private class="kw">final Map<UUID, Ref<EntityStore>> entitiesByUuid = new ConcurrentHashMap<>();
@Nonnull
class="kw">private class="kw">final Int2ReferenceMap<Ref<EntityStore>> networkIdToRef = new Int2ReferenceOpenHashMap();
class="kw">public EntityStore(@Nonnull World var1) {
this.world = var1;
}
class="kw">public void start(@Nonnull IResourceStorage var1) {
this.store = REGISTRY.addStore(this, var1, var1x -> this.store = var1x);
}
class="kw">public void shutdown() {
this.store.shutdown();
this.entitiesByUuid.clear();
}
class="kw">public Store<EntityStore> getStore() {
class="kw">return this.store;
}
@Nullable
class="kw">public Ref<EntityStore> getRefFromUUID(@Nonnull UUID var1) {
class="kw">return this.entitiesByUuid.get(var1);
}
@Nullable
class="kw">public Ref<EntityStore> getRefFromNetworkId(int var1) {
class="kw">return (Ref<EntityStore>)this.networkIdToRef.get(var1);
}
class="kw">public int takeNextNetworkId() {
class="kw">return this.networkIdCounter.getAndIncrement();
}
@Nonnull
@Override
class="kw">public World getWorld() {
class="kw">return this.world;
}
class="kw">static {
CodecStore.STATIC.putCodecSupplier(HOLDER_CODEC_KEY, REGISTRY::getEntityCodec);
}
class="kw">public class="kw">static class NetworkIdSystem class="kw">extends RefSystem<EntityStore> {
class="kw">public NetworkIdSystem() {
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return NetworkId.getComponentType();
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
EntityStore var5 = var3.getExternalData();
NetworkId var6 = var4.getComponent(var1, NetworkId.getComponentType());
assert var6 != null;
int var7 = var6.getId();
if (var5.networkIdToRef.putIfAbsent(var7, var1) != null) {
var7 = var5.takeNextNetworkId();
var4.putComponent(var1, NetworkId.getComponentType(), new NetworkId(var7));
var5.networkIdToRef.put(var7, var1);
}
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
EntityStore var5 = var3.getExternalData();
NetworkId var6 = var4.getComponent(var1, NetworkId.getComponentType());
assert var6 != null;
var5.networkIdToRef.remove(var6.getId(), var1);
}
}
class="kw">public class="kw">static class UUIDSystem class="kw">extends RefSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">public UUIDSystem() {
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return UUIDComponent.getComponentType();
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
UUIDComponent var5 = var4.getComponent(var1, UUIDComponent.getComponentType());
assert var5 != null;
Ref var6 = var3.getExternalData().entitiesByUuid.putIfAbsent(var5.getUuid(), var1);
if (var6 != null) {
LOGGER.at(Level.WARNING).log("Removing duplicate entity with UUID: %s", var5.getUuid());
var4.removeEntity(var1, RemoveReason.REMOVE);
}
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
UUIDComponent var5 = var4.getComponent(var1, UUIDComponent.getComponentType());
assert var5 != null;
var3.getExternalData().entitiesByUuid.remove(var5.getUuid(), var1);
}
}
}