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();
}
}