IActionListHolder interface

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

Файл: com/hypixel/hytale/server/npc/statetransition/StateTransitionController.java

extends: RoleStateChange

Методы (4)

МодификаторыВозвратСигнатура
abstract boolean canExecuteboolean canExecute(Ref<EntityStore> var1, ExecutionSupport var2, InfoProvider var3, double var4, Store<EntityStore> var6)
abstract void clearOncevoid clearOnce()
abstract boolean executeboolean execute(Ref<EntityStore> var1, ExecutionSupport var2, InfoProvider var3, double var4, Store<EntityStore> var6)
abstract boolean hasCompletedRunboolean hasCompletedRun()

Исходный код

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

class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
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 com.hypixel.hytale.server.npc.asset.builder.BuilderFactory;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderManager;
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.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.instructions.ActionList;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.instructions.RoleStateChange;
class="kw">import com.hypixel.hytale.server.npc.movement.controllers.MotionController;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.statetransition.builders.BuilderStateTransition;
class="kw">import com.hypixel.hytale.server.npc.statetransition.builders.BuilderStateTransitionController;
class="kw">import com.hypixel.hytale.server.npc.statetransition.builders.BuilderStateTransitionEdges;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class StateTransitionController {
   class="kw">private class="kw">final Int2ObjectOpenHashMap<StateTransitionController.IActionListHolder> stateTransitionActions = new Int2ObjectOpenHashMap();
   @Nullable
   class="kw">private StateTransitionController.IActionListHolder runningActions;

   class="kw">public StateTransitionController(@Nonnull BuilderStateTransitionController var1, @Nonnull BuilderSupport var2) {
      StateMappingHelper var3 = var2.getStateHelper();

      for (BuilderStateTransition.StateTransition var6 : var1.getStateTransitionEntries(var2)) {
         ActionList var7 = var6.getActions();

         for (BuilderStateTransitionEdges.StateTransitionEdges var9 : var6.getStateTransitionEdges()) {
            int var10 = var9.getPriority();
            int[] var11 = var9.getFromStateIndices() != null ? var9.getFromStateIndices() : var3.getAllMainStates();
            int[] var12 = var9.getToStateIndices() != null ? var9.getToStateIndices() : var3.getAllMainStates();

            for (int var16 : var11) {
               for (int var20 : var12) {
                  if (var20 != var16) {
                     int var21 = indexStateTransitionEdge(var16, var20);
                     StateTransitionController.IActionListHolder var22 = (StateTransitionController.IActionListHolder)this.stateTransitionActions.get(var21);
                     if (var22 == null) {
                        this.stateTransitionActions.put(var21, new StateTransitionController.PrioritisedActionList(var10, var7));
                     } else {
                        StateTransitionController.CompositeActionList var23;
                        if (var22 class="kw">instanceof StateTransitionController.CompositeActionList) {
                           var23 = (StateTransitionController.CompositeActionList)var22;
                        } else {
                           var23 = new StateTransitionController.CompositeActionList((StateTransitionController.PrioritisedActionList)var22);
                           this.stateTransitionActions.put(var21, var23);
                        }

                        var23.addActionList(var10, var7);
                     }
                  }
               }
            }
         }
      }

      this.stateTransitionActions.trim();
   }

   class="kw">public void registerWithSupport(ExecutionSupport var1) {
      ObjectIterator var2 = this.stateTransitionActions.values().iterator();

      while (var2.hasNext()) {
         StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
         var3.registerWithSupport(var1);
      }
   }

   class="kw">public void motionControllerChanged(
      @Nullable Ref<EntityStore> var1, @Nonnull NPCEntity var2, @Nullable MotionController var3, @Nullable ComponentAccessor<EntityStore> var4
   ) {
      ObjectIterator var5 = this.stateTransitionActions.values().iterator();

      while (var5.hasNext()) {
         StateTransitionController.IActionListHolder var6 = (StateTransitionController.IActionListHolder)var5.next();
         var6.motionControllerChanged(var1, var2, var3, var4);
      }
   }

   class="kw">public void loaded(ExecutionSupport var1) {
      ObjectIterator var2 = this.stateTransitionActions.values().iterator();

      while (var2.hasNext()) {
         StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
         var3.loaded(var1);
      }
   }

   class="kw">public void spawned(ExecutionSupport var1) {
      ObjectIterator var2 = this.stateTransitionActions.values().iterator();

      while (var2.hasNext()) {
         StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
         var3.spawned(var1);
      }
   }

   class="kw">public void unloaded(ExecutionSupport var1) {
      ObjectIterator var2 = this.stateTransitionActions.values().iterator();

      while (var2.hasNext()) {
         StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
         var3.unloaded(var1);
      }
   }

   class="kw">public void removed(ExecutionSupport var1) {
      ObjectIterator var2 = this.stateTransitionActions.values().iterator();

      while (var2.hasNext()) {
         StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
         var3.removed(var1);
      }
   }

   class="kw">public void teleported(ExecutionSupport var1, World var2, World var3) {
      ObjectIterator var4 = this.stateTransitionActions.values().iterator();

      while (var4.hasNext()) {
         StateTransitionController.IActionListHolder var5 = (StateTransitionController.IActionListHolder)var4.next();
         var5.teleported(var1, var2, var3);
      }
   }

   class="kw">public void clearOnce() {
      ObjectIterator var1 = this.stateTransitionActions.values().iterator();

      while (var1.hasNext()) {
         StateTransitionController.IActionListHolder var2 = (StateTransitionController.IActionListHolder)var1.next();
         var2.clearOnce();
      }
   }

   class="kw">public void initiateStateTransition(int var1, int var2) {
      this.runningActions = (StateTransitionController.IActionListHolder)this.stateTransitionActions.get(indexStateTransitionEdge(var1, var2));
   }

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

   class="kw">public boolean runTransitionActions(Ref<EntityStore> var1, ExecutionSupport var2, double var3, Store<EntityStore> var5) {
      if (this.runningActions == null) {
         class="kw">return false;
      } else if (this.runningActions.canExecute(var1, var2, null, var3, var5)
         && this.runningActions.execute(var1, var2, null, var3, var5)
         && this.runningActions.hasCompletedRun()) {
         this.runningActions.clearOnce();
         this.runningActions = null;
         class="kw">return false;
      } else {
         class="kw">return true;
      }
   }

   class="kw">public class="kw">static void registerFactories(@Nonnull BuilderManager var0) {
      BuilderFactory var1 = new BuilderFactory<>(StateTransitionController.class, "Type", BuilderStateTransitionController::new);
      var0.registerFactory(var1);
      BuilderFactory var2 = new BuilderFactory<>(BuilderStateTransition.StateTransition.class, "Type", BuilderStateTransition::new);
      var0.registerFactory(var2);
      BuilderFactory var3 = new BuilderFactory<>(BuilderStateTransitionEdges.StateTransitionEdges.class, "Type", BuilderStateTransitionEdges::new);
      var0.registerFactory(var3);
   }

   class="kw">public class="kw">static int indexStateTransitionEdge(int var0, int var1) {
      class="kw">return (var0 << 16) + var1;
   }

   class="kw">private class="kw">static class CompositeActionList class="kw">implements StateTransitionController.IActionListHolder {
      class="kw">private class="kw">final List<StateTransitionController.PrioritisedActionList> actionLists = new ObjectArrayList();
      class="kw">private int currentIndex;

      class="kw">private CompositeActionList(StateTransitionController.PrioritisedActionList var1) {
         this.actionLists.add(var1);
      }

      class="kw">private void addActionList(int var1, ActionList var2) {
         for (int var3 = 0; var3 < this.actionLists.size(); var3++) {
            if (var1 > this.actionLists.get(var3).priority) {
               this.actionLists.add(var3, new StateTransitionController.PrioritisedActionList(var1, var2));
               class="kw">return;
            }
         }

         this.actionLists.add(new StateTransitionController.PrioritisedActionList(var1, var2));
      }

      @Override
      class="kw">public boolean canExecute(
         @Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
      ) {
         if (this.currentIndex >= this.actionLists.size()) {
            this.currentIndex = 0;
         }

         class="kw">return this.actionLists.get(this.currentIndex).actionList.canExecute(var1, var2, var3, var4, var6);
      }

      @Override
      class="kw">public boolean execute(
         @Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
      ) {
         StateTransitionController.PrioritisedActionList var7 = this.actionLists.get(this.currentIndex);
         if (!var7.actionList.canExecute(var1, var2, var3, var4, var6)) {
            class="kw">return false;
         } else if (var7.actionList.execute(var1, var2, var3, var4, var6) && var7.actionList.hasCompletedRun()) {
            this.currentIndex++;
            class="kw">return true;
         } else {
            class="kw">return false;
         }
      }

      @Override
      class="kw">public boolean hasCompletedRun() {
         if (this.currentIndex >= this.actionLists.size()) {
            this.currentIndex = 0;
            class="kw">return true;
         } else {
            class="kw">return false;
         }
      }

      @Override
      class="kw">public void registerWithSupport(ExecutionSupport var1) {
         for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
            var3.actionList.registerWithSupport(var1);
         }
      }

      @Override
      class="kw">public void motionControllerChanged(
         @Nullable Ref<EntityStore> var1, @Nonnull NPCEntity var2, MotionController var3, @Nullable ComponentAccessor<EntityStore> var4
      ) {
         for (StateTransitionController.PrioritisedActionList var6 : this.actionLists) {
            var6.actionList.motionControllerChanged(var1, var2, var3, var4);
         }
      }

      @Override
      class="kw">public void loaded(ExecutionSupport var1) {
         for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
            var3.actionList.loaded(var1);
         }
      }

      @Override
      class="kw">public void spawned(ExecutionSupport var1) {
         for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
            var3.actionList.spawned(var1);
         }
      }

      @Override
      class="kw">public void unloaded(ExecutionSupport var1) {
         for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
            var3.actionList.unloaded(var1);
         }
      }

      @Override
      class="kw">public void removed(ExecutionSupport var1) {
         for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
            var3.actionList.removed(var1);
         }
      }

      @Override
      class="kw">public void teleported(ExecutionSupport var1, World var2, World var3) {
         for (StateTransitionController.PrioritisedActionList var5 : this.actionLists) {
            var5.actionList.teleported(var1, var2, var3);
         }
      }

      @Override
      class="kw">public void clearOnce() {
         for (StateTransitionController.PrioritisedActionList var2 : this.actionLists) {
            var2.actionList.clearOnce();
         }
      }
   }

   class="kw">private class="kw">interface IActionListHolder class="kw">extends RoleStateChange {
      boolean canExecute(Ref<EntityStore> var1, ExecutionSupport var2, InfoProvider var3, double var4, Store<EntityStore> var6);

      boolean execute(Ref<EntityStore> var1, ExecutionSupport var2, InfoProvider var3, double var4, Store<EntityStore> var6);

      boolean hasCompletedRun();

      void clearOnce();
   }

   class="kw">private record PrioritisedActionList(int priority, ActionList actionList) class="kw">implements StateTransitionController.IActionListHolder {
      class="kw">private PrioritisedActionList {
      }

      @Override
      class="kw">public boolean canExecute(
         @Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
      ) {
         class="kw">return this.actionList.canExecute(var1, var2, var3, var4, var6);
      }

      @Override
      class="kw">public boolean execute(
         @Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
      ) {
         class="kw">return this.actionList.execute(var1, var2, var3, var4, var6);
      }

      @Override
      class="kw">public boolean hasCompletedRun() {
         class="kw">return this.actionList.hasCompletedRun();
      }

      @Override
      class="kw">public void registerWithSupport(ExecutionSupport var1) {
         this.actionList.registerWithSupport(var1);
      }

      @Override
      class="kw">public void motionControllerChanged(
         @Nullable Ref<EntityStore> var1, @Nonnull NPCEntity var2, MotionController var3, @Nullable ComponentAccessor<EntityStore> var4
      ) {
         this.actionList.motionControllerChanged(var1, var2, var3, var4);
      }

      @Override
      class="kw">public void loaded(ExecutionSupport var1) {
         this.actionList.loaded(var1);
      }

      @Override
      class="kw">public void spawned(ExecutionSupport var1) {
         this.actionList.spawned(var1);
      }

      @Override
      class="kw">public void unloaded(ExecutionSupport var1) {
         this.actionList.unloaded(var1);
      }

      @Override
      class="kw">public void removed(ExecutionSupport var1) {
         this.actionList.removed(var1);
      }

      @Override
      class="kw">public void teleported(ExecutionSupport var1, World var2, World var3) {
         this.actionList.teleported(var1, var2, var3);
      }

      @Override
      class="kw">public void clearOnce() {
         this.actionList.clearOnce();
      }
   }
}