StateMappingHelper class

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

Файл: com/hypixel/hytale/server/npc/asset/builder/StateMappingHelper.java

Поля (29)

МодификаторыТипИмя
final String DEFAULT_STATE
private final int depth
private final String state
private final Object2IntOpenHashMap<String> stateIndexMap
private int stateIndexSource
private final String stateName
private final Int2ObjectOpenHashMap<String> stateNameMap
private BitSet stateRequirers
private BitSet stateSensors
private BitSet stateSetters
ObjectIterator var1
StateMappingHelper.StateMap var2
String var2
StateStringValidator var2
Entry var2
int var2
var2
int var2
int var2
int var2
StateMappingHelper.IStateMap var3
StateMappingHelper.IStateMap var3
StateMappingHelper.IStateMap var3
StateStringValidator var3
StateMappingHelper.IStateMap var3
JsonElement var4
String var4
Integer var6
Integer var7

Методы (65)

МодификаторыВозвратСигнатура
private SingletonStateMapprivate SingletonStateMap(String var1)
private StateDepthprivate StateDepth(int var1, String var2)
private StateMapprivate StateMap()
public void decreaseDepthvoid decreaseDepth()
abstract for for(int var3 = 0; var3 < var1.size()
public int[] getAllMainStatesint[] getAllMainStates()
private void getAndPutIndexvoid getAndPutIndex(String var1, @Nullable String var2, @Nonnull BiConsumer<Integer, Integer> var3, @Nonnull Function<String, Integer> var4, @Nonnull BiFunction<Integer, String, Integer> var5)
public int getAndPutRequirerIndexpublic int getAndPutRequirerIndex(String var1)
public int getAndPutRequirerIndexpublic int getAndPutRequirerIndex(String var1)
abstract int getAndPutRequirerIndexint getAndPutRequirerIndex(String var1)
public void getAndPutSensorIndexvoid getAndPutSensorIndex(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3)
public int getAndPutSensorIndexpublic int getAndPutSensorIndex(String var1)
public int getAndPutSensorIndexpublic int getAndPutSensorIndex(String var1)
abstract int getAndPutSensorIndexint getAndPutSensorIndex(String var1)
public void getAndPutSetterIndexvoid getAndPutSetterIndex(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3)
public int getAndPutSetterIndexpublic int getAndPutSetterIndex(String var1)
public int getAndPutSetterIndexpublic int getAndPutSetterIndex(String var1)
abstract int getAndPutSetterIndexint getAndPutSetterIndex(String var1)
public void getAndPutStateRequirerIndexvoid getAndPutStateRequirerIndex(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3)
public int getComponentImportStateIndexint getComponentImportStateIndex(String var1)
public String getDefaultLocalStateString getDefaultLocalState()
public String getDefaultSubStateString getDefaultSubState()
public int getHighestSubStateIndexint getHighestSubStateIndex(int var1)
private int getOrCreateIndexprivate int getOrCreateIndex(String var1)
public int getStateIndexint getStateIndex(String var1)
public int getStateIndexpublic int getStateIndex(@Nonnull String var1)
public int getStateIndexpublic int getStateIndex(String var1)
public String getStateNameString getStateName(int var1)
public String getStateNamepublic String getStateName(int var1)
public String getStateNamepublic String getStateName(int var1)
public int getSubStateIndexint getSubStateIndex(int var1, String var2)
public String getSubStateNameString getSubStateName(int var1, int var2)
public boolean hasComponentStatesboolean hasComponentStates()
public boolean hasDefaultLocalStateboolean hasDefaultLocalState()
if if(var2 == null)
if if(!this.hasStateEvaluator && this.requiresStateEvaluator)
if if(this.componentLocalStateAutoReset)
if if(var2 != null)
if if(var4 != null)
if if(this.singletonDefaultStateMap == null)
if if(var2 == Integer.MIN_VALUE)
public int importedStateCountint importedStateCount()
public void increaseDepthvoid increaseDepth()
public void initialiseComponentStatevoid initialiseComponentState(@Nonnull BuilderSupport var1)
public boolean isComponentboolean isComponent()
public boolean isEmptypublic boolean isEmpty()
public boolean isEmptypublic boolean isEmpty()
abstract boolean isEmptyboolean isEmpty()
public void optimisevoid optimise()
public void optimisepublic void optimise()
public void optimisepublic void optimise()
public void popComponentStatevoid popComponentState(@Nonnull BuilderSupport var1)
public void readComponentDefaultLocalStatevoid readComponentDefaultLocalState(@Nonnull JsonObject var1)
public void setComponentImportStateMappingsvoid setComponentImportStateMappings(@Nonnull JsonArray var1)
public void setDefaultSubStatevoid setDefaultSubState(String var1)
public void setHasStateEvaluatorvoid setHasStateEvaluator()
public void setNotComponentvoid setNotComponent()
public void setRequiresStateEvaluatorvoid setRequiresStateEvaluator()
public int sizepublic int size()
public int sizepublic int size()
abstract int sizeint size()
public void validatevoid validate(String var1, @Nonnull List<String> var2)
public void validatepublic void validate(String var1, String var2, List<String> var3)
public void validatepublic void validate(String var1, @Nullable String var2, @Nonnull List<String> var3)
abstract void validatevoid validate(String var1, String var2, List<String> var3)

Исходный код

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

class="kw">import com.google.gson.JsonArray;
class="kw">import com.google.gson.JsonElement;
class="kw">import com.google.gson.JsonObject;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.StateStringValidator;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.ArrayDeque;
class="kw">import java.util.BitSet;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.function.BiConsumer;
class="kw">import java.util.function.BiFunction;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class StateMappingHelper {
   class="kw">public class="kw">static class="kw">final String DEFAULT_STATE = "start";
   class="kw">public class="kw">static class="kw">final String DEFAULT_SUB_STATE = "Default";
   class="kw">public class="kw">static class="kw">final String DEFAULT_STATE_PARAMETER = "DefaultState";
   class="kw">public class="kw">static class="kw">final String STATE_CHANGE_RESET_PARAMETER = "ResetOnStateChange";
   @Nullable
   class="kw">private StateMappingHelper.StateMap mainStateMap = new StateMappingHelper.StateMap();
   class="kw">private int[] allMainStates;
   @Nullable
   class="kw">private Int2ObjectOpenHashMap<StateMappingHelper.IStateMap> subStateMap = new Int2ObjectOpenHashMap();
   class="kw">private int depth;
   @Nullable
   class="kw">private ArrayDeque<StateMappingHelper.StateDepth> currentParentState = new ArrayDeque<>();
   class="kw">private boolean component = true;
   class="kw">private boolean hasStateEvaluator;
   class="kw">private boolean requiresStateEvaluator;
   class="kw">private String defaultSubState;
   class="kw">private String defaultComponentLocalState;
   class="kw">private int defaultComponentLocalStateIndex;
   class="kw">private boolean componentLocalStateAutoReset;
   class="kw">private Object2IntOpenHashMap<String> componentImportStateMappings;
   class="kw">private StateMappingHelper.SingletonStateMap singletonDefaultStateMap;

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

   class="kw">public int[] getAllMainStates() {
      class="kw">return this.allMainStates;
   }

   class="kw">public int getHighestSubStateIndex(int var1) {
      class="kw">return ((StateMappingHelper.IStateMap)this.subStateMap.get(var1)).size() - 1;
   }

   class="kw">public void getAndPutSensorIndex(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3) {
      this.currentParentState.push(new StateMappingHelper.StateDepth(this.depth, var1));
      this.getAndPutIndex(var1, var2, var3, this.mainStateMap::getAndPutSensorIndex, (var1x, var2x) -> {
         StateMappingHelper.IStateMap var3 = this.initialiseDefaultSubStates(var1x);
         class="kw">return var3.getAndPutSensorIndex(var2x);
      });
   }

   class="kw">public void getAndPutSetterIndex(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3) {
      this.getAndPutIndex(var1, var2, var3, this.mainStateMap::getAndPutSetterIndex, (var1x, var2x) -> {
         StateMappingHelper.IStateMap var3 = this.initialiseDefaultSubStates(var1x);
         class="kw">return var3.getAndPutSetterIndex(var2x);
      });
   }

   class="kw">public void getAndPutStateRequirerIndex(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3) {
      this.getAndPutIndex(var1, var2, var3, this.mainStateMap::getAndPutRequirerIndex, (var1x, var2x) -> {
         StateMappingHelper.IStateMap var3 = this.initialiseDefaultSubStates(var1x);
         class="kw">return var3.getAndPutRequirerIndex(var2x);
      });
   }

   class="kw">private void getAndPutIndex(
      String var1,
      @Nullable String var2,
      @Nonnull BiConsumer<Integer, Integer> var3,
      @Nonnull Function<String, Integer> var4,
      @Nonnull BiFunction<Integer, String, Integer> var5
   ) {
      Integer var6 = var4.apply(var1);
      if (var2 == null) {
         var3.accept(var6, -1);
      } else {
         Integer var7 = var5.apply(var6, var2);
         var3.accept(var6, var7);
      }
   }

   @Nonnull
   class="kw">private StateMappingHelper.IStateMap initialiseDefaultSubStates(int var1) {
      class="kw">return (StateMappingHelper.IStateMap)this.subStateMap.computeIfAbsent(var1, var1x -> {
         StateMappingHelper.StateMap var2 = new StateMappingHelper.StateMap();
         var2.getAndPutSensorIndex(this.defaultSubState);
         var2.getAndPutSetterIndex(this.defaultSubState);
         class="kw">return var2;
      });
   }

   class="kw">public void validate(String var1, @Nonnull List<String> var2) {
      this.mainStateMap.validate(var1, null, var2);
      this.subStateMap.forEach((var3, var4) -> var4.validate(var1, this.mainStateMap.getStateName(var3), var2));
      if (!this.hasStateEvaluator && this.requiresStateEvaluator) {
         var2.add(String.format("%s: Expects a state evaluator but does not have one defined", var1));
      }
   }

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

   class="kw">public int getSubStateIndex(int var1, String var2) {
      class="kw">return ((StateMappingHelper.IStateMap)this.subStateMap.get(var1)).getStateIndex(var2);
   }

   class="kw">public String getStateName(int var1) {
      class="kw">return this.mainStateMap.getStateName(var1);
   }

   class="kw">public String getSubStateName(int var1, int var2) {
      class="kw">return ((StateMappingHelper.IStateMap)this.subStateMap.get(var1)).getStateName(var2);
   }

   @Nullable
   class="kw">public String getCurrentParentState() {
      class="kw">return this.currentParentState.isEmpty() ? null : this.currentParentState.peek().state;
   }

   class="kw">public void increaseDepth() {
      this.depth++;
   }

   class="kw">public void decreaseDepth() {
      this.depth--;
      if (!this.currentParentState.isEmpty() && this.depth < this.currentParentState.peek().depth) {
         this.currentParentState.pop();
      }
   }

   class="kw">public void setDefaultSubState(String var1) {
      this.defaultSubState = var1;
   }

   class="kw">public String getDefaultSubState() {
      class="kw">return this.defaultSubState;
   }

   class="kw">public void setNotComponent() {
      this.mainStateMap.getAndPutSensorIndex("start");
      this.mainStateMap.getAndPutSetterIndex("start");
      this.component = false;
   }

   class="kw">public boolean isComponent() {
      class="kw">return this.component;
   }

   class="kw">public boolean hasComponentStates() {
      class="kw">return this.component && this.mainStateMap != null;
   }

   class="kw">public void initialiseComponentState(@Nonnull BuilderSupport var1) {
      var1.setToNewComponent();
      var1.addComponentLocalStateMachine(this.defaultComponentLocalStateIndex);
      if (this.componentLocalStateAutoReset) {
         var1.setLocalStateMachineAutoReset();
      }
   }

   class="kw">public void popComponentState(@Nonnull BuilderSupport var1) {
      var1.popComponent();
   }

   class="kw">public void readComponentDefaultLocalState(@Nonnull JsonObject var1) {
      String var2 = BuilderBase.readString(var1, "DefaultState", null);
      if (var2 != null) {
         StateStringValidator var3 = StateStringValidator.get();
         if (!var3.test(var2)) {
            throw new IllegalStateException(var3.errorMessage(var2));
         }

         if (var3.hasMainState()) {
            throw new IllegalStateException(String.format("Default component local state must be defined with a '.' prefix: %s", var3.getMainState()));
         }

         this.defaultComponentLocalState = var3.getSubState();
         this.defaultComponentLocalStateIndex = this.mainStateMap.getAndPutSetterIndex(this.defaultComponentLocalState);
      }

      JsonElement var4 = var1.get("ResetOnStateChange");
      if (var4 != null) {
         this.componentLocalStateAutoReset = BuilderBase.expectBooleanElement(var4, "ResetOnStateChange");
      }
   }

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

   class="kw">public String getDefaultLocalState() {
      class="kw">return this.defaultComponentLocalState;
   }

   class="kw">public void setComponentImportStateMappings(@Nonnull JsonArray var1) {
      this.componentImportStateMappings = new Object2IntOpenHashMap();
      this.componentImportStateMappings.defaultReturnValue(Integer.MIN_VALUE);
      StateStringValidator var2 = StateStringValidator.mainStateOnly();

      for (int var3 = 0; var3 < var1.size(); var3++) {
         String var4 = var1.get(var3).getAsString();
         if (!var2.test(var4)) {
            throw new IllegalStateException(var2.errorMessage(var4));
         }

         this.getAndPutSensorIndex(var2.getMainState(), null, (var0, var1x) -> {});
         this.componentImportStateMappings.put(var2.getMainState(), var3);
      }

      this.componentImportStateMappings.trim();
   }

   class="kw">public int getComponentImportStateIndex(String var1) {
      class="kw">return this.componentImportStateMappings == null ? Integer.MIN_VALUE : this.componentImportStateMappings.getInt(var1);
   }

   class="kw">public int importedStateCount() {
      class="kw">return this.componentImportStateMappings == null ? 0 : this.componentImportStateMappings.size();
   }

   class="kw">public void setRequiresStateEvaluator() {
      this.requiresStateEvaluator = true;
   }

   class="kw">public void setHasStateEvaluator() {
      this.hasStateEvaluator = true;
   }

   class="kw">public void optimise() {
      this.currentParentState = null;
      if (this.mainStateMap.isEmpty()) {
         this.mainStateMap = null;
         this.subStateMap = null;
      } else {
         ObjectIterator var1 = Int2ObjectMaps.fastIterator(this.subStateMap);

         while (var1.hasNext()) {
            Entry var2 = (Entry<StateMappingHelper.IStateMap>)var1.next();
            StateMappingHelper.IStateMap var3 = (StateMappingHelper.IStateMap)var2.getValue();
            if (var3.size() == 1) {
               if (this.singletonDefaultStateMap == null) {
                  this.singletonDefaultStateMap = new StateMappingHelper.SingletonStateMap(this.defaultSubState);
               }

               var2.setValue(this.singletonDefaultStateMap);
            } else {
               var3.optimise();
            }
         }

         this.subStateMap.trim();
         this.mainStateMap.optimise();
         this.allMainStates = this.mainStateMap.stateNameMap.keySet().toIntArray();
      }
   }

   class="kw">private class="kw">interface IStateMap {
      int getAndPutSensorIndex(String var1);

      int getAndPutSetterIndex(String var1);

      int getAndPutRequirerIndex(String var1);

      int getStateIndex(String var1);

      String getStateName(int var1);

      void validate(String var1, String var2, List<String> var3);

      boolean isEmpty();

      int size();

      void optimise();
   }

   class="kw">private class="kw">static class SingletonStateMap class="kw">implements StateMappingHelper.IStateMap {
      class="kw">private class="kw">final String stateName;

      class="kw">private SingletonStateMap(String var1) {
         this.stateName = var1;
      }

      @Override
      class="kw">public int getAndPutSensorIndex(String var1) {
         class="kw">return 0;
      }

      @Override
      class="kw">public int getAndPutSetterIndex(String var1) {
         class="kw">return 0;
      }

      @Override
      class="kw">public int getAndPutRequirerIndex(String var1) {
         class="kw">return 0;
      }

      @Override
      class="kw">public int getStateIndex(@Nonnull String var1) {
         class="kw">return !var1.equals(this.stateName) ? Integer.MIN_VALUE : 0;
      }

      @Override
      class="kw">public String getStateName(int var1) {
         class="kw">return this.stateName;
      }

      @Override
      class="kw">public void validate(String var1, String var2, List<String> var3) {
      }

      @Override
      class="kw">public boolean isEmpty() {
         class="kw">return false;
      }

      @Override
      class="kw">public int size() {
         class="kw">return 1;
      }

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

   class="kw">private class="kw">static class StateDepth {
      class="kw">private class="kw">final int depth;
      class="kw">private class="kw">final String state;

      class="kw">private StateDepth(int var1, String var2) {
         this.depth = var1;
         this.state = var2;
      }
   }

   class="kw">private class="kw">static class StateMap class="kw">implements StateMappingHelper.IStateMap {
      class="kw">private class="kw">final Int2ObjectOpenHashMap<String> stateNameMap = new Int2ObjectOpenHashMap();
      @Nonnull
      class="kw">private class="kw">final Object2IntOpenHashMap<String> stateIndexMap;
      class="kw">private int stateIndexSource;
      @Nullable
      class="kw">private BitSet stateSensors = new BitSet();
      @Nullable
      class="kw">private BitSet stateSetters = new BitSet();
      @Nullable
      class="kw">private BitSet stateRequirers = new BitSet();

      class="kw">private StateMap() {
         this.stateIndexMap = new Object2IntOpenHashMap();
         this.stateIndexMap.defaultReturnValue(Integer.MIN_VALUE);
      }

      class="kw">private int getOrCreateIndex(String var1) {
         int var2 = this.stateIndexMap.getInt(var1);
         if (var2 == Integer.MIN_VALUE) {
            var2 = this.stateIndexSource++;
            this.stateIndexMap.put(var1, var2);
            this.stateNameMap.put(var2, var1);
         }

         class="kw">return var2;
      }

      @Override
      class="kw">public int getAndPutSensorIndex(String var1) {
         int var2 = this.getOrCreateIndex(var1);
         this.stateSensors.set(var2);
         class="kw">return var2;
      }

      @Override
      class="kw">public int getAndPutSetterIndex(String var1) {
         int var2 = this.getOrCreateIndex(var1);
         this.stateSetters.set(var2);
         class="kw">return var2;
      }

      @Override
      class="kw">public int getAndPutRequirerIndex(String var1) {
         int var2 = this.getOrCreateIndex(var1);
         this.stateRequirers.set(var2);
         class="kw">return var2;
      }

      @Override
      class="kw">public int getStateIndex(String var1) {
         Objects.requireNonNull(var1, "State must not be null when fetching index");
         class="kw">return this.stateIndexMap.getInt(var1);
      }

      @Override
      class="kw">public String getStateName(int var1) {
         class="kw">return (String)this.stateNameMap.get(var1);
      }

      @Override
      class="kw">public void validate(String var1, @Nullable String var2, @Nonnull List<String> var3) {
         this.stateSetters.xor(this.stateSensors);
         if (this.stateSetters.cardinality() > 0) {
            var3.add(
               String.format(
                  "%s: State sensor or State setter action/motion exists without accompanying state/setter: %s%s",
                  var1,
                  var2 != null ? var2 + "." : "",
                  this.stateNameMap.get(this.stateSetters.nextSetBit(0))
               )
            );
         }

         this.stateRequirers.andNot(this.stateSensors);
         if (this.stateRequirers.cardinality() > 0) {
            var3.add(
               String.format(
                  "%s: State required by a parameter does not exist: %s%s",
                  var1,
                  var2 != null ? var2 + "." : "",
                  this.stateNameMap.get(this.stateRequirers.nextSetBit(0))
               )
            );
         }
      }

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

      @Override
      class="kw">public int size() {
         class="kw">return this.stateNameMap.size();
      }

      @Override
      class="kw">public void optimise() {
         this.stateSensors = null;
         this.stateSetters = null;
         this.stateRequirers = null;
         this.stateNameMap.trim();
         this.stateIndexMap.trim();
      }
   }
}