PlayerRegenerateStatsSystem class

Пакет: com.hypixel.hytale.server.core.modules.entitystats

Файл: com/hypixel/hytale/server/core/modules/entitystats/EntityStatsModule.java

extends: EntityStatsSystems.Regenerate<Player>

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entitystats;

class="kw">import com.hypixel.hytale.assetstore.AssetMap;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.JsonAsset;
class="kw">import com.hypixel.hytale.assetstore.event.LoadedAssetsEvent;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.SystemType;
class="kw">import com.hypixel.hytale.server.core.asset.HytaleAssetStore;
class="kw">import com.hypixel.hytale.server.core.asset.type.entityeffect.config.EntityEffect;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.asset.type.particle.config.ParticleSystem;
class="kw">import com.hypixel.hytale.server.core.asset.type.soundevent.config.SoundEvent;
class="kw">import com.hypixel.hytale.server.core.entity.Entity;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.entity.AllLegacyLivingEntityTypesQuery;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.asset.DefaultEntityStatTypes;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.asset.EntityStatType;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.asset.EntityStatTypePacketGenerator;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.modifier.Modifier;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.modifier.StaticModifier;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.InteractionModule;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.ints.Int2FloatMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2FloatMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import it.unimi.dsi.fastutil.objects.Object2FloatMap.Entry;
class="kw">import java.util.Arrays;
class="kw">import java.util.Collections;
class="kw">import java.util.Map;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class EntityStatsModule class="kw">extends JavaPlugin {
   class="kw">public class="kw">static class="kw">final PluginManifest MANIFEST = PluginManifest.corePlugin(EntityStatsModule.class)
      .depends(EntityModule.class)
      .depends(InteractionModule.class)
      .build();
   class="kw">private class="kw">static EntityStatsModule instance;
   class="kw">private ComponentType<EntityStore, EntityStatMap> entityStatMapComponentType;
   class="kw">private SystemType<EntityStore, EntityStatsSystems.StatModifyingSystem> statModifyingSystemType;

   class="kw">public class="kw">static EntityStatsModule get() {
      class="kw">return instance;
   }

   class="kw">public EntityStatsModule(@Nonnull JavaPluginInit var1) {
      super(var1);
      instance = this;
   }

   @Override
   class="kw">protected void setup() {
      Modifier.CODEC.register("Boost", StaticModifier.class, StaticModifier.ENTITY_CODEC);
      Modifier.CODEC.register("Static", StaticModifier.class, StaticModifier.ENTITY_CODEC);
      AssetRegistry.register(
         ((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(
                                 EntityStatType.class, new IndexedLookupTableAssetMap<>(EntityStatType[]::new)
                              )
                              .setPath("Entity/Stats"))
                           .setCodec(EntityStatType.CODEC))
                        .setKeyFunction(EntityStatType::getId))
                     .setPacketGenerator(new EntityStatTypePacketGenerator())
                     .setReplaceOnRemove(EntityStatType::getUnknownFor))
                  .preLoadAssets(Collections.singletonList(EntityStatType.UNKNOWN)))
               .loadsAfter(SoundEvent.class, ParticleSystem.class))
            .build()
      );
      this.getEventRegistry().register(LoadedAssetsEvent.class, EntityStatType.class, this::onLoadedAssetsEvent);
      this.statModifyingSystemType = this.getEntityStoreRegistry().registerSystemType(EntityStatsSystems.StatModifyingSystem.class);
      this.entityStatMapComponentType = this.getEntityStoreRegistry().registerComponent(EntityStatMap.class, "EntityStats", EntityStatMap.CODEC);
      this.getEntityStoreRegistry().registerSystem(new EntityStatsSystems.Setup(this.entityStatMapComponentType));
      this.getEntityStoreRegistry().registerSystem(new EntityStatsModule.PlayerRegenerateStatsSystem());
      this.getEntityStoreRegistry().registerSystem(new EntityStatsSystems.Recalculate(this.entityStatMapComponentType));
      this.getEntityStoreRegistry().registerSystem(new EntityStatsSystems.EntityTrackerUpdate(this.entityStatMapComponentType));
      this.getEntityStoreRegistry().registerSystem(new EntityStatsSystems.EntityTrackerRemove(this.entityStatMapComponentType));
      this.getEntityStoreRegistry().registerSystem(new EntityStatsSystems.Changes(this.entityStatMapComponentType));
      this.getEntityStoreRegistry().registerSystem(new EntityStatsSystems.ClearChanges(this.entityStatMapComponentType));
      this.getEventRegistry().register(LoadedAssetsEvent.class, Item.class, var0 -> onLoadedAssetsInvalidate(var0));
      this.getEventRegistry().register(LoadedAssetsEvent.class, EntityEffect.class, var0 -> onLoadedAssetsInvalidate(var0));
   }

   @Override
   class="kw">protected void start() {
      DefaultEntityStatTypes.update();
      if (DefaultEntityStatTypes.getHealth() == Integer.MIN_VALUE
         || DefaultEntityStatTypes.getOxygen() == Integer.MIN_VALUE
         || DefaultEntityStatTypes.getMana() == Integer.MIN_VALUE
         || DefaultEntityStatTypes.getStamina() == Integer.MIN_VALUE
         || DefaultEntityStatTypes.getSignatureEnergy() == Integer.MIN_VALUE
         || DefaultEntityStatTypes.getAmmo() == Integer.MIN_VALUE) {
         throw new IllegalStateException("Missing class="kw">default EntityStatType");
      }
   }

   @Nullable
   @Deprecated(forRemoval = true)
   class="kw">public class="kw">static EntityStatMap get(@Nonnull Entity var0) {
      Ref var1 = var0.getReference();
      if (var1 != null && var1.isValid()) {
         Store var2 = var1.getStore();
         class="kw">return var2.getComponent(var1, get().getEntityStatMapComponentType());
      } else {
         class="kw">return null;
      }
   }

   class="kw">private void onLoadedAssetsEvent(LoadedAssetsEvent<String, EntityStatType, IndexedLookupTableAssetMap<String, EntityStatType>> var1) {
      DefaultEntityStatTypes.update();
      Universe.get()
         .getWorlds()
         .forEach(
            (var0, var1x) -> var1x.execute(
               () -> {
                  Store var1 = var1x.getEntityStore().getStore();
                  var1.forEachEntityParallel(
                     EntityStatMap.getComponentType(), (var0x, var1xx, var2) -> var1xx.getComponent(var0x, EntityStatMap.getComponentType()).update()
                  );
               }
            )
         );
   }

   class="kw">private class="kw">static <K, T class="kw">extends JsonAsset<K>, M class="kw">extends AssetMap<K, T>> void onLoadedAssetsInvalidate(LoadedAssetsEvent<K, T, M> var0) {
      Universe.get().getWorlds().forEach((var0x, var1) -> var1.execute(() -> {
         World var1 = var1.getEntityStore().getStore();
         var1.forEachEntityParallel(AllLegacyLivingEntityTypesQuery.INSTANCE, (var0xx, var1x, var2) -> {
            EntityStatMap var3 = var1x.getComponent(var0xx, EntityStatMap.getComponentType());
            if (var3 != null) {
               var3.getStatModifiersManager().scheduleRecalculate();
            }
         });
      }));
   }

   @Nullable
   class="kw">public class="kw">static Int2FloatMap resolveEntityStats(@Nullable Object2FloatMap<String> var0) {
      if (var0 != null && !var0.isEmpty()) {
         Int2FloatMap var1 = null;
         ObjectIterator var2 = var0.object2FloatEntrySet().iterator();

         while (var2.hasNext()) {
            Entry var3 = (Entry<String>)var2.next();
            int var4 = EntityStatType.getAssetMap().getIndex((String)var3.getKey());
            if (var4 != Integer.MIN_VALUE) {
               if (var1 == null) {
                  var1 = new Int2FloatOpenHashMap();
               }

               var1.put(var4, var3.getFloatValue());
            }
         }

         class="kw">return var1;
      } else {
         class="kw">return null;
      }
   }

   @Nullable
   class="kw">public class="kw">static <T> Int2ObjectMap<T> resolveEntityStats(@Nullable Map<String, T> var0) {
      if (var0 != null && !var0.isEmpty()) {
         Int2ObjectMap var1 = null;

         for (java.util.Map.Entry var3 : var0.entrySet()) {
            int var4 = EntityStatType.getAssetMap().getIndex(var3.getKey());
            if (var4 != Integer.MIN_VALUE) {
               if (var1 == null) {
                  var1 = new Int2ObjectOpenHashMap();
               }

               var1.put(var4, var3.getValue());
            }
         }

         class="kw">return var1;
      } else {
         class="kw">return null;
      }
   }

   @Nullable
   class="kw">public class="kw">static int[] resolveEntityStats(@Nullable String[] var0) {
      if (var0 != null && var0.length != 0) {
         int[] var1 = new int[var0.length];
         int var2 = 0;

         for (int var3 = 0; var3 < var0.length; var3++) {
            int var4 = EntityStatType.getAssetMap().getIndex(var0[var3]);
            if (var4 != Integer.MIN_VALUE) {
               var1[var2++] = var4;
            }
         }

         if (var2 != var0.length) {
            var1 = Arrays.copyOf(var1, var2);
         }

         class="kw">return var1;
      } else {
         class="kw">return null;
      }
   }

   class="kw">public ComponentType<EntityStore, EntityStatMap> getEntityStatMapComponentType() {
      class="kw">return this.entityStatMapComponentType;
   }

   class="kw">public SystemType<EntityStore, EntityStatsSystems.StatModifyingSystem> getStatModifyingSystemType() {
      class="kw">return this.statModifyingSystemType;
   }

   class="kw">public class PlayerRegenerateStatsSystem class="kw">extends EntityStatsSystems.Regenerate<Player> {
      class="kw">public PlayerRegenerateStatsSystem() {
         super(EntityStatsModule.this.entityStatMapComponentType, Player.getComponentType());
      }
   }
}