Recipient enum

Пакет: com.hypixel.hytale.builtin.triggervolumes.effect.builtin

Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/SendMessageEffect.java

Поля (1)

МодификаторыТипИмя
TRIGGERING_PLAYER, NEAREST_PLAYER, PLAYERS_IN_VOLUME, ALL_PLAYERS

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.effect.builtin;

class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEventType;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerVolumeEntityQuery;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.VolumeEntry;
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.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.spatial.SpatialData;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class SendMessageEffect class="kw">extends TriggerEffect {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<SendMessageEffect> CODEC = BuilderCodec.builder(SendMessageEffect.class, SendMessageEffect::new, BASE_CODEC)
      .append(new KeyedCodec<>("Message", Codec.STRING), (var0, var1) -> var0.message = var1, var0 -> var0.message)
      .add()
      .append(
         new KeyedCodec<>("Recipient", new EnumCodec<>(SendMessageEffect.Recipient.class), false),
         (var0, var1) -> var0.recipient = var1 == null ? SendMessageEffect.Recipient.TRIGGERING_PLAYER : var1,
         var0 -> var0.recipient
      )
      .add()
      .build();
   class="kw">private String message;
   @Nonnull
   class="kw">private SendMessageEffect.Recipient recipient = SendMessageEffect.Recipient.TRIGGERING_PLAYER;

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

   @Nonnull
   class="kw">public class="kw">static SendMessageEffect create(@Nonnull TriggerEventType var0, @Nonnull String var1) {
      SendMessageEffect var2 = new SendMessageEffect();
      var2.setEventType(var0);
      var2.message = var1;
      class="kw">return var2;
   }

   @Override
   class="kw">public void execute(@Nonnull TriggerContext var1) {
      if (this.message != null) {
         List var2 = this.resolveRecipients(var1);
         if (!var2.isEmpty()) {
            Message var3 = withTagParams(var1, Message.translation(this.message));

            for (PlayerRef var5 : var2) {
               var5.sendMessage(var3);
            }
         }
      }
   }

   @Nonnull
   class="kw">private List<PlayerRef> resolveRecipients(@Nonnull TriggerContext var1) {
      Store var2 = var1.getStore();

      class="kw">return class="kw">switch (this.recipient) {
         case TRIGGERING_PLAYER -> {
            PlayerRef var3 = playerRefOf(var2, var1.getEntityRef());
            yield var3 != null ? List.of(var3) : List.of();
         }
         case NEAREST_PLAYER -> nearestPlayer(var2, var1.getVolume().getPosition());
         case PLAYERS_IN_VOLUME -> playersInVolumes(var2, var1.getSpatialVolumes());
         case ALL_PLAYERS -> allPlayers(var2);
      };
   }

   @Nonnull
   class="kw">private class="kw">static List<PlayerRef> nearestPlayer(@Nonnull Store<EntityStore> var0, @Nonnull Vector3d var1) {
      SpatialResource var2 = var0.getResource(EntityModule.get().getPlayerSpatialResourceType());
      if (var2 == null) {
         class="kw">return List.of();
      }

      SpatialData var3 = var2.getSpatialData();
      PlayerRef var4 = null;
      double var5 = Double.MAX_VALUE;

      for (int var7 = 0; var7 < var3.size(); var7++) {
         double var8 = var3.getVector(var7).distanceSquared(var1);
         if (!(var8 >= var5)) {
            PlayerRef var10 = playerRefOf(var0, var3.getData(var7));
            if (var10 != null) {
               var4 = var10;
               var5 = var8;
            }
         }
      }

      class="kw">return var4 != null ? List.of(var4) : List.of();
   }

   @Nonnull
   class="kw">private class="kw">static List<PlayerRef> playersInVolumes(@Nonnull Store<EntityStore> var0, @Nonnull List<VolumeEntry> var1) {
      List var2 = TriggerVolumeEntityQuery.collectTargets(var0, var1, false, true, "");
      ArrayList var3 = new ArrayList<>(var2.size());

      for (Ref var5 : var2) {
         PlayerRef var6 = playerRefOf(var0, var5);
         if (var6 != null) {
            var3.add(var6);
         }
      }

      class="kw">return var3;
   }

   @Nonnull
   class="kw">private class="kw">static List<PlayerRef> allPlayers(@Nonnull Store<EntityStore> var0) {
      SpatialResource var1 = var0.getResource(EntityModule.get().getPlayerSpatialResourceType());
      if (var1 == null) {
         class="kw">return List.of();
      }

      SpatialData var2 = var1.getSpatialData();
      ArrayList var3 = new ArrayList<>(var2.size());

      for (int var4 = 0; var4 < var2.size(); var4++) {
         PlayerRef var5 = playerRefOf(var0, var2.getData(var4));
         if (var5 != null) {
            var3.add(var5);
         }
      }

      class="kw">return var3;
   }

   @Nullable
   class="kw">private class="kw">static PlayerRef playerRefOf(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1) {
      class="kw">return var1.isValid() ? var0.getComponent(var1, PlayerRef.getComponentType()) : null;
   }

   class="kw">public enum Recipient {
      TRIGGERING_PLAYER,
      NEAREST_PLAYER,
      PLAYERS_IN_VOLUME,
      ALL_PLAYERS;

      Recipient() {
      }
   }
}