SpectateTargetCommand class

Пакет: com.hypixel.hytale.server.core.command.commands.player

Файл: com/hypixel/hytale/server/core/command/commands/player/SpectateCommand.java

extends: AbstractPlayerCommand

Поля (2)

МодификаторыТипИмя
private static final float TARGET_SEARCH_RADIUS
Ref var6

Методы (3)

МодификаторыВозвратСигнатура
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
if if(var6 == null)
abstract super super("target", "server.commands.spectate.target.desc")

Исходный код

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

class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.gamemode.GameModeType;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.OptionalArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.CommandBase;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
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.entity.gamemode.GameModeTypes;
class="kw">import com.hypixel.hytale.server.core.permissions.HytalePermissions;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.TargetUtil;
class="kw">import javax.annotation.Nonnull;

class="kw">public class SpectateCommand class="kw">extends AbstractPlayerCommand {
   @Nonnull
   class="kw">private class="kw">static class="kw">final String DEFAULT_GAME_MODE_TYPE_ID = "Spectator";

   class="kw">public SpectateCommand() {
      super("spectate", "server.commands.spectate.desc");
      this.requirePermission(HytalePermissions.fromCommand("spectate.self"));
      this.setPermissionGroups("hytale:Builder");
      this.addUsageVariant(new SpectateCommand.SpectateWatchCommand());
      this.addSubCommand(new SpectateCommand.SpectateTargetCommand());
      this.addSubCommand(new SpectateCommand.SpectateExitCommand());
      this.addSubCommand(new SpectateCommand.SpectateFreeCommand());
      this.addSubCommand(new SpectateCommand.SpectateSetCommand());
   }

   @Override
   class="kw">protected void execute(
      @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
   ) {
      if (Spectating.isSpectating(var3, var2)) {
         if (GameModeTypes.exit(var3, var2)) {
            var1.sendMessage(Message.translation("server.commands.spectate.disabled"));
         } else {
            var1.sendMessage(Message.translation("server.commands.spectate.cantExit"));
         }
      } else if (GameModeTypes.enter(var3, var2, "Spectator")) {
         var1.sendMessage(Message.translation("server.commands.spectate.enabled"));
      } else {
         var1.sendMessage(Message.translation("server.commands.spectate.cantEnter"));
      }
   }

   class="kw">private class="kw">static void enterAndWatch(
      @Nonnull CommandContext var0,
      @Nonnull Store<EntityStore> var1,
      @Nonnull Ref<EntityStore> var2,
      @Nonnull Ref<EntityStore> var3,
      @Nonnull Message var4,
      @Nonnull Message var5
   ) {
      if (var1.getArchetype(var3).contains(DeathComponent.getComponentType())) {
         var0.sendMessage(var5);
      } else {
         PlayerRef var6 = var1.getComponent(var2, PlayerRef.getComponentType());
         PlayerRef var7 = var1.getComponent(var3, PlayerRef.getComponentType());
         if (var6 != null && var7 != null && var6.getHiddenPlayersManager().isPlayerHidden(var7.getUuid())) {
            var0.sendMessage(var5);
         } else if (!Spectating.isSpectating(var2, var1) && !GameModeTypes.enter(var2, var1, "Spectator")) {
            var0.sendMessage(Message.translation("server.commands.spectate.cantEnter"));
         } else {
            var1.putComponent(var2, Spectating.getComponentType(), new Spectating(var3));
            var0.sendMessage(var4);
         }
      }
   }

   class="kw">private class="kw">static class SpectateExitCommand class="kw">extends AbstractPlayerCommand {
      SpectateExitCommand() {
         super("exit", "server.commands.spectate.exit.desc");
         this.requirePermission(HytalePermissions.fromCommand("spectate.self"));
         this.setPermissionGroups("hytale:Builder");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         if (!Spectating.isSpectating(var3, var2)) {
            var1.sendMessage(Message.translation("server.commands.spectate.notSpectating"));
         } else {
            if (GameModeTypes.exit(var3, var2)) {
               var1.sendMessage(Message.translation("server.commands.spectate.disabled"));
            } else {
               var1.sendMessage(Message.translation("server.commands.spectate.cantExit"));
            }
         }
      }
   }

   class="kw">private class="kw">static class SpectateFreeCommand class="kw">extends AbstractPlayerCommand {
      SpectateFreeCommand() {
         super("free", "server.commands.spectate.free.desc");
         this.requirePermission(HytalePermissions.fromCommand("spectate.self"));
         this.setPermissionGroups("hytale:Builder");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         if (!Spectating.isSpectating(var3, var2)) {
            if (GameModeTypes.enter(var3, var2, "Spectator")) {
               var1.sendMessage(Message.translation("server.commands.spectate.enabled"));
            } else {
               var1.sendMessage(Message.translation("server.commands.spectate.cantEnter"));
            }
         } else {
            var2.putComponent(var3, Spectating.getComponentType(), new Spectating());
            var1.sendMessage(Message.translation("server.commands.spectate.freed"));
         }
      }
   }

   class="kw">private class="kw">static class SpectateSetCommand class="kw">extends CommandBase {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_IN_WORLD = Message.translation("server.commands.errors.playerNotInWorld");
      @Nonnull
      class="kw">private class="kw">final RequiredArg<PlayerRef> playerArg = this.withRequiredArg("player", "server.commands.argtype.player.desc", ArgTypes.PLAYER_REF);
      @Nonnull
      class="kw">private class="kw">final OptionalArg<SpectateCommand.SpectateState> stateArg = this.withOptionalArg(
         "state", "server.commands.spectate.set.state.desc", ArgTypes.forEnum("server.commands.parsing.argtype.enum.name", SpectateCommand.SpectateState.class)
      );
      @Nonnull
      class="kw">private class="kw">final OptionalArg<String> typeArg = this.withOptionalArg("type", "server.commands.spectate.set.type.desc", ArgTypes.STRING);

      SpectateSetCommand() {
         super("set", "server.commands.spectate.set.desc");
         this.requirePermission(HytalePermissions.fromCommand("spectate.other"));
         this.setPermissionGroups("hytale:WorldEditor");
      }

      @Override
      class="kw">protected void executeSync(@Nonnull CommandContext var1) {
         PlayerRef var2 = this.playerArg.get(var1);
         Ref var3 = var2.getReference();
         if (var3 != null && var3.isValid()) {
            Store var4 = var3.getStore();
            World var5 = var4.getExternalData().getWorld();
            var5.execute(
               () -> {
                  Player var5 = var4.getComponent(var3, Player.getComponentType());
                  if (var5 == null) {
                     var1.sendMessage(MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_IN_WORLD);
                  } else {
                     boolean var6 = this.stateArg.provided(var1)
                        ? this.stateArg.get(var1) == SpectateCommand.SpectateState.ON
                        : !Spectating.isSpectating(var3, var4);
                     if (var6) {
                        String var7 = this.typeArg.provided(var1) ? this.typeArg.get(var1) : "Spectator";
                        GameModeType var8 = GameModeType.getAssetMap().getAsset(var7);
                        if (var8 == null || !var8.isSpectator()) {
                           var1.sendMessage(Message.translation("server.commands.spectate.set.invalidType").param("type", var7));
                           class="kw">return;
                        }

                        boolean var9 = var4.getArchetype(var3).contains(DeathComponent.getComponentType());
                        boolean var10 = GameModeTypes.getCurrentTypeId(var3, var4) == null
                           && (var9 ? GameModeTypes.enterOnDeath(var3, var4, var7) : GameModeTypes.enter(var3, var4, var7));
                        if (var10) {
                           var1.sendMessage(Message.translation("server.commands.spectate.set.on").param("username", var2.getUsername()));
                        } else {
                           var1.sendMessage(Message.translation("server.commands.spectate.set.failed").param("username", var2.getUsername()));
                        }
                     } else if (Spectating.isSpectating(var3, var4) && GameModeTypes.exit(var3, var4)) {
                        var1.sendMessage(Message.translation("server.commands.spectate.set.off").param("username", var2.getUsername()));
                     } else {
                        var1.sendMessage(Message.translation("server.commands.spectate.set.failed").param("username", var2.getUsername()));
                     }
                  }
               }
            );
         } else {
            var1.sendMessage(MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_IN_WORLD);
         }
      }
   }

   class="kw">private enum SpectateState {
      ON,
      OFF;

      SpectateState() {
      }
   }

   class="kw">private class="kw">static class SpectateTargetCommand class="kw">extends AbstractPlayerCommand {
      class="kw">private class="kw">static class="kw">final float TARGET_SEARCH_RADIUS = 32.0F;

      SpectateTargetCommand() {
         super("target", "server.commands.spectate.target.desc");
         this.requirePermission(HytalePermissions.fromCommand("spectate.watch"));
         this.setPermissionGroups("hytale:Builder");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         Ref var6 = TargetUtil.getTargetEntity(var3, 32.0F, true, var2);
         if (var6 == null) {
            var1.sendMessage(Message.translation("server.general.noEntityInView"));
         } else if (Spectating.isSpectating(var6, var2)) {
            var1.sendMessage(Message.translation("server.commands.spectate.cantWatchSpectator"));
         } else {
            SpectateCommand.enterAndWatch(
               var1,
               var2,
               var3,
               var6,
               Message.translation("server.commands.spectate.watchingTarget"),
               Message.translation("server.commands.spectate.cantWatchTarget")
            );
         }
      }
   }

   class="kw">private class="kw">static class SpectateWatchCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">final RequiredArg<PlayerRef> playerArg = this.withRequiredArg("player", "server.commands.argtype.player.desc", ArgTypes.PLAYER_REF);

      SpectateWatchCommand() {
         super("server.commands.spectate.watch.desc");
         this.requirePermission(HytalePermissions.fromCommand("spectate.watch"));
         this.setPermissionGroups("hytale:Builder");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         PlayerRef var6 = this.playerArg.get(var1);
         Ref var7 = var6.getReference();
         if (var7 == null || !var7.isValid() || var7.getStore() != var2) {
            var1.sendMessage(Message.translation("server.commands.errors.playerNotInWorld"));
         } else if (var7.equals(var3)) {
            var1.sendMessage(Message.translation("server.commands.spectate.cantWatchSelf"));
         } else if (Spectating.isSpectating(var7, var2)) {
            var1.sendMessage(Message.translation("server.commands.spectate.cantWatchSpectator"));
         } else {
            SpectateCommand.enterAndWatch(
               var1,
               var2,
               var3,
               var7,
               Message.translation("server.commands.spectate.watching").param("username", var6.getUsername()),
               Message.translation("server.commands.spectate.cantWatch").param("username", var6.getUsername())
            );
         }
      }
   }
}