FlockPlugin class

Пакет: com.hypixel.hytale.server.flock

Файл: com/hypixel/hytale/server/flock/FlockPlugin.java

extends: JavaPlugin

Поля (36)

МодификаторыТипИмя
static FlockPlugin instance
instance
private final FlockPlugin plugin
ComponentRegistryProxy var1
Role var10
FlockMembership var11
Ref var12
BoundingBox var13
TransformComponent var14
Box var15
Rotation3f var16
double var17
int var19
FlockMembership var2
FlockMembership var2
FlockMembership var2
double var20
double var22
boolean var24
int[] var25
int var26
int var27
var27
int var28
var28
var28
Ref var3
Holder var3
Pair var30
Ref var31
BoundingBox var32
TransformComponent var33
HeadRotation var34
double var35
Ref var4
int var8

Методы (20)

МодификаторыВозвратСигнатура
PrefabPasteEventSystem PrefabPasteEventSystem(@Nonnull FlockPlugin var1)
abstract throw new UnsupportedOperationExceptionthrow new UnsupportedOperationException("Not implemented")
abstract throw new UnsupportedOperationExceptionthrow new UnsupportedOperationException("Unable to handle non-spawned flock!")
for for(int var29 = 1; var29 < var5; var29++)
static FlockPlugin getFlockPlugin get()
public ComponentType<EntityStore, Flock> getFlockComponentTypeComponentType<EntityStore, Flock> getFlockComponentType()
public ComponentType<EntityStore, FlockMembership> getFlockMembershipComponentTypeComponentType<EntityStore, FlockMembership> getFlockMembershipComponentType()
public ComponentType<EntityStore, PersistentFlockData> getPersistentFlockDataComponentTypeComponentType<EntityStore, PersistentFlockData> getPersistentFlockDataComponentType()
public void handlepublic void handle(@Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull PrefabPasteEvent var3)
if if(var11 == null)
if if(var26 > 0)
if if(var24)
if if(var30 != null)
if if(var2 == null)
if if(var4 == null)
static boolean isFlockMemberboolean isFlockMember(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1)
abstract super super(var1)
abstract super super(PrefabPasteEvent.class)
abstract return trySpawnFlockreturn trySpawnFlock(var0, var1, var3, var4, var5, var8, var6, null, var7, var2)
abstract return trySpawnFlockreturn trySpawnFlock(var0, var1, var3, var4, var5, var6, null, null, var7, var2)

Исходный код

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

class="kw">import com.hypixel.fastutil.ints.Int2ObjectConcurrentHashMap;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentRegistryProxy;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.system.WorldEventSystem;
class="kw">import com.hypixel.hytale.function.consumer.TriConsumer;
class="kw">import com.hypixel.hytale.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Rotation3fc;
class="kw">import com.hypixel.hytale.server.core.asset.HytaleAssetStore;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.group.EntityGroup;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
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.prefab.event.PrefabPasteEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.flock.config.FlockAsset;
class="kw">import com.hypixel.hytale.server.flock.config.RangeSizeFlockAsset;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockBeacon;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockJoin;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockLeave;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockSetTarget;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderActionFlockState;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderBodyMotionFlock;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderEntityFilterFlock;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderSensorFlockCombatDamage;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderSensorFlockLeader;
class="kw">import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderSensorInflictedDamage;
class="kw">import com.hypixel.hytale.server.flock.decisionmaker.conditions.FlockSizeCondition;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.decisionmaker.core.conditions.base.Condition;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import com.hypixel.hytale.server.npc.systems.PositionCacheSystems;
class="kw">import it.unimi.dsi.fastutil.Pair;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3dc;

class="kw">public class FlockPlugin class="kw">extends JavaPlugin {
   class="kw">private class="kw">static FlockPlugin instance;
   class="kw">private class="kw">final Int2ObjectConcurrentHashMap<Map<UUID, UUID>> prefabFlockRemappings = new Int2ObjectConcurrentHashMap<>();
   class="kw">private ComponentType<EntityStore, Flock> flockComponentType;
   class="kw">private ComponentType<EntityStore, FlockMembership> flockMembershipComponentType;
   class="kw">private ComponentType<EntityStore, PersistentFlockData> persistentFlockDataComponentType;

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

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

   @Override
   class="kw">public void setup() {
      instance = this;
      ComponentRegistryProxy var1 = this.getEntityStoreRegistry();
      AssetRegistry.register(
         ((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(
                           FlockAsset.class, new IndexedLookupTableAssetMap<>(FlockAsset[]::new)
                        )
                        .setPath("NPC/Flocks"))
                     .setCodec(FlockAsset.CODEC))
                  .setKeyFunction(FlockAsset::getId))
               .setReplaceOnRemove(RangeSizeFlockAsset::getUnknownFor))
            .build()
      );
      this.getEntityStoreRegistry().registerSystem(new FlockPlugin.PrefabPasteEventSystem(this));
      NPCPlugin.get()
         .registerCoreComponentType("Flock", BuilderBodyMotionFlock::new)
         .registerCoreComponentType("JoinFlock", BuilderActionFlockJoin::new)
         .registerCoreComponentType("LeaveFlock", BuilderActionFlockLeave::new)
         .registerCoreComponentType("FlockState", BuilderActionFlockState::new)
         .registerCoreComponentType("FlockTarget", BuilderActionFlockSetTarget::new)
         .registerCoreComponentType("FlockBeacon", BuilderActionFlockBeacon::new)
         .registerCoreComponentType("Flock", BuilderEntityFilterFlock::new)
         .registerCoreComponentType("FlockCombatDamage", BuilderSensorFlockCombatDamage::new)
         .registerCoreComponentType("InflictedDamage", BuilderSensorInflictedDamage::new)
         .registerCoreComponentType("FlockLeader", BuilderSensorFlockLeader::new);
      Condition.CODEC.register("FlockSize", FlockSizeCondition.class, FlockSizeCondition.CODEC);
      this.flockComponentType = var1.registerComponent(Flock.class, () -> {
         throw new UnsupportedOperationException("Not implemented");
      });
      var1.registerSystem(new FlockSystems.EntityRemoved(this.flockComponentType));
      var1.registerSystem(new FlockSystems.Ticking(this.flockComponentType));
      var1.registerSystem(new FlockSystems.FlockDebugSystem(this.flockComponentType));
      var1.registerSystem(new FlockSystems.PlayerChangeGameModeEventSystem());
      this.flockMembershipComponentType = var1.registerComponent(FlockMembership.class, "FlockMembership", FlockMembership.CODEC);
      this.persistentFlockDataComponentType = var1.registerComponent(PersistentFlockData.class, "FlockData", PersistentFlockData.CODEC);
      var1.registerSystem(new FlockMembershipSystems.EntityRef(this.flockMembershipComponentType));
      var1.registerSystem(new FlockMembershipSystems.RefChange(this.flockMembershipComponentType));
      var1.registerSystem(new PositionCacheSystems.OnFlockJoinSystem(NPCEntity.getComponentType(), this.flockMembershipComponentType));
      var1.registerSystem(new FlockDeathSystems.EntityDeath());
      var1.registerSystem(new FlockDeathSystems.PlayerDeath());
      var1.registerSystem(new FlockMembershipSystems.FilterPlayerFlockDamageSystem());
      var1.registerSystem(new FlockMembershipSystems.OnDamageReceived());
      var1.registerSystem(new FlockMembershipSystems.OnDamageDealt());
      var1.registerSystem(new FlockMembershipSystems.NPCAddedFromWorldGen());
   }

   @Override
   class="kw">public void start() {
   }

   @Override
   class="kw">public void shutdown() {
   }

   class="kw">public ComponentType<EntityStore, Flock> getFlockComponentType() {
      class="kw">return this.flockComponentType;
   }

   class="kw">public ComponentType<EntityStore, FlockMembership> getFlockMembershipComponentType() {
      class="kw">return this.flockMembershipComponentType;
   }

   class="kw">public ComponentType<EntityStore, PersistentFlockData> getPersistentFlockDataComponentType() {
      class="kw">return this.persistentFlockDataComponentType;
   }

   @Nonnull
   class="kw">public UUID getPrefabRemappedFlockReference(int var1, UUID var2) {
      class="kw">return this.prefabFlockRemappings.get(var1).computeIfAbsent(var2, var0 -> UUID.randomUUID());
   }

   @Nullable
   class="kw">public class="kw">static Ref<EntityStore> trySpawnFlock(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull NPCEntity var1,
      @Nonnull Store<EntityStore> var2,
      int var3,
      @Nonnull Vector3dc var4,
      Rotation3fc var5,
      @Nullable FlockAsset var6,
      TriConsumer<NPCEntity, Ref<EntityStore>, Store<EntityStore>> var7
   ) {
      int var8 = var6 != null ? var6.pickFlockSize() : 1;
      class="kw">return trySpawnFlock(var0, var1, var3, var4, var5, var8, var6, null, var7, var2);
   }

   @Nullable
   class="kw">public class="kw">static Ref<EntityStore> trySpawnFlock(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull NPCEntity var1,
      @Nonnull Store<EntityStore> var2,
      int var3,
      @Nonnull Vector3dc var4,
      Rotation3fc var5,
      int var6,
      TriConsumer<NPCEntity, Ref<EntityStore>, Store<EntityStore>> var7
   ) {
      class="kw">return trySpawnFlock(var0, var1, var3, var4, var5, var6, null, null, var7, var2);
   }

   @Nullable
   class="kw">public class="kw">static Ref<EntityStore> trySpawnFlock(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull NPCEntity var1,
      int var2,
      @Nonnull Vector3dc var3,
      Rotation3fc var4,
      int var5,
      FlockAsset var6,
      TriConsumer<NPCEntity, Holder<EntityStore>, Store<EntityStore>> var7,
      @Nullable TriConsumer<NPCEntity, Ref<EntityStore>, Store<EntityStore>> var8,
      @Nonnull Store<EntityStore> var9
   ) {
      if (var5 > 1 && var0.isValid()) {
         Role var10 = var1.getRole();
         assert var10 != null;
         FlockMembership var11 = var9.getComponent(var0, FlockMembership.getComponentType());
         Ref var12 = var11 != null ? var11.getFlockRef() : createFlock(var9, var6, var10.getFlockAllowedRoles());
         if (var11 == null) {
            FlockMembershipSystems.join(var0, var12, var9);
         }

         BoundingBox var13 = var9.getComponent(var0, BoundingBox.getComponentType());
         assert var13 != null;
         TransformComponent var14 = var9.getComponent(var0, TransformComponent.getComponentType());
         assert var14 != null;
         Box var15 = var13.getBoundingBox();
         Rotation3f var16 = var14.getRotation();
         double var17 = var3.x();
         int var19 = MathUtil.floor(var3.y() + var15.min.y + 1.0E-6);
         double var20 = var3.z();
         double var22 = var16.yaw();
         boolean var24 = var10.isFlockSpawnTypesRandom();
         int[] var25 = var10.getFlockSpawnTypes();
         int var26 = var25 == null ? 0 : var25.length;
         int var27 = 0;
         int var28 = var2;

         for (int var29 = 1; var29 < var5; var29++) {
            if (var26 > 0) {
               if (var24) {
                  var28 = var25[RandomExtra.randomRange(var26)];
               } else {
                  var28 = var25[var27];
                  var27 = (var27 + 1) % var26;
               }
            }

            Pair var30 = NPCPlugin.get().spawnEntity(var9, var28, var3, var4, null, var7, var8);
            if (var30 != null) {
               Ref var31 = (Ref<EntityStore>)var30.first();
               if (var31 != null && var31.isValid()) {
                  BoundingBox var32 = var9.getComponent(var31, BoundingBox.getComponentType());
                  assert var32 != null;
                  TransformComponent var33 = var9.getComponent(var31, TransformComponent.getComponentType());
                  assert var33 != null;
                  HeadRotation var34 = var9.getComponent(var31, HeadRotation.getComponentType());
                  assert var34 != null;
                  double var35 = var19 - var32.getBoundingBox().min.y;
                  var33.getRotation().setYaw((float)(var22 + RandomExtra.randomRange((float) (-Math.PI / 4), (float) (Math.PI / 4))));
                  var34.getRotation().setPitch(0.0F);
                  var33.getPosition().set(var17 + RandomExtra.randomRange(-0.5, 0.5), var35, var20 + RandomExtra.randomRange(-0.5, 0.5));
                  FlockMembershipSystems.join(var31, var12, var9);
               }
            }
         }

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

   @Nullable
   @Deprecated
   class="kw">public class="kw">static Flock getFlock(@Nonnull ComponentAccessor<EntityStore> var0, @Nonnull Ref<EntityStore> var1) {
      FlockMembership var2 = var0.getComponent(var1, FlockMembership.getComponentType());
      if (var2 == null) {
         class="kw">return null;
      }

      Ref var3 = var2.getFlockRef();
      class="kw">return var3 != null && var3.isValid() ? var0.getComponent(var3, Flock.getComponentType()) : null;
   }

   @Nonnull
   class="kw">public class="kw">static Ref<EntityStore> createFlock(@Nonnull Store<EntityStore> var0, @Nonnull Role var1) {
      class="kw">return createFlock(var0, null, var1.getFlockAllowedRoles());
   }

   @Nonnull
   class="kw">public class="kw">static Ref<EntityStore> createFlock(@Nonnull Store<EntityStore> var0, @Nullable FlockAsset var1, @Nonnull String[] var2) {
      Holder var3 = EntityStore.REGISTRY.newHolder();
      var3.addComponent(UUIDComponent.getComponentType(), UUIDComponent.randomUUID());
      var3.addComponent(EntityGroup.getComponentType(), new EntityGroup());
      var3.addComponent(Flock.getComponentType(), new Flock(var1, var2));
      Ref var4 = var0.addEntity(var3, AddReason.SPAWN);
      if (var4 == null) {
         throw new UnsupportedOperationException("Unable to handle non-spawned flock!");
      } else {
         class="kw">return var4;
      }
   }

   @Nullable
   class="kw">public class="kw">static Ref<EntityStore> getFlockReference(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
      FlockMembership var2 = var1.getComponent(var0, FlockMembership.getComponentType());
      class="kw">return var2 == null ? null : var2.getFlockRef();
   }

   class="kw">public class="kw">static boolean isFlockMember(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1) {
      FlockMembership var2 = var1.getComponent(var0, FlockMembership.getComponentType());
      class="kw">return var2 != null;
   }

   class="kw">private class="kw">static class="kw">final class PrefabPasteEventSystem class="kw">extends WorldEventSystem<EntityStore, PrefabPasteEvent> {
      class="kw">private class="kw">final FlockPlugin plugin;

      PrefabPasteEventSystem(@Nonnull FlockPlugin var1) {
         super(PrefabPasteEvent.class);
         this.plugin = var1;
      }

      class="kw">public void handle(@Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull PrefabPasteEvent var3) {
         if (var3.isPasteStart()) {
            this.plugin.prefabFlockRemappings.put(var3.getPrefabId(), new HashMap<>());
         } else {
            this.plugin.prefabFlockRemappings.remove(var3.getPrefabId());
         }
      }
   }
}