Package cofh.core.command

Source Code of cofh.core.command.CommandTPX

package cofh.core.command;

import cofh.core.util.CoreUtils;
import cofh.lib.util.helpers.EntityHelper;
import cofh.lib.util.helpers.StringHelper;

import java.util.List;

import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ChatComponentText;
import net.minecraftforge.common.DimensionManager;

public class CommandTPX implements ISubCommand {

  public static CommandTPX instance = new CommandTPX();

  @Override
  public String getCommandName() {

    return "tpx";
  }

  @Override
  public void handleCommand(ICommandSender sender, String[] arguments) {

    // TODO: allow selector commands to target anything (single player, all players[@a], specific entities [@e], etc.)
    // where it makes sense to allow it (e.g., not allowing teleporting a single thing to many things)

    if (!CoreUtils.isOpOrServer(sender.getCommandSenderName())) {
      sender.addChatMessage(new ChatComponentText(CommandHandler.COMMAND_DISALLOWED));
      return;
    }
    switch (arguments.length) {

    case 0: // () ???? how did we get here again?
    case 1: // (tpx) invalid command
      sender.addChatMessage(new ChatComponentText("Invalid Syntax. /cofh tpx " + StringHelper.PINK + "[username] " + StringHelper.YELLOW
          + "[<x> <y> <z>] <dimension id>"));
      break;
    case 2: // (tpx {<player>|<dimension>}) teleporting player to self, or self to dimension
      EntityPlayerMP playerSender = CommandBase.getCommandSenderAsPlayer(sender);
      try {
        EntityPlayerMP player = CommandBase.getPlayer(sender, arguments[1]);
        if (!player.equals(playerSender)) {
          player.mountEntity((Entity) null);
          if (playerSender.dimension == player.dimension) {
            player.setPositionAndUpdate(playerSender.posX, playerSender.posY, playerSender.posZ);
          } else {
            EntityHelper.transferPlayerToDimension(player, playerSender.dimension, playerSender.mcServer.getConfigurationManager());
            player.setPositionAndUpdate(playerSender.posX, playerSender.posY, playerSender.posZ);
          }
        } else {
          sender.addChatMessage(new ChatComponentText("Sucessfully teleported you to yourself!"));
        }
        break;
      } catch (Throwable t) {
        int dimension;
        try {
          dimension = Integer.parseInt(arguments[1]);
        } catch (Throwable p) { // not a number, assume they wanted a player
          if (t instanceof RuntimeException) {
            throw (RuntimeException) t; // player error is
          }
          throw new RuntimeException(t);
        }
        if (!DimensionManager.isDimensionRegistered(dimension)) {
          sender.addChatMessage(new ChatComponentText(StringHelper.RED + "That dimension does not exist."));
          break;
        }
        playerSender.mountEntity((Entity) null);
        if (playerSender.dimension != dimension) {
          EntityHelper.transferPlayerToDimension(playerSender, dimension, playerSender.mcServer.getConfigurationManager());
        }
        playerSender.setPositionAndUpdate(playerSender.posX, playerSender.posY, playerSender.posZ);
      }
      break;
    case 3: // (tpx <player> {<player>|<dimension>}) teleporting player to player or player to dimension
      EntityPlayerMP player = CommandBase.getPlayer(sender, arguments[1]);
      try {
        EntityPlayerMP otherPlayer = CommandBase.getPlayer(sender, arguments[2]);
        if (!player.equals(otherPlayer)) {
          player.mountEntity((Entity) null);
          if (otherPlayer.dimension == player.dimension) {
            player.setPositionAndUpdate(otherPlayer.posX, otherPlayer.posY, otherPlayer.posZ);
          } else {
            EntityHelper.transferPlayerToDimension(player, otherPlayer.dimension, otherPlayer.mcServer.getConfigurationManager());
            player.setPositionAndUpdate(otherPlayer.posX, otherPlayer.posY, otherPlayer.posZ);
          }
        } else {
          sender.addChatMessage(new ChatComponentText("Sucessfully teleported " + arguments[1] + " to themself!"));
        }
        break;
      } catch (Throwable t) {
        int dimension;
        try {
          dimension = Integer.parseInt(arguments[2]);
        } catch (Throwable p) { // not a number, assume they wanted a player
          if (t instanceof RuntimeException) {
            throw (RuntimeException) t; // player error is
          }
          throw new RuntimeException(t);
        }
        if (!DimensionManager.isDimensionRegistered(dimension)) {
          sender.addChatMessage(new ChatComponentText(StringHelper.RED + "That dimension does not exist"));
          break;
        }
        player.mountEntity((Entity) null);
        if (player.dimension != dimension) {
          EntityHelper.transferPlayerToDimension(player, dimension, player.mcServer.getConfigurationManager());
        }
        player.setPositionAndUpdate(player.posX, player.posY, player.posZ);
      }
      break;
    case 4: // (tpx <x> <y> <z>) teleporting self within dimension
      playerSender = CommandBase.getCommandSenderAsPlayer(sender);
      playerSender.setPositionAndUpdate(CommandBase.func_110666_a(playerSender, playerSender.posX, arguments[1]),
          CommandBase.func_110666_a(playerSender, playerSender.posY, arguments[2]),
          CommandBase.func_110666_a(playerSender, playerSender.posZ, arguments[3]));
      break;
    case 5: // (tpx <player> <x> <y> <z>) teleporting player within player's dimension
      player = CommandBase.getPlayer(sender, arguments[1]);
      player.mountEntity((Entity) null);
      player.setPositionAndUpdate(CommandBase.func_110666_a(player, player.posX, arguments[2]),
          CommandBase.func_110666_a(player, player.posY, arguments[3]), CommandBase.func_110666_a(player, player.posZ, arguments[4]));
      break;
    case 6: // (tpx <player> <x> <y> <z> <dimension>) teleporting player to dimension and location
    default: // ignore excess tokens. warn?
      player = CommandBase.getPlayer(sender, arguments[1]);
      int dimension = CommandBase.parseInt(sender, arguments[5]);

      if (!DimensionManager.isDimensionRegistered(dimension)) {
        sender.addChatMessage(new ChatComponentText(StringHelper.RED + "That dimension does not exist"));
        break;
      }
      player.mountEntity((Entity) null);
      if (player.dimension != dimension) {
        EntityHelper.transferPlayerToDimension(player, dimension, player.mcServer.getConfigurationManager());
      }
      player.setPositionAndUpdate(CommandBase.func_110666_a(player, player.posX, arguments[2]),
          CommandBase.func_110666_a(player, player.posY, arguments[3]), CommandBase.func_110666_a(player, player.posZ, arguments[4]));
      break;
    }
  }

  @SuppressWarnings("unchecked")
  @Override
  public List<String> addTabCompletionOptions(ICommandSender sender, String[] args) {

    if (args.length == 2 || args.length == 3) {
      return CommandBase.getListOfStringsMatchingLastWord(args, MinecraftServer.getServer().getAllUsernames());
    } else if (args.length >= 6) {
      Integer[] ids = DimensionManager.getIDs();
      String[] strings = new String[ids.length];

      for (int i = 0; i < ids.length; i++) {
        strings[i] = ids[i].toString();
      }
      return CommandBase.getListOfStringsMatchingLastWord(args, strings);
    }

    return null;

  }

}
TOP

Related Classes of cofh.core.command.CommandTPX

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.