Remover class
Пакет: com.hypixel.hytale.builtin.adventure.worldevents.action
Файл: com/hypixel/hytale/builtin/adventure/worldevents/action/EventStopAction.java
implements: BiConsumer<ArchetypeChunk<EntityStore>, CommandBuffer<EntityStore>>, AutoCloseable
Поля (5)
| Модификаторы | Тип | Имя |
|---|---|---|
|
protected T |
ctx |
|
protected CommandBuffer<EntityStore> |
parentBuffer |
|
protected BiPredicate<WorldEvent, T> |
predicate |
|
CommandBuffer |
var3 |
|
WorldEvent |
var5 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public void |
acceptpublic void accept(@Nonnull ArchetypeChunk<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2) |
|
public void |
closepublic void close() |
abstract |
|
for for(int var4 = 0; var4 < var1.size() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.worldevents.action;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.context.ContextKey;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.context.EventContext;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.Validator;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.WorldEvent;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.record.RecordCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.Objects;
class="kw">import java.util.function.BiConsumer;
class="kw">import java.util.function.BiPredicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public record EventStopAction(@Nonnull ContextKey eventKey) class="kw">implements EventAction {
class="kw">public class="kw">static class="kw">final String ID = "EventStopAction";
class="kw">public class="kw">static class="kw">final RecordCodec<EventStopAction> CODEC = RecordCodec.builder(EventStopAction.class)
.documentation("An action that stops a previously started world-event.")
.append(
new KeyedCodec<>("EventKey", ContextKey.CODEC, true),
EventStopAction::eventKey,
var0 -> var0.documentation("The variable name of the event that this action should stop").addValidator(Validators.nonNull())
)
.build(EventStopAction::new);
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">public EventStopAction {
}
@Override
class="kw">public boolean apply(@Nonnull Ref<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull WorldEvent var3) {
EventContext var4 = var3.context.consume(this.eventKey, EventContext.class);
if (var4 == null) {
((HytaleLogger.Api)LOGGER.atWarning()).log("Action failed: EventContext missing for key: %s", this.eventKey.getName());
class="kw">return false;
} else {
stopEvent(var2, var4.id(), (var0, var1x) -> var0.uuid.equals(var1x));
class="kw">return true;
}
}
@Override
class="kw">public void validate(@Nonnull Validator var1) {
var1.addReferencedKey("EventStopAction", "EventKey", this.eventKey);
}
class="kw">public class="kw">static <T> void stopEvent(@Nonnull Store<EntityStore> var0, @Nullable T var1, @Nonnull BiPredicate<WorldEvent, T> var2) {
stopEvent(var0, null, var1, var2);
}
class="kw">public class="kw">static <T> void stopEvent(@Nonnull CommandBuffer<EntityStore> var0, @Nullable T var1, @Nonnull BiPredicate<WorldEvent, T> var2) {
stopEvent(var0.getStore(), var0, var1, var2);
}
class="kw">private class="kw">static <T> void stopEvent(
@Nonnull Store<EntityStore> var0, @Nullable CommandBuffer<EntityStore> var1, @Nullable T var2, @Nonnull BiPredicate<WorldEvent, T> var3
) {
try (EventStopAction.Remover var4 = (EventStopAction.Remover<T>)EventStopAction.Remover.LOCAL.get()) {
var4.parentBuffer = var1;
var4.ctx = var2;
var4.predicate = var3;
var0.getExternalData().getStore().forEachChunk(WorldEvent.getComponentType(), var4);
}
}
class="kw">protected class="kw">static class Remover<T> class="kw">implements BiConsumer<ArchetypeChunk<EntityStore>, CommandBuffer<EntityStore>>, AutoCloseable {
class="kw">protected class="kw">static class="kw">final ThreadLocal<EventStopAction.Remover<?>> LOCAL = ThreadLocal.withInitial(EventStopAction.Remover::new);
@Nullable
class="kw">protected T ctx;
@Nullable
class="kw">protected BiPredicate<WorldEvent, T> predicate;
@Nullable
class="kw">protected CommandBuffer<EntityStore> parentBuffer;
class="kw">protected Remover() {
}
class="kw">public void accept(@Nonnull ArchetypeChunk<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2) {
assert this.predicate != null;
CommandBuffer var3 = Objects.requireNonNullElse(this.parentBuffer, var2);
for (int var4 = 0; var4 < var1.size(); var4++) {
WorldEvent var5 = var1.getComponent(var4, WorldEvent.getComponentType());
assert var5 != null;
if (this.predicate.test(var5, this.ctx)) {
var3.tryRemoveEntity(var1.getReferenceTo(var4), RemoveReason.REMOVE);
}
}
}
@Override
class="kw">public void close() {
this.ctx = null;
this.predicate = null;
this.parentBuffer = null;
}
}
}