BuilderMotionControllerMap class

Пакет: com.hypixel.hytale.server.npc.movement.controllers.builders

Файл: com/hypixel/hytale/server/npc/movement/controllers/builders/BuilderMotionControllerMap.java

extends: BuilderBase<Map<String, MotionController>>

implements: ISpawnable

Поля (10)

МодификаторыТипИмя
final BuilderObjectMapHelper<String, MotionController> motionControllers
BuilderInfo var1
MovementMode var2
MovementMode var2
EnumMap var2
var2
BuilderMotionControllerBase var3
SpawnTestResult var3
BuilderMotionControllerBase var3
SpawnTestResult var4

Методы (10)

МодификаторыВозвратСигнатура
abstract throw new IllegalStateExceptionthrow new IllegalStateException("MotionController builder must extend BuilderMotionControllerBase")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("MotionController must implement ISpawnable")
if if(var2 != null)
if if(var3 == null)
if if(var4 == SpawnTestResult.TEST_OK)
if if(var0 instanceof BuilderMotionControllerBase var2)
if if(var3 == SpawnTestResult.TEST_OK)
if if(var2 == null)
if if(var0 instanceof BuilderMotionControllerBase var2)
if if(var2 != null)

Исходный код

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

class="kw">import com.google.gson.JsonElement;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.Builder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderBase;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderDescriptorState;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderInfo;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderObjectMapHelper;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderValidationHelper;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.ArrayNotEmptyValidator;
class="kw">import com.hypixel.hytale.server.npc.movement.MovementMode;
class="kw">import com.hypixel.hytale.server.npc.movement.controllers.BuilderMotionControllerMapUtil;
class="kw">import com.hypixel.hytale.server.npc.movement.controllers.MotionController;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.npc.util.expression.Scope;
class="kw">import com.hypixel.hytale.server.npc.validators.NPCLoadTimeValidationHelper;
class="kw">import com.hypixel.hytale.server.spawning.ISpawnable;
class="kw">import com.hypixel.hytale.server.spawning.SpawnTestResult;
class="kw">import com.hypixel.hytale.server.spawning.SpawningContext;
class="kw">import java.util.EnumMap;
class="kw">import java.util.HashMap;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BuilderMotionControllerMap class="kw">extends BuilderBase<Map<String, MotionController>> class="kw">implements ISpawnable {
   class="kw">private class="kw">final BuilderObjectMapHelper<String, MotionController> motionControllers = new BuilderObjectMapHelper<>(
      MotionController.class, MotionController::getType, this
   );
   @Nullable
   class="kw">private class="kw">volatile EnumMap<MovementMode, BuilderMotionControllerBase> modeToController;

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

   @Nonnull
   class="kw">public Map<String, MotionController> build(@Nonnull BuilderSupport var1) {
      class="kw">return new HashMap<>(this.motionControllers.build(var1));
   }

   @Nonnull
   @Override
   class="kw">public String getShortDescription() {
      class="kw">return "List of motion controllers";
   }

   @Nonnull
   @Override
   class="kw">public String getLongDescription() {
      class="kw">return "Non-empty list of motion controllers.";
   }

   @Nonnull
   @Override
   class="kw">public BuilderDescriptorState getBuilderDescriptorState() {
      class="kw">return BuilderDescriptorState.Stable;
   }

   @Nonnull
   @Override
   class="kw">public Builder<Map<String, MotionController>> readConfig(@Nonnull JsonElement var1) {
      this.requireArray(
         var1,
         this.motionControllers,
         ArrayNotEmptyValidator.get(),
         BuilderDescriptorState.Stable,
         "List of motion controllers",
         null,
         new BuilderValidationHelper(this.fileName, null, this.internalReferenceResolver, null, null, this.extraInfo, null, this.readErrors)
      );
      class="kw">return this;
   }

   @Override
   class="kw">public Class<Map<String, MotionController>> category() {
      class="kw">return BuilderMotionControllerMapUtil.CLASS_REFERENCE;
   }

   @Override
   class="kw">public class="kw">final boolean isEnabled(ExecutionContext var1) {
      class="kw">return true;
   }

   @Nonnull
   @Override
   class="kw">public String getIdentifier() {
      BuilderInfo var1 = NPCPlugin.get().getBuilderInfo(this);
      Objects.requireNonNull(var1, "Have builder but can't get builderInfo for it");
      class="kw">return var1.getKeyName();
   }

   @Nonnull
   @Override
   class="kw">public SpawnTestResult canSpawn(@Nonnull SpawningContext var1) {
      if (this.motionControllers.hasNoElements()) {
         class="kw">return SpawnTestResult.FAIL_NO_MOTION_CONTROLLERS;
      }

      MovementMode var2 = var1.movementMode;
      if (var2 != null) {
         BuilderMotionControllerBase var3 = this.getModeToController(var1.getExecutionContext()).get(var2);
         if (var3 == null) {
            class="kw">return SpawnTestResult.FAIL_NO_MOTION_CONTROLLER_MATCH;
         }

         SpawnTestResult var4 = var3.canSpawn(var1);
         if (var4 == SpawnTestResult.TEST_OK) {
            var1.activeMotionControllerType = var3.getType();
         }

         class="kw">return var4;
      } else {
         class="kw">return Objects.requireNonNullElse(this.motionControllers.findFirst((var0, var1x) -> {
            if (var0 class="kw">instanceof BuilderMotionControllerBase var2) {
               SpawnTestResult var3 = var2.canSpawn(var1x);
               if (var3 == SpawnTestResult.TEST_OK) {
                  var1x.activeMotionControllerType = var2.getType();
                  class="kw">return var3;
               } else {
                  class="kw">return null;
               }
            } else {
               throw new IllegalStateException("MotionController builder must extend BuilderMotionControllerBase");
            }
         }, this.builderManager, var1.getExecutionContext(), var1, null, this.getParent()), SpawnTestResult.FAIL_NO_MOTION_CONTROLLER_MATCH);
      }
   }

   @Override
   class="kw">public boolean requiresSpawnDropHeightCheck(@Nonnull SpawningContext var1) {
      if (this.motionControllers.hasNoElements()) {
         class="kw">return true;
      }

      MovementMode var2 = var1.movementMode;
      if (var2 == null) {
         class="kw">return Boolean.TRUE.equals(this.motionControllers.findFirst((var0, var1x) -> {
            if (var0 class="kw">instanceof BuilderMotionControllerBase var2) {
               class="kw">return var2.requiresSpawnDropHeightCheck(var1x) ? Boolean.TRUE : null;
            } else {
               throw new IllegalStateException("MotionController builder must extend BuilderMotionControllerBase");
            }
         }, this.builderManager, var1.getExecutionContext(), var1, null, this.getParent()));
      }

      BuilderMotionControllerBase var3 = this.getModeToController(var1.getExecutionContext()).get(var2);
      class="kw">return var3 == null || var3.requiresSpawnDropHeightCheck(var1);
   }

   @Nonnull
   class="kw">private EnumMap<MovementMode, BuilderMotionControllerBase> getModeToController(@Nonnull ExecutionContext var1) {
      EnumMap var2 = this.modeToController;
      if (var2 != null) {
         class="kw">return var2;
      }

      var2 = new EnumMap<>(MovementMode.class);
      this.motionControllers.forEach((var0, var1x) -> {
         if (!(var0 class="kw">instanceof BuilderMotionControllerBase var2)) {
            throw new IllegalStateException("MotionController builder must extend BuilderMotionControllerBase");
         } else {
            for (MovementMode var4 : var2.getSupportedMovementModes()) {
               var1x.put(var4, var2);
            }
         }
      }, var2, this.builderManager, var1, this.getParent());
      this.modeToController = var2;
      class="kw">return var2;
   }

   @Override
   class="kw">public void getMovementModes(
      @Nonnull SpawningContext var1, @Nonnull Set<MovementMode> var2, @Nonnull Set<MovementMode> var3, @Nonnull Set<MovementMode> var4
   ) {
      this.motionControllers.forEach((var3x, var4x) -> {
         if (!(var3x class="kw">instanceof ISpawnable)) {
            throw new IllegalStateException("MotionController must implement ISpawnable");
         }

         ((ISpawnable)var3x).getMovementModes(var1, var4x, var3, var4);
      }, var2, this.builderManager, var1.getExecutionContext(), this.getParent());
   }

   @Override
   class="kw">public boolean validate(String var1, @Nonnull NPCLoadTimeValidationHelper var2, @Nonnull ExecutionContext var3, Scope var4, @Nonnull List<String> var5) {
      class="kw">return super.validate(var1, var2, var3, var4, var5) & this.motionControllers.validate(var1, var2, this.builderManager, var3, var4, var5);
   }
}