EntityStore class

Пакет: com.hypixel.hytale.server.core.universe.world.storage

Файл: com/hypixel/hytale/server/core/universe/world/storage/EntityStore.java

implements: WorldProvider

Поля (10)

МодификаторыТипИмя
private static final HytaleLogger LOGGER
EntityStore var5
EntityStore var5
UUIDComponent var5
UUIDComponent var5
NetworkId var6
NetworkId var6
Ref var6
int var7
var7

Методы (13)

МодификаторыВозвратСигнатура
public NetworkIdSystempublic NetworkIdSystem()
public UUIDSystempublic UUIDSystem()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Store<EntityStore> getStoreStore<EntityStore> getStore()
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 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)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void shutdownvoid shutdown()
public void startvoid start(@Nonnull IResourceStorage var1)
public int takeNextNetworkIdint takeNextNetworkId()

Исходный код

Показать/скрыть
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);
      }
   }
}