RepeatInteraction class

Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.none

Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/none/RepeatInteraction.java

extends: SimpleInteraction

Поля (13)

МодификаторыТипИмя
final BuilderCodec<RepeatInteraction> CODEC
break
break
break
return
return
return
com.hypixel.hytale.protocol.RepeatInteraction var2
DynamicMetaStore var6
InteractionChain var6
InteractionChain var7
var7
DynamicMetaStore var7

Методы (4)

МодификаторыВозвратСигнатура
if if(var1 && this.repeat != -1)
if if(var7 != null)
if if(this.repeat != -1)
if if(var6 != null)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.none;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.WaitForDataFrom;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionChain;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionManager;
class="kw">import com.hypixel.hytale.server.core.meta.DynamicMetaStore;
class="kw">import com.hypixel.hytale.server.core.meta.MetaKey;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.data.Collector;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.data.StringTag;
class="kw">import javax.annotation.Nonnull;

class="kw">public class RepeatInteraction class="kw">extends SimpleInteraction {
   class="kw">public class="kw">static class="kw">final BuilderCodec<RepeatInteraction> CODEC = BuilderCodec.builder(RepeatInteraction.class, RepeatInteraction::new, SimpleInteraction.CODEC)
      .documentation(
         "Forks from the current interaction into one or more chains that run the specified interactions.\n\nWhen run this will create a new chain that will run the interactions specified in `ForkInteractions`. This will then wait until that chain completes. If the chain completes successfully it will then check the `Repeat` field to see if it needs to run again, if not then the interactions `Next` are run otherwise this repeats with the next fork. If the chain fails then any repeating is ignored and the interactions `Failed` are run instead."
      )
      .<String>appendInherited(
         new KeyedCodec<>("ForkInteractions", RootInteraction.CHILD_ASSET_CODEC),
         (var0, var1) -> var0.forkInteractions = var1,
         var0 -> var0.forkInteractions,
         (var0, var1) -> var0.forkInteractions = var1.forkInteractions
      )
      .documentation("The interactions to run in the forks created by this interaction.")
      .addValidator(Validators.nonNull())
      .addValidatorLate(() -> RootInteraction.VALIDATOR_CACHE.getValidator().late())
      .add()
      .<Integer>appendInherited(
         new KeyedCodec<>("Repeat", Codec.INTEGER), (var0, var1) -> var0.repeat = var1, var0 -> var0.repeat, (var0, var1) -> var0.repeat = var1.repeat
      )
      .documentation("The number of times to repeat. -1 is considered as infinite, be careful when using this value.")
      .addValidator(Validators.or(Validators.greaterThanOrEqual(1), Validators.equal(-1)))
      .add()
      .build();
   class="kw">private class="kw">static class="kw">final MetaKey<InteractionChain> FORKED_CHAIN = Interaction.META_REGISTRY.registerMetaObject(var0 -> null);
   class="kw">private class="kw">static class="kw">final MetaKey<Integer> REMAINING_REPEATS = Interaction.META_REGISTRY.registerMetaObject(var0 -> null);
   class="kw">private class="kw">static class="kw">final StringTag TAG_FORK = StringTag.of("Fork");
   class="kw">private class="kw">static class="kw">final StringTag TAG_NEXT = StringTag.of("Next");
   class="kw">private class="kw">static class="kw">final StringTag TAG_FAILED = StringTag.of("Failed");
   class="kw">protected String forkInteractions;
   class="kw">protected int repeat = 1;

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

   @Nonnull
   @Override
   class="kw">public WaitForDataFrom getWaitForDataFrom() {
      class="kw">return WaitForDataFrom.None;
   }

   @Override
   class="kw">protected void tick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
      DynamicMetaStore var6 = var4.getInstanceStore();
      if (var1 && this.repeat != -1) {
         var6.putMetaObject(REMAINING_REPEATS, this.repeat);
      }

      InteractionChain var7 = var6.getMetaObject(FORKED_CHAIN);
      if (var7 != null) {
         class="kw">switch (var7.getServerState()) {
            case NotFinished:
               var4.getState().state = InteractionState.NotFinished;
               class="kw">return;
            case Finished:
               if (this.repeat != -1 && var6.getMetaObject(REMAINING_REPEATS) <= 0) {
                  var4.getState().state = InteractionState.Finished;
                  super.tick0(var1, var2, var3, var4, var5);
                  class="kw">return;
               }

               var4.getState().state = InteractionState.NotFinished;
               break;
            case Failed:
               var4.getState().state = InteractionState.Failed;
               super.tick0(var1, var2, var3, var4, var5);
               class="kw">return;
            case Skip:
            case ItemChanged:
         }
      }

      var7 = var4.fork(var4.duplicate(), RootInteraction.getRootInteractionOrUnknown(this.forkInteractions), true);
      var6.putMetaObject(FORKED_CHAIN, var7);
      var4.getState().state = InteractionState.NotFinished;
      if (this.repeat != -1) {
         var6.putMetaObject(REMAINING_REPEATS, var6.getMetaObject(REMAINING_REPEATS) - 1);
      }
   }

   @Override
   class="kw">protected void simulateTick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
      InteractionChain var6 = var4.getInstanceStore().getMetaObject(FORKED_CHAIN);
      DynamicMetaStore var7 = var4.getInstanceStore();
      if (var6 != null) {
         class="kw">switch (var6.getServerState()) {
            case NotFinished:
               var4.getState().state = InteractionState.NotFinished;
               break;
            case Finished:
               if (this.repeat != -1 && var7.getMetaObject(REMAINING_REPEATS) <= 0) {
                  var4.getState().state = InteractionState.Finished;
                  super.simulateTick0(var1, var2, var3, var4, var5);
               } else {
                  var4.getState().state = InteractionState.NotFinished;
               }
               break;
            case Failed:
               var4.getState().state = InteractionState.Failed;
               super.simulateTick0(var1, var2, var3, var4, var5);
            case Skip:
            case ItemChanged:
         }
      } else {
         var4.getState().state = InteractionState.NotFinished;
      }
   }

   @Override
   class="kw">public boolean walk(@Nonnull Collector var1, @Nonnull InteractionContext var2) {
      if (this.forkInteractions != null
         && InteractionManager.walkInteractions(var1, var2, TAG_FORK, RootInteraction.getRootInteractionOrUnknown(this.forkInteractions).getInteractionIds())) {
         class="kw">return true;
      } else {
         class="kw">return this.next != null && InteractionManager.walkInteraction(var1, var2, TAG_NEXT, this.next)
            ? true
            : this.failed != null && InteractionManager.walkInteraction(var1, var2, TAG_FAILED, this.failed);
      }
   }

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

   @Nonnull
   @Override
   class="kw">protected com.hypixel.hytale.protocol.Interaction generatePacket() {
      class="kw">return new com.hypixel.hytale.protocol.RepeatInteraction();
   }

   @Override
   class="kw">protected void configurePacket(com.hypixel.hytale.protocol.Interaction var1) {
      super.configurePacket(var1);
      com.hypixel.hytale.protocol.RepeatInteraction var2 = (com.hypixel.hytale.protocol.RepeatInteraction)var1;
      var2.forkInteractions = RootInteraction.getRootInteractionIdOrUnknown(this.forkInteractions);
      var2.repeat = this.repeat;
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "RepeatInteraction{forkInteractions='" + this.forkInteractions + "', repeat=" + this.repeat + "} " + super.toString();
   }
}