BuilderRoleVariant class

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

Файл: com/hypixel/hytale/server/npc/role/builders/BuilderRoleVariant.java

extends: DependencyTrackingBuilder<Role>

implements: ISpawnableWithModel, RoleBuilder

Поля (40)

МодификаторыТипИмя
final StringHolder reference
Builder var1
BuilderInfo var1
Scope var10
Scope var10
Scope var11
Map var11
Map var12
Object var12
boolean var13
Map var2
Scope var2
Role var3
StringSchema var3
Builder var3
var3
Boolean var3
Scope var4
var4
Builder var4
Builder var4
BuilderRoleVariant var5
BuilderParameters var5
ExecutionContext var5
Builder var5
Builder var5
Builder var6
Scope var6
Scope var6
Scope var6
Scope var6
String var7
ExecutionContext var7
Object var7
Object var7
int var7
Map var8
String var8
BuilderParameters var9
Map var9

Методы (9)

МодификаторыВозвратСигнатура
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Variant super role missing or does not implement RoleBuilder")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Computable component references are not supported for Role Variants")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Cannot instantiate a variant of something that isn't a spawnable role!")
protected <V> V executeOnSuperRole<V> V executeOnSuperRole(@Nonnull BuilderSupport var1, @Nonnull BiFunction<Builder<Role>, BuilderSupport, V> var2, @Nonnull Supplier<V> var3)
protected <V> V executeOnSuperRole<V> V executeOnSuperRole(@Nonnull SpawningContext var1, @Nonnull BiFunction<Builder<Role>, SpawningContext, V> var2, @Nonnull Supplier<V> var3)
protected <V> V executeOnSuperRole<V> V executeOnSuperRole(@Nonnull ExecutionContext var1, Scope var2, @Nonnull TriFunction<Builder<Role>, ExecutionContext, Scope, V> var3, @Nonnull Supplier<V> var4)
protected int executeOnSuperRoleint executeOnSuperRole(@Nonnull ExecutionContext var1, Scope var2, @Nonnull TriToIntFunction<Builder<Role>, ExecutionContext, Scope> var3, int var4)
public int getReferenceIndexint getReferenceIndex()
if if(var3 == null)

Исходный код

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

class="kw">import com.google.gson.JsonElement;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.codec.schema.config.StringSchema;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.function.function.TriFunction;
class="kw">import com.hypixel.hytale.function.function.TriToIntFunction;
class="kw">import com.hypixel.hytale.logger.sentry.SkipSentryException;
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.asset.builder.Builder;
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.BuilderModifier;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderParameters;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.DependencyTrackingBuilder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.StateMappingHelper;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.StringHolder;
class="kw">import com.hypixel.hytale.server.npc.movement.MovementMode;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ForwardedModifier;
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.ISpawnableWithModel;
class="kw">import com.hypixel.hytale.server.spawning.SpawnTestResult;
class="kw">import com.hypixel.hytale.server.spawning.SpawningContext;
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 java.util.function.BiFunction;
class="kw">import java.util.function.Supplier;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BuilderRoleVariant class="kw">extends DependencyTrackingBuilder<Role> class="kw">implements ISpawnableWithModel, RoleBuilder {
   class="kw">protected class="kw">final StringHolder reference = new StringHolder();
   class="kw">protected int referenceIndex;
   class="kw">protected BuilderModifier modifier;

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

   @Override
   class="kw">public boolean isSpawnable() {
      class="kw">return true;
   }

   @Nullable
   class="kw">public Role build(@Nonnull BuilderSupport var1) {
      class="kw">return this.executeOnSuperRole(var1, Builder::build, () -> null);
   }

   @Nonnull
   @Override
   class="kw">public Role createAndAttach(@Nonnull Holder<EntityStore> var1, @Nonnull BuilderSupport var2) {
      Role var3 = this.executeOnSuperRole(var2, (var1x, var2x) -> ((RoleBuilder)var1x).createAndAttach(var1, var2x), () -> null);
      if (var3 == null) {
         throw new IllegalStateException("Variant super role missing or does not implement RoleBuilder");
      } else {
         class="kw">return var3;
      }
   }

   @Override
   class="kw">public StateMappingHelper getStateMappingHelper() {
      Builder var1 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
      class="kw">return var1.getStateMappingHelper();
   }

   @Override
   class="kw">public boolean validate(String var1, @Nonnull NPCLoadTimeValidationHelper var2, @Nonnull ExecutionContext var3, Scope var4, List<String> var5) {
      Builder var6 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
      if (!(var6 class="kw">instanceof ISpawnableWithModel)) {
         NPCPlugin.get().getLogger().at(Level.SEVERE).log("Variant %s is of a non-spawnable template!", var1);
         class="kw">return false;
      }

      var2.setIsVariant();
      String var7 = this.modifier.getCombatConfig();
      if (var7 != null && var3.getCombatConfig() == null) {
         var3.setCombatConfig(var7);
      }

      Map var8 = this.modifier.getInteractionVars();
      if (var8 != null && var3.getInteractionVars() == null) {
         var3.setInteractionVars(var8);
      }

      BuilderParameters var9 = var6.getBuilderParameters();
      Scope var10 = this.modifier.createScope(var3, var9, null);
      Scope var11 = var3.setScope(var10);
      Map var12 = var3.setForwardedModifiers(this.modifier.getForwardedModifiers());
      boolean var13 = var6.validate(var1, var2, var3, var3.getScope(), var5);
      var3.setForwardedModifiers(var12);
      var13 &= BuilderModifier.validateForwardedModifiers(this.modifier, var9, this.builderManager, var3, var1, var5);
      var3.setScope(var11);
      class="kw">return var13;
   }

   @Nonnull
   @Override
   class="kw">public Builder<Role> readConfig(@Nonnull JsonElement var1) {
      if (this.isCreatingSchema()) {
         Map var2 = this.builderSchema.getProperties();
         StringSchema var3 = new StringSchema();
         var3.setHytaleAssetRef("NPCRole");
         var2.put("Reference", var3);
         var2.put("Modify", BuilderModifier.toSchema(this.builderSchemaContext));
         class="kw">return this;
      }

      if (!this.isCreatingDescriptor()) {
         BuilderModifier.readModifierObject(
            this.expectJsonObject(var1, this.getLabel()),
            this.getBuilderParameters(),
            this.reference,
            var0 -> {},
            var1x -> this.modifier = var1x,
            this.stateHelper,
            this.extraInfo
         );
         if (!this.reference.isStatic()) {
            throw new IllegalStateException("Computable component references are not supported for Role Variants");
         }

         this.referenceIndex = this.getBuilderManager().getOrCreateIndex(this.reference.get(null));
         this.builderParameters.addDependency(this.referenceIndex);
      }

      this.ignoreAttribute("Reference");
      this.ignoreAttribute("Modify");
      this.ignoreAttribute("$Label");
      class="kw">return this;
   }

   @Nonnull
   @Override
   class="kw">public Class<Role> category() {
      class="kw">return Role.class;
   }

   @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) {
      class="kw">return this.executeOnSuperRole(var1, (var0, var1x) -> ((ISpawnableWithModel)var0).canSpawn(var1x), () -> SpawnTestResult.FAIL_NOT_SPAWNABLE);
   }

   @Override
   class="kw">public boolean requiresSpawnDropHeightCheck(@Nonnull SpawningContext var1) {
      class="kw">return !Boolean.FALSE
         .equals(this.executeOnSuperRole(var1, (var0, var1x) -> ((ISpawnableWithModel)var0).requiresSpawnDropHeightCheck(var1x), () -> Boolean.TRUE));
   }

   @Override
   class="kw">public void getMovementModes(
      @Nonnull SpawningContext var1, @Nonnull Set<MovementMode> var2, @Nonnull Set<MovementMode> var3, @Nonnull Set<MovementMode> var4
   ) {
      this.executeOnSuperRole(var1, (var3x, var4x) -> {
         ((ISpawnableWithModel)var3x).getMovementModes(var4x, var2, var3, var4);
         class="kw">return null;
      }, () -> null);
   }

   @Override
   class="kw">public boolean breathesInAir(@Nonnull ExecutionContext var1, @Nullable Scope var2) {
      class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).breathesInAir(var1x, var2x), () -> true);
   }

   @Override
   class="kw">public boolean breathesInWater(@Nonnull ExecutionContext var1, @Nullable Scope var2) {
      class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).breathesInWater(var1x, var2x), () -> false);
   }

   @Nullable
   @Override
   class="kw">public String getSpawnModelName(@Nonnull ExecutionContext var1, Scope var2) {
      class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).getSpawnModelName(var1x, var2x), () -> null);
   }

   @Override
   class="kw">public Scope createModifierScope(@Nonnull ExecutionContext var1) {
      Scope var2 = var1.getScope();
      Builder var3 = this;
      Scope var4 = null;

      do {
         BuilderRoleVariant var5 = (BuilderRoleVariant)var3;
         var3 = this.builderManager.getCachedBuilder(var5.referenceIndex, Role.class);
         if (!(var3 class="kw">instanceof ISpawnableWithModel)) {
            throw new IllegalStateException("Cannot instantiate a variant of something that isn't a spawnable role!");
         }

         var4 = var5.modifier.createScope(var1, var3.getBuilderParameters(), var4);
         var1.setScope(var4);
      } while (var3 class="kw">instanceof BuilderRoleVariant);

      var1.setScope(var2);
      class="kw">return var4;
   }

   @Nonnull
   @Override
   class="kw">public Scope createExecutionScope() {
      class="kw">return this.getBuilderParameters().createScope();
   }

   @Override
   class="kw">public void markNeedsReload() {
      NPCPlugin.get().setRoleBuilderNeedsReload(this);
   }

   @Nonnull
   @Override
   class="kw">public String getShortDescription() {
      class="kw">return "Create a variant from an existing NPC JSON file";
   }

   @Nonnull
   @Override
   class="kw">public String getLongDescription() {
      class="kw">return "Create a variant from an existing NPC JSON file";
   }

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

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

   class="kw">public int getReferenceIndex() {
      class="kw">return this.referenceIndex;
   }

   @Override
   class="kw">public boolean isMemory(@Nonnull ExecutionContext var1, Scope var2) {
      Boolean var3 = this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).isMemory(var1x, var2x), () -> null);
      class="kw">return var3 != null ? var3 : false;
   }

   @Nullable
   @Override
   class="kw">public String getMemoriesCategory(@Nonnull ExecutionContext var1, Scope var2) {
      class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).getMemoriesCategory(var1x, var2x), () -> null);
   }

   @Nullable
   @Override
   class="kw">public String getMemoriesNameOverride(@Nonnull ExecutionContext var1, Scope var2) {
      class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).getMemoriesNameOverride(var1x, var2x), () -> null);
   }

   @Nonnull
   @Override
   class="kw">public String getNameTranslationKey(ExecutionContext var1, Scope var2) {
      class="kw">return this.executeOnSuperRole(var1, var2, (var0, var1x, var2x) -> ((ISpawnableWithModel)var0).getNameTranslationKey(var1x, var2x), () -> {
         throw new SkipSentryException(new IllegalStateException("Failed to get translation key for role!"));
      });
   }

   class="kw">protected <V> V executeOnSuperRole(@Nonnull BuilderSupport var1, @Nonnull BiFunction<Builder<Role>, BuilderSupport, V> var2, @Nonnull Supplier<V> var3) {
      Builder var4 = var1.getBuilderManager().getCachedBuilder(this.referenceIndex, Role.class);
      if (!(var4 class="kw">instanceof ISpawnableWithModel)) {
         class="kw">return var3.get();
      }

      BuilderParameters var5 = var4.getBuilderParameters();
      Scope var6 = this.modifier.createScope(var1, var5, null);
      ExecutionContext var7 = var1.getExecutionContext();
      String var8 = this.modifier.getCombatConfig();
      if (var8 != null && var7.getCombatConfig() == null) {
         var7.setCombatConfig(var8);
      }

      Map var9 = this.modifier.getInteractionVars();
      if (var9 != null && var7.getInteractionVars() == null) {
         var7.setInteractionVars(var9);
      }

      Scope var10 = var7.setScope(var6);
      var1.setGlobalScope(var6);
      Map var11 = var1.setForwardedModifiers(this.modifier.getForwardedModifiers());
      Object var12 = var2.apply(var4, var1);
      var1.setForwardedModifiers(var11);
      var7.setScope(var10);
      class="kw">return var12;
   }

   class="kw">protected <V> V executeOnSuperRole(@Nonnull SpawningContext var1, @Nonnull BiFunction<Builder<Role>, SpawningContext, V> var2, @Nonnull Supplier<V> var3) {
      Builder var4 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
      if (!(var4 class="kw">instanceof ISpawnableWithModel)) {
         class="kw">return var3.get();
      }

      ExecutionContext var5 = var1.getExecutionContext();
      Scope var6 = var5.setScope(var1.getModifierScope());
      Object var7 = var2.apply(var4, var1);
      var5.setScope(var6);
      class="kw">return var7;
   }

   class="kw">protected <V> V executeOnSuperRole(
      @Nonnull ExecutionContext var1, Scope var2, @Nonnull TriFunction<Builder<Role>, ExecutionContext, Scope, V> var3, @Nonnull Supplier<V> var4
   ) {
      Builder var5 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
      if (!(var5 class="kw">instanceof ISpawnableWithModel)) {
         class="kw">return var4.get();
      } else if (var2 != null) {
         Scope var6 = var1.setScope(var2);
         Object var7 = var3.apply(var5, var1, var2);
         var1.setScope(var6);
         class="kw">return var7;
      } else {
         class="kw">return var3.apply(var5, var1, null);
      }
   }

   class="kw">protected int executeOnSuperRole(
      @Nonnull ExecutionContext var1, Scope var2, @Nonnull TriToIntFunction<Builder<Role>, ExecutionContext, Scope> var3, int var4
   ) {
      Builder var5 = this.builderManager.getCachedBuilder(this.referenceIndex, Role.class);
      if (!(var5 class="kw">instanceof ISpawnableWithModel)) {
         class="kw">return var4;
      } else if (var2 != null) {
         Scope var6 = var1.setScope(var2);
         int var7 = var3.apply(var5, var1, var2);
         var1.setScope(var6);
         class="kw">return var7;
      } else {
         class="kw">return var3.apply(var5, var1, null);
      }
   }
}