SpectateCommand class

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

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

extends: AbstractPlayerCommand

Поля (23)

МодификаторыТипИмя
private static final Message MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_IN_WORLD
ON, OFF
private static final float TARGET_SEARCH_RADIUS
private final RequiredArg<PlayerRef> playerArg
private final RequiredArg<PlayerRef> playerArg
return
private final OptionalArg<SpectateCommand.SpectateState> stateArg
private final OptionalArg<String> typeArg
boolean var10
PlayerRef var2
Ref var3
Store var4
World var5
Player var5
PlayerRef var6
boolean var6
Ref var6
PlayerRef var6
PlayerRef var7
String var7
Ref var7
GameModeType var8
boolean var9

Методы (22)

МодификаторыВозвратСигнатура
SpectateExitCommand SpectateExitCommand()
SpectateFreeCommand SpectateFreeCommand()
SpectateSetCommand SpectateSetCommand()
SpectateState SpectateState()
SpectateTargetCommand SpectateTargetCommand()
SpectateWatchCommand SpectateWatchCommand()
static void enterAndWatchvoid enterAndWatch(@Nonnull CommandContext var0, @Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull Message var4, @Nonnull Message var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeSyncprotected void executeSync(@Nonnull CommandContext var1)
if if(var5 == null)
if if(var6)
if if(var10)
if if(var6 == null)
abstract super super("spectate", "server.commands.spectate.desc")
abstract super super("exit", "server.commands.spectate.exit.desc")
abstract super super("free", "server.commands.spectate.free.desc")
abstract super super("set", "server.commands.spectate.set.desc")
abstract super super("target", "server.commands.spectate.target.desc")
abstract super super("server.commands.spectate.watch.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())
            );
         }
      }
   }
}