RoleChangeQueue class

Пакет: com.hypixel.hytale.server.npc.systems

Файл: com/hypixel/hytale/server/npc/systems/RoleChangeSystem.java

implements: Resource<EntityStore>

Поля (2)

МодификаторыТипИмя
private final Deque<RoleChangeSystem.RoleChangeRequest> requests
RoleChangeSystem.RoleChangeQueue var1

Методы (2)

МодификаторыВозвратСигнатура
public Resource<EntityStore> clonepublic Resource<EntityStore> clone()
public static ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> getResourceTypepublic static ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> getResourceType()

Исходный код

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

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
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.RemoveReason;
class="kw">import com.hypixel.hytale.component.Resource;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.system.tick.TickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.modules.entity.repulsion.Repulsion;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.components.Timers;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.BeaconSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.NPCBlockEventSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.NPCEntityEventSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.PlayerBlockEventSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.PlayerEntityEventSupport;
class="kw">import com.hypixel.hytale.server.npc.decisionmaker.stateevaluator.StateEvaluator;
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.role.support.StateSupport;
class="kw">import com.hypixel.hytale.server.npc.valuestore.ValueStore;
class="kw">import java.util.ArrayDeque;
class="kw">import java.util.Deque;
class="kw">import java.util.Set;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class RoleChangeSystem class="kw">extends TickingSystem<EntityStore> {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">private class="kw">final ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> roleChangeQueueResourceType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, BeaconSupport> beaconSupportComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, PlayerBlockEventSupport> playerBlockEventSupportComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, NPCBlockEventSupport> npcBlockEventSupportComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, PlayerEntityEventSupport> playerEntityEventSupportComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, NPCEntityEventSupport> npcEntityEventSupportComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, Timers> timersComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, StateEvaluator> stateEvaluatorComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, ValueStore> valueStoreComponentType;
   @Nonnull
   class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, NewSpawnStartTickingSystem.class));

   class="kw">public RoleChangeSystem(
      @Nonnull ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> var1,
      @Nonnull ComponentType<EntityStore, BeaconSupport> var2,
      @Nonnull ComponentType<EntityStore, PlayerBlockEventSupport> var3,
      @Nonnull ComponentType<EntityStore, NPCBlockEventSupport> var4,
      @Nonnull ComponentType<EntityStore, PlayerEntityEventSupport> var5,
      @Nonnull ComponentType<EntityStore, NPCEntityEventSupport> var6,
      @Nonnull ComponentType<EntityStore, Timers> var7,
      @Nonnull ComponentType<EntityStore, StateEvaluator> var8,
      @Nonnull ComponentType<EntityStore, ValueStore> var9
   ) {
      this.roleChangeQueueResourceType = var1;
      this.beaconSupportComponentType = var2;
      this.playerBlockEventSupportComponentType = var3;
      this.npcBlockEventSupportComponentType = var4;
      this.playerEntityEventSupportComponentType = var5;
      this.npcEntityEventSupportComponentType = var6;
      this.timersComponentType = var7;
      this.stateEvaluatorComponentType = var8;
      this.valueStoreComponentType = var9;
   }

   @Nonnull
   @Override
   class="kw">public Set<Dependency<EntityStore>> getDependencies() {
      class="kw">return this.dependencies;
   }

   @Override
   class="kw">public void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
      RoleChangeSystem.RoleChangeQueue var4 = var3.getResource(this.roleChangeQueueResourceType);
      Deque var5 = var4.requests;

      while (true) {
         RoleChangeSystem.RoleChangeRequest var6;
         NPCEntity var8;
         Ref var9;
         while (true) {
            if (var5.isEmpty()) {
               class="kw">return;
            }

            var6 = var5.poll();
            if (var6.reference.isValid()) {
               Holder var7 = var3.removeEntity(var6.reference, RemoveReason.UNLOAD);
               var8 = var7.getComponent(NPCEntity.getComponentType());
               assert var8 != null;
               var8.setRole(null);
               var7.tryRemoveComponent(this.beaconSupportComponentType);
               var7.tryRemoveComponent(this.playerBlockEventSupportComponentType);
               var7.tryRemoveComponent(this.npcBlockEventSupportComponentType);
               var7.tryRemoveComponent(this.playerEntityEventSupportComponentType);
               var7.tryRemoveComponent(this.npcEntityEventSupportComponentType);
               var7.tryRemoveComponent(this.timersComponentType);
               var7.tryRemoveComponent(this.stateEvaluatorComponentType);
               var7.tryRemoveComponent(this.valueStoreComponentType);
               var7.tryRemoveComponent(Repulsion.getComponentType());
               var8.setRoleName(NPCPlugin.get().getName(var6.roleIndex));
               var8.setRoleIndex(var6.roleIndex);
               if (var6.detachFromSpawning) {
                  var8.setSpawnConfiguration(Integer.MIN_VALUE);
                  var8.setEnvironment(Integer.MIN_VALUE);
                  var8.setSpawnRoleIndex(Integer.MIN_VALUE);
               }

               try {
                  var9 = var3.addEntity(var7, AddReason.LOAD);
                  break;
               } catch (Exception var11) {
                  LOGGER.at(Level.SEVERE).log("Failed to change role: %s", var11.getMessage());
               }
            }
         }

         if (var9 != null && var9.isValid()) {
            if (var6.changeAppearance) {
               Role var10 = var8.getRole();
               NPCEntity.setAppearance(var9, var10.getAppearanceName(), var3);
            }

            if (var6.state != null) {
               Role var12 = var8.getRole();
               if (var12 != null) {
                  StateSupport.get(var9, var3).setState(var9, var6.state, var6.subState, var3);
               }
            }
         } else {
            LOGGER.at(Level.SEVERE).log("Failed to change role: Could not re-add NPC entity to store");
         }
      }
   }

   class="kw">public class="kw">static void requestRoleChange(@Nonnull Ref<EntityStore> var0, @Nonnull Role var1, int var2, boolean var3, @Nonnull Store<EntityStore> var4) {
      requestRoleChange(var0, var1, var2, var3, null, null, var4);
   }

   class="kw">public class="kw">static void requestRoleChange(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull Role var1,
      int var2,
      boolean var3,
      @Nullable String var4,
      @Nullable String var5,
      @Nonnull ComponentAccessor<EntityStore> var6
   ) {
      requestRoleChange(var0, var1, var2, var3, var4, var5, false, var6);
   }

   class="kw">public class="kw">static void requestRoleChange(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull Role var1,
      int var2,
      boolean var3,
      @Nullable String var4,
      @Nullable String var5,
      boolean var6,
      @Nonnull ComponentAccessor<EntityStore> var7
   ) {
      RoleChangeSystem.RoleChangeQueue var8 = var7.getResource(RoleChangeSystem.RoleChangeQueue.getResourceType());
      Deque var9 = var8.requests;
      var9.add(new RoleChangeSystem.RoleChangeRequest(var0, var2, var3, var4, var5, var6));
      var1.setRoleChangeRequested();
   }

   class="kw">public class="kw">static class RoleChangeQueue class="kw">implements Resource<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final Deque<RoleChangeSystem.RoleChangeRequest> requests = new ArrayDeque<>();

      class="kw">public RoleChangeQueue() {
      }

      @Nonnull
      class="kw">public class="kw">static ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> getResourceType() {
         class="kw">return NPCPlugin.get().getRoleChangeQueueResourceType();
      }

      @Nonnull
      @Override
      class="kw">public Resource<EntityStore> clone() {
         RoleChangeSystem.RoleChangeQueue var1 = new RoleChangeSystem.RoleChangeQueue();
         var1.requests.addAll(this.requests);
         class="kw">return var1;
      }
   }

   class="kw">private class="kw">static class RoleChangeRequest {
      @Nonnull
      class="kw">private class="kw">final Ref<EntityStore> reference;
      class="kw">private class="kw">final int roleIndex;
      class="kw">private class="kw">final boolean changeAppearance;
      @Nullable
      class="kw">private class="kw">final String state;
      @Nullable
      class="kw">private class="kw">final String subState;
      class="kw">private class="kw">final boolean detachFromSpawning;

      class="kw">private RoleChangeRequest(@Nonnull Ref<EntityStore> var1, int var2, boolean var3, @Nullable String var4, @Nullable String var5, boolean var6) {
         this.reference = var1;
         this.roleIndex = var2;
         this.changeAppearance = var3;
         this.state = var4;
         this.subState = var5;
         this.detachFromSpawning = var6;
      }
   }
}