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