StateSupport class

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

Файл: com/hypixel/hytale/server/npc/role/support/StateSupport.java

implements: Component<EntityStore>

Поля (34)

МодификаторыТипИмя
final int NO_STATE
break
return
boolean var1
IntSet var1
StateSupport var2
String var2
Iterator var2
int var2
Ref var3
int var3
var3
int var3
String var3
int var4
Player var4
int var4
Store var4
var4
int var5
int var5
int var5
Ref var5
NPCEntity var5
EntityTrackerSystems.EntityViewer var5
int var6
EntityGroup var6
InteractableUpdate var6
String var7
boolean var7
NPCEntity var8
boolean var8
boolean var9
var9

Методы (62)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Querying for a component index that doesn't exist")
public void activatevoid activate()
public void addContextualInteractionvoid addContextualInteraction(@Nonnull Ref<EntityStore> var1, @Nonnull String var2)
public void addInteractionvoid addInteraction(@Nonnull Ref<EntityStore> var1)
public void appendStateNamevoid appendStateName(@Nonnull StringBuilder var1)
public boolean consumeInteractionboolean consumeInteraction(@Nonnull Ref<EntityStore> var1)
public void flockSetStatevoid flockSetState(Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4)
for for(int var6 = 0; var6 <= var5; var6++)
abstract for for(int var1 = this.localStateMachineAutoResetStates.nextSetBit(0)
public StateMappingHelper getStateHelperStateMappingHelper getStateHelper()
public int getStateIndexint getStateIndex()
public int getSubStateIndexint getSubStateIndex()
public boolean hasContextualInteractionboolean hasContextualInteraction(@Nonnull Ref<EntityStore> var1, @Nonnull String var2)
if if(this.busyStates != null)
if if(this.contextualInteractions != null)
if if(this.interactablePlayers != null)
if if(var4 == null)
if if(var3 < 0)
if if(var3)
if if(!var4 && var5 != var1 && this.stateTransitionController != null)
if if(var5 >= 0)
if if(var3 == null)
if if(var6 >= 0)
if if(var2 >= 0)
if if(var3 == Integer.MIN_VALUE)
if if(this.localStateMachineAutoResetStates != null)
if if(var1 == Integer.MAX_VALUE)
if if(var5 != null)
if if(var5 != null)
if if(this.busyStates == null)
if if(this.contextualInteractions != null)
if if(var2)
if if(var3)
if if(var3)
if if(!var5)
if if(!var8)
if if(var9)
public boolean inStateboolean inState(int var1)
public boolean inStateboolean inState(int var1, int var2)
public boolean inStateboolean inState(String var1, String var2)
public boolean inSubStateboolean inSubState(int var1)
public boolean isClearBodyMotionboolean isClearBodyMotion()
public boolean isClearHeadMotionboolean isClearHeadMotion()
public boolean isComponentInStateboolean isComponentInState(int var1, int var2)
public boolean isInBusyStateboolean isInBusyState()
public boolean isRunningTransitionActionsboolean isRunningTransitionActions()
public boolean pollNeedClearOnceboolean pollNeedClearOnce()
public void postRoleBuiltvoid postRoleBuilt(@Nonnull BuilderSupport var1)
public void resetLocalStateMachinesvoid resetLocalStateMachines()
public boolean runTransitionActionsboolean runTransitionActions(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, double var3, @Nonnull Store<EntityStore> var5)
private void sendInteractionHintToPlayervoid sendInteractionHintToPlayer(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull String var3, @Nonnull Store<EntityStore> var4)
public void setClearBodyMotionvoid setClearBodyMotion(boolean var1)
public void setClearHeadMotionvoid setClearHeadMotion(boolean var1)
public void setComponentStatevoid setComponentState(int var1, int var2)
public void setInteractablevoid setInteractable(@Nonnull Ref<EntityStore> var1, boolean var2)
public void setInteractablevoid setInteractable(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, boolean var3, @Nullable String var4, boolean var5, @Nonnull Store<EntityStore> var6)
public void setInteractionIterationTargetvoid setInteractionIterationTarget(@Nullable Ref<EntityStore> var1)
public void setStatevoid setState(int var1, int var2, boolean var3, boolean var4)
public void setStatevoid setState(@Nonnull Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4)
public void setSubStatevoid setSubState(String var1)
public void updatevoid update(@Nonnull ComponentAccessor<EntityStore> var1)
public boolean willInteractWithboolean willInteractWith(@Nonnull Ref<EntityStore> var1)

Исходный код

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

class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
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.protocol.InteractableUpdate;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.group.EntityGroup;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Interactable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.EntityTrackerSystems;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.flock.FlockPlugin;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.StateMappingHelper;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.SupportConfigBuilder;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.statetransition.StateTransitionController;
class="kw">import com.hypixel.hytale.server.npc.util.EntityDetectionUtil;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
class="kw">import java.util.BitSet;
class="kw">import java.util.HashSet;
class="kw">import java.util.Iterator;
class="kw">import java.util.Map;
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 StateSupport class="kw">implements Component<EntityStore> {
   class="kw">public class="kw">static class="kw">final int NO_STATE = Integer.MIN_VALUE;
   class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, NPCEntity> NPC_COMPONENT_TYPE = NPCEntity.getComponentType();
   class="kw">protected class="kw">final StateMappingHelper stateHelper;
   class="kw">protected class="kw">final int startState;
   class="kw">protected class="kw">final int startSubState;
   class="kw">protected int state;
   class="kw">protected int subState;
   class="kw">protected Int2IntMap componentLocalStateMachines;
   class="kw">protected BitSet localStateMachineAutoResetStates;
   class="kw">protected class="kw">final Int2ObjectMap<IntSet> busyStates;
   class="kw">protected class="kw">final HashSet<String> missingStates = new HashSet<>();
   class="kw">protected boolean needClearOnce;
   class="kw">protected boolean clearHeadMotion;
   class="kw">protected boolean clearBodyMotion;
   class="kw">protected Set<Ref<EntityStore>> interactablePlayers;
   class="kw">protected Set<Ref<EntityStore>> interactedPlayers;
   class="kw">protected Map<Ref<EntityStore>, String> contextualInteractions;
   class="kw">protected String lastHint;
   @Nullable
   class="kw">protected Ref<EntityStore> interactionIterationTarget;
   @Nullable
   class="kw">protected class="kw">final StateTransitionController stateTransitionController;

   @Nonnull
   class="kw">public class="kw">static ComponentType<EntityStore, StateSupport> getComponentType() {
      class="kw">return NPCPlugin.get().getStateSupportComponentType();
   }

   @Nonnull
   class="kw">public class="kw">static StateSupport get(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
      StateSupport var2 = var1.getComponent(var0, getComponentType());
      assert var2 != null : "Missing StateSupport on entity " + var0;
      class="kw">return var2;
   }

   class="kw">public StateSupport(@Nonnull SupportConfigBuilder<?> var1, @Nonnull BuilderSupport var2) {
      this.stateHelper = var1.getStateMappingHelper();
      this.busyStates = var1.getBusyStates();
      this.stateTransitionController = var1.getStateTransitionController(var2);
      this.startState = var1.getStartStateIndex();
      this.startSubState = var1.getStartSubStateIndex();
   }

   @Nullable
   class="kw">public StateTransitionController getStateTransitionController() {
      class="kw">return this.stateTransitionController;
   }

   class="kw">public StateMappingHelper getStateHelper() {
      class="kw">return this.stateHelper;
   }

   class="kw">public void postRoleBuilt(@Nonnull BuilderSupport var1) {
      if (var1.hasComponentLocalStateMachines()) {
         this.componentLocalStateMachines = var1.getComponentLocalStateMachines();
         this.localStateMachineAutoResetStates = var1.getLocalStateMachineAutoResetStates();
      }

      if (var1.isTrackInteractions()) {
         this.interactedPlayers = new ReferenceOpenHashSet();
         this.interactablePlayers = new ReferenceOpenHashSet();
         this.contextualInteractions = new Reference2ObjectOpenHashMap();
      }

      if (this.busyStates != null) {
         String var2 = this.stateHelper.getDefaultSubState();
         this.busyStates.forEach((var2x, var3) -> {
            int var4 = this.stateHelper.getSubStateIndex(var2x, var2);
            if (var3.contains(var4) && var3.size() == 1) {
               int var5 = this.stateHelper.getHighestSubStateIndex(var2x);

               for (int var6 = 0; var6 <= var5; var6++) {
                  var3.add(var6);
               }
            }
         });
      }
   }

   class="kw">public void update(@Nonnull ComponentAccessor<EntityStore> var1) {
      if (this.contextualInteractions != null) {
         this.contextualInteractions.clear();
      }

      if (this.interactablePlayers != null) {
         Iterator var2 = this.interactablePlayers.iterator();

         while (var2.hasNext()) {
            Ref var3 = var2.next();
            if (var3.isValid()) {
               Player var4 = var1.getComponent(var3, Player.getComponentType());
               if (var4 == null) {
                  var2.remove();
               } else if (!EntityDetectionUtil.isDetectableByNPCs(var3, var1, var4)) {
                  var2.remove();
               }
            }
         }
      }
   }

   class="kw">public boolean pollNeedClearOnce() {
      boolean var1 = this.needClearOnce;
      this.needClearOnce = false;
      class="kw">return var1;
   }

   class="kw">public boolean inState(int var1) {
      class="kw">return this.state == var1;
   }

   class="kw">public boolean inSubState(int var1) {
      class="kw">return this.subState == var1;
   }

   class="kw">public boolean inState(int var1, int var2) {
      class="kw">return this.inState(var1) && (var2 == Integer.MIN_VALUE || this.inSubState(var2));
   }

   class="kw">public boolean inState(String var1, String var2) {
      int var3 = this.stateHelper.getStateIndex(var1);
      if (var3 < 0) {
         class="kw">return false;
      }

      int var4 = this.stateHelper.getSubStateIndex(var3, var2);
      class="kw">return var4 >= 0 && this.inState(var3, var4);
   }

   @Nonnull
   class="kw">public String getStateName() {
      class="kw">return this.getStateName(this.state, this.subState);
   }

   @Nonnull
   class="kw">public String getStateName(int var1, int var2) {
      class="kw">return this.stateHelper.getStateName(var1) + "." + this.stateHelper.getSubStateName(var1, var2);
   }

   class="kw">public int getStateIndex() {
      class="kw">return this.state;
   }

   class="kw">public int getSubStateIndex() {
      class="kw">return this.subState;
   }

   class="kw">public void appendStateName(@Nonnull StringBuilder var1) {
      var1.append(this.stateHelper.getStateName(this.state)).append('.').append(this.stateHelper.getSubStateName(this.state, this.subState));
   }

   class="kw">public void setState(int var1, int var2, boolean var3, boolean var4) {
      int var5 = this.state;
      this.state = var1;
      this.subState = var2;
      if (var3) {
         this.needClearOnce = true;
      }

      if (!var4 && var5 != var1 && this.stateTransitionController != null) {
         this.stateTransitionController.initiateStateTransition(var5, var1);
      }
   }

   class="kw">public void setState(@Nonnull Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4) {
      int var5 = this.stateHelper.getStateIndex(var2);
      if (var5 >= 0) {
         if (var3 == null) {
            var3 = this.stateHelper.getDefaultSubState();
         }

         int var6 = this.stateHelper.getSubStateIndex(var5, var3);
         if (var6 >= 0) {
            this.setState(var5, var6, true, false);
            class="kw">return;
         }
      }

      if (!this.missingStates.add(var2)) {
         NPCEntity var8 = var4.getComponent(var1, NPCEntity.getComponentType());
         String var7 = var8 != null ? var8.getRoleName() : String.valueOf(var1);
         NPCPlugin.get().getLogger().at(Level.WARNING).log("State '%s.%s' in '%s' does not exist and was set by an external call", var2, var3, var7);
      }
   }

   class="kw">public void setSubState(String var1) {
      int var2 = this.stateHelper.getSubStateIndex(this.state, var1);
      if (var2 >= 0) {
         this.setState(this.state, var2, true, true);
      }
   }

   class="kw">public boolean isClearBodyMotion() {
      class="kw">return this.clearBodyMotion;
   }

   class="kw">public void setClearBodyMotion(boolean var1) {
      this.clearBodyMotion = var1;
   }

   class="kw">public boolean isClearHeadMotion() {
      class="kw">return this.clearHeadMotion;
   }

   class="kw">public void setClearHeadMotion(boolean var1) {
      this.clearHeadMotion = var1;
   }

   class="kw">public boolean isComponentInState(int var1, int var2) {
      int var3 = this.componentLocalStateMachines.get(var1);
      if (var3 == Integer.MIN_VALUE) {
         throw new IllegalArgumentException("Querying for a component index that doesn't exist");
      } else {
         class="kw">return var3 == var2;
      }
   }

   class="kw">public void setComponentState(int var1, int var2) {
      this.componentLocalStateMachines.put(var1, var2);
   }

   class="kw">public void resetLocalStateMachines() {
      if (this.localStateMachineAutoResetStates != null) {
         for (int var1 = this.localStateMachineAutoResetStates.nextSetBit(0); var1 >= 0; var1 = this.localStateMachineAutoResetStates.nextSetBit(var1 + 1)) {
            this.componentLocalStateMachines.put(var1, 0);
            if (var1 == Integer.MAX_VALUE) {
               break;
            }
         }
      }
   }

   class="kw">public void flockSetState(Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4) {
      Ref var5 = FlockPlugin.getFlockReference(var1, var4);
      if (var5 != null) {
         EntityGroup var6 = var4.getComponent(var5, EntityGroup.getComponentType());
         assert var6 != null;
         var6.forEachMemberExcludingSelf((var0, var1x, var2x, var3x) -> {
            Store var4 = var0.getStore();
            NPCEntity var5 = var4.getComponent(var0, NPC_COMPONENT_TYPE);
            if (var5 != null) {
               var5.onFlockSetState(var0, var2x, var3x, var4);
            }
         }, var1, var2, var3);
      }
   }

   class="kw">public boolean isInBusyState() {
      if (this.busyStates == null) {
         class="kw">return false;
      }

      IntSet var1 = (IntSet)this.busyStates.get(this.state);
      class="kw">return var1 != null && var1.contains(this.subState);
   }

   class="kw">public void addContextualInteraction(@Nonnull Ref<EntityStore> var1, @Nonnull String var2) {
      if (this.contextualInteractions != null) {
         this.contextualInteractions.put(var1, var2);
      }
   }

   class="kw">public boolean hasContextualInteraction(@Nonnull Ref<EntityStore> var1, @Nonnull String var2) {
      String var3 = this.contextualInteractions.get(var1);
      class="kw">return var3 == null ? false : var3.equals(var2);
   }

   class="kw">public void addInteraction(@Nonnull Ref<EntityStore> var1) {
      this.interactedPlayers.add(var1);
   }

   class="kw">public boolean consumeInteraction(@Nonnull Ref<EntityStore> var1) {
      class="kw">return this.interactedPlayers.remove(var1);
   }

   class="kw">public void setInteractable(@Nonnull Ref<EntityStore> var1, boolean var2) {
      if (var2) {
         this.interactablePlayers.add(var1);
      } else {
         this.interactablePlayers.remove(var1);
      }
   }

   class="kw">public void setInteractable(
      @Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, boolean var3, @Nullable String var4, boolean var5, @Nonnull Store<EntityStore> var6
   ) {
      boolean var7 = this.interactablePlayers.contains(var2);
      if (var3) {
         this.interactablePlayers.add(var2);
      } else {
         this.interactablePlayers.remove(var2);
      }

      boolean var8 = var6.getArchetype(var1).contains(Interactable.getComponentType());
      if (var3) {
         if (!var5) {
            var4 = "";
         }

         boolean var9 = var4 != null && !var4.equals(this.lastHint);
         if (!var8) {
            var6.ensureComponent(var1, Interactable.getComponentType());
            var9 = var4 != null && !var4.isEmpty();
         }

         if (var9) {
            this.sendInteractionHintToPlayer(var1, var2, var4, var6);
            this.lastHint = var4;
         }
      } else if (var8 && this.interactablePlayers.isEmpty()) {
         var6.removeComponent(var1, Interactable.getComponentType());
      }
   }

   class="kw">private void sendInteractionHintToPlayer(
      @Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull String var3, @Nonnull Store<EntityStore> var4
   ) {
      EntityTrackerSystems.EntityViewer var5 = var4.getComponent(var2, EntityTrackerSystems.EntityViewer.getComponentType());
      if (var5 != null && var5.visible.contains(var1)) {
         InteractableUpdate var6 = new InteractableUpdate(var3);
         var5.queueUpdate(var1, var6);
      }
   }

   class="kw">public void setInteractionIterationTarget(@Nullable Ref<EntityStore> var1) {
      this.interactionIterationTarget = var1;
   }

   @Nullable
   class="kw">public Ref<EntityStore> getInteractionIterationTarget() {
      class="kw">return this.interactionIterationTarget;
   }

   class="kw">public boolean willInteractWith(@Nonnull Ref<EntityStore> var1) {
      class="kw">return this.interactablePlayers != null && this.interactablePlayers.contains(var1) && !this.isInBusyState();
   }

   class="kw">public boolean runTransitionActions(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, double var3, @Nonnull Store<EntityStore> var5) {
      class="kw">return this.stateTransitionController == null ? false : this.stateTransitionController.runTransitionActions(var1, var2, var3, var5);
   }

   class="kw">public boolean isRunningTransitionActions() {
      class="kw">return this.stateTransitionController != null && this.stateTransitionController.isRunningTransitionActions();
   }

   class="kw">public void activate() {
      this.setState(this.startState, this.startSubState, true, true);
   }

   @Override
   class="kw">public Component<EntityStore> clone() {
      class="kw">return this;
   }
}