NetworkIdSystem class

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

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

extends: RefSystem<EntityStore>

Поля (6)

МодификаторыТипИмя
EntityStore var5
EntityStore var5
NetworkId var6
NetworkId var6
int var7
var7

Методы (3)

МодификаторыВозвратСигнатура
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
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);
      }
   }
}