RoleChangeSystem class

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

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

extends: TickingSystem<EntityStore>

Поля (23)

МодификаторыТипИмя
break
private final boolean changeAppearance
private final boolean detachFromSpawning
private final Ref<EntityStore> reference
private final Deque<RoleChangeSystem.RoleChangeRequest> requests
return
private final int roleIndex
private final String state
private final String subState
RoleChangeSystem.RoleChangeQueue var1
Role var10
Role var12
RoleChangeSystem.RoleChangeQueue var4
Deque var5
RoleChangeSystem.RoleChangeRequest var6
var6
Holder var7
NPCEntity var8
var8
RoleChangeSystem.RoleChangeQueue var8
Ref var9
var9
Deque var9

Методы (15)

МодификаторыВозвратСигнатура
public RoleChangeQueuepublic RoleChangeQueue()
private RoleChangeRequestprivate RoleChangeRequest(@Nonnull Ref<EntityStore> var1, int var2, boolean var3, @Nullable String var4, @Nullable String var5, boolean var6)
public Resource<EntityStore> clonepublic Resource<EntityStore> clone()
public static ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> getResourceTypepublic static ResourceType<EntityStore, RoleChangeSystem.RoleChangeQueue> getResourceType()
if if(var6.detachFromSpawning)
if if(var6.changeAppearance)
if if(var6.state != null)
if if(var12 != null)
static void requestRoleChangevoid requestRoleChange(@Nonnull Ref<EntityStore> var0, @Nonnull Role var1, int var2, boolean var3, @Nonnull Store<EntityStore> var4)
static void requestRoleChangevoid requestRoleChange(@Nonnull Ref<EntityStore> var0, @Nonnull Role var1, int var2, boolean var3, @Nullable String var4, @Nullable String var5, @Nonnull ComponentAccessor<EntityStore> var6)
static void requestRoleChangevoid requestRoleChange(@Nonnull Ref<EntityStore> var0, @Nonnull Role var1, int var2, boolean var3, @Nullable String var4, @Nullable String var5, boolean var6, @Nonnull ComponentAccessor<EntityStore> var7)
abstract requestRoleChange requestRoleChange(var0, var1, var2, var3, null, null, var4)
abstract requestRoleChange requestRoleChange(var0, var1, var2, var3, var4, var5, false, var6)
while while(true)
while while(true)

Исходный код

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