SpectateControlInteraction class

Пакет: com.hypixel.hytale.server.core.modules.entity.spectator

Файл: com/hypixel/hytale/server/core/modules/entity/spectator/SpectateControlInteraction.java

extends: SimpleInstantInteraction

Поля (15)

МодификаторыТипИмя
Prev, Next, Detach
int var10
int var11
PlayerRef var2
ArrayList var3
PlayerRef var3
CommandBuffer var4
UUID var4
Ref var5
Spectating var6
Ref var6
List var7
Archetype var7
int var8
int var9

Методы (9)

МодификаторыВозвратСигнатура
Action Action()
private record Candidaterecord Candidate(@Nonnull UUID uuid, @Nonnull Ref<EntityStore> ref)
abstract for for(int var5 = 0; var5 < var0.size()
if if(this.action != null)
if if(var6 != null)
if if(this.action == SpectateControlInteraction.Action.Detach)
if if(var11 != var8)
if if(var3 == null)
static int indexOfCurrentTargetint indexOfCurrentTarget(@Nonnull List<SpectateControlInteraction.Candidate> var0, @Nullable Ref<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2)

Исходный код

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

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.Archetype;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Spectating;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction;
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.Comparator;
class="kw">import java.util.List;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class SpectateControlInteraction class="kw">extends SimpleInstantInteraction {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<SpectateControlInteraction> CODEC = BuilderCodec.builder(
         SpectateControlInteraction.class, SpectateControlInteraction::new, SimpleInstantInteraction.CODEC
      )
      .documentation("Spectator camera control that cycles the follow camera through the world's living non-spectating players, or detaches it to free cam.")
      .appendInherited(
         new KeyedCodec<>("Action", new EnumCodec<>(SpectateControlInteraction.Action.class)),
         (var0, var1) -> var0.action = var1,
         var0 -> var0.action,
         (var0, var1) -> var0.action = var1.action
      )
      .add()
      .build();
   @Nullable
   class="kw">private SpectateControlInteraction.Action action;

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

   @Override
   class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
      CommandBuffer var4 = var2.getCommandBuffer();
      assert var4 != null;
      if (this.action != null) {
         Ref var5 = var2.getOwningEntity();
         Spectating var6 = var4.getComponent(var5, Spectating.getComponentType());
         if (var6 != null) {
            if (this.action == SpectateControlInteraction.Action.Detach) {
               if (var6.getTargetRef() != null) {
                  var4.putComponent(var5, Spectating.getComponentType(), new Spectating());
               }
            } else {
               List var7 = collectTargets(var5, var4);
               if (!var7.isEmpty()) {
                  int var8 = indexOfCurrentTarget(var7, var6.getTargetRef(), var4);
                  int var9 = this.action == SpectateControlInteraction.Action.Next ? 1 : -1;
                  int var10 = var8 >= 0 ? var8 : (this.action == SpectateControlInteraction.Action.Next ? -1 : var7.size());
                  int var11 = Math.floorMod(var10 + var9, var7.size());
                  if (var11 != var8) {
                     var4.putComponent(var5, Spectating.getComponentType(), new Spectating(var7.get(var11).ref()));
                  }
               }
            }
         }
      }
   }

   @Nonnull
   class="kw">private class="kw">static List<SpectateControlInteraction.Candidate> collectTargets(@Nonnull Ref<EntityStore> var0, @Nonnull CommandBuffer<EntityStore> var1) {
      PlayerRef var2 = var1.getComponent(var0, PlayerRef.getComponentType());
      ArrayList var3 = new ArrayList<>();

      for (PlayerRef var5 : var1.getExternalData().getWorld().getPlayerRefs()) {
         Ref var6 = var5.getReference();
         if (var6 != null && var6.isValid() && var6.getStore() == var0.getStore()) {
            Archetype var7 = var1.getArchetype(var6);
            if (!var7.contains(DeathComponent.getComponentType())
               && !var7.contains(Spectating.getComponentType())
               && !SpectatorSystems.isTargetHidden(var2, var5.getUuid())) {
               var3.add(new SpectateControlInteraction.Candidate(var5.getUuid(), var6));
            }
         }
      }

      var3.sort(Comparator.comparing(SpectateControlInteraction.Candidate::uuid));
      class="kw">return var3;
   }

   class="kw">private class="kw">static int indexOfCurrentTarget(
      @Nonnull List<SpectateControlInteraction.Candidate> var0, @Nullable Ref<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2
   ) {
      if (var1 != null && var1.isValid()) {
         PlayerRef var3 = var2.getComponent(var1, PlayerRef.getComponentType());
         if (var3 == null) {
            class="kw">return -1;
         }

         UUID var4 = var3.getUuid();

         for (int var5 = 0; var5 < var0.size(); var5++) {
            if (var0.get(var5).uuid().equals(var4)) {
               class="kw">return var5;
            }
         }

         class="kw">return -1;
      } else {
         class="kw">return -1;
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "SpectateControlInteraction{action=" + this.action + "} " + super.toString();
   }

   class="kw">public enum Action {
      Prev,
      Next,
      Detach;

      Action() {
      }
   }

   class="kw">private record Candidate(@Nonnull UUID uuid, @Nonnull Ref<EntityStore> ref) {
      class="kw">private Candidate {
      }
   }
}