Package com.forgeessentials.worldborder

Source Code of com.forgeessentials.worldborder.CommandWB

package com.forgeessentials.worldborder;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.permissions.PermissionsManager.RegisteredPermValue;

import com.forgeessentials.api.APIRegistry;
import com.forgeessentials.api.permissions.Zone;
import com.forgeessentials.core.commands.ForgeEssentialsCommandBase;
import com.forgeessentials.util.FunctionHelper;
import com.forgeessentials.util.OutputHandler;
import com.forgeessentials.util.selections.Point;

import cpw.mods.fml.common.FMLCommonHandler;

/**
* Used to check or set the border. Filler will get a sperate command later
*
* @author Dries007
*/

public class CommandWB extends ForgeEssentialsCommandBase {
  @Override
  public String getCommandName()
  {
    return "worldborder";
  }

  @Override
  public List<String> getCommandAliases()
  {
    return Arrays.asList(new String[] { "wb" });
  }

  @Override
  public void processCommand(ICommandSender sender, String[] args)
  {
    if (FMLCommonHandler.instance().getEffectiveSide().isClient())
    {
      return;
    }

    execute(sender, args);
  }

  public void execute(ICommandSender sender, String[] args)
  {
    /*
     * We need the zone...
     */
    Zone zone;
    if (args.length == 0)
    {
      OutputHandler.chatError(sender, "You must specify a zone you want to work in. '/wb global' or '/wb <id>'");
      if (sender instanceof EntityPlayer)
      {
        OutputHandler.chatError(sender, "As a player, '/wb world' works too");
      }
      return;
    }
    else if (args[0].equalsIgnoreCase("global"))
    {
      zone = APIRegistry.perms.getServerZone();
    }
    else if (FunctionHelper.isNumeric(args[0]))
    {
      World world = DimensionManager.getWorld(parseInt(sender, args[0]));
      if (world == null)
      {
        OutputHandler.chatError(sender, args[0] + " is not an ID of a loaded world.");
        return;
      }
      zone = APIRegistry.perms.getWorldZone(world);
    }
    else if (args[0].equalsIgnoreCase("world") && sender instanceof EntityPlayer)
    {
      zone = APIRegistry.perms.getWorldZone(((EntityPlayer) sender).worldObj);
    }
    else
    {
      OutputHandler.chatError(sender, "You must specify a zone you want to work in. '/wb global' or '/wb <id>'");
      return;
    }

    /*
     * Now we have the zone...
     */
    WorldBorder border = ModuleWorldBorder.borderMap.get(zone.getName());

    /*
     * Want info?
     */
    if (args.length == 1 || args[1].equalsIgnoreCase("info"))
    {
      // Header
      String header = "--- WorldBorder for " + zone.getName() + " ---";
      OutputHandler.chatNotification(sender, header);
      // Actual info
      OutputHandler.chatNotification(sender, "Enabled: " + (border.enabled ? EnumChatFormatting.GREEN : EnumChatFormatting.RED) + border.enabled);
      OutputHandler.chatNotification(sender, "Center: " + border.center.toString());
      OutputHandler.chatNotification(sender, "Radius: " + border.rad);
      OutputHandler.chatNotification(sender, "Shape: " + border.getShape());
      // Footer
      StringBuilder footer = new StringBuilder();
      for (int i = 0; i < header.length(); i++)
      {
        footer.append("-");
      }
      OutputHandler.chatNotification(sender, footer.toString());
    }
    /*
     * No. Want to en|disable?
     */
    else if (args[1].equalsIgnoreCase("enable"))
    {
      if (border.shapeByte != 0 && border.rad != 0)
      {
        border.enabled = true;
        OutputHandler.chatConfirmation(sender, "Border has been enabled.");
      }
      else
      {
        OutputHandler.chatError(sender, "You have to set a center, radius and shape first!");
      }
    }
    else if (args[1].equalsIgnoreCase("disable"))
    {
      if (border.shapeByte != 0 && border.rad != 0)
      {
        border.enabled = false;
        OutputHandler.chatConfirmation(sender, "Border has been disabled.");
      }
      else
      {
        OutputHandler.chatError(sender, "You have to set a center, radius and shape first!");
      }
    }
    /*
     * No. Center maybe?
     */
    else if (args[1].equalsIgnoreCase("center"))
    {
      if (args.length == 2)
      {
        OutputHandler.chatError(sender, "You have to specify coordinates (x z)" + (sender instanceof EntityPlayer ? " or 'here'." : "."));
      }
      else if (sender instanceof EntityPlayer && args[2].equalsIgnoreCase("here"))
      {
        border.center = new Point((EntityPlayer) sender);
        OutputHandler.chatConfirmation(sender, "Center set to " + border.center);
      }
      else
      {
        if (args.length == 4)
        {
          int x = parseInt(sender, args[2]);
          int z = parseInt(sender, args[3]);
          border.center = new Point(x, 64, z);
          OutputHandler.chatConfirmation(sender, "Center set to " + border.center);
        }
        else
        {
          OutputHandler.chatError(sender, "Expected '/wb " + args[0] + " center <x> <z>'");
        }
      }
    }
    /*
     * No. How about radius?
     */
    else if (args[1].equalsIgnoreCase("rad") || args[1].equalsIgnoreCase("radius"))
    {
      if (args.length == 2)
      {
        OutputHandler.chatError(sender, "You have to specify a radius...");
      }
      else
      {
        border.rad = parseIntWithMin(sender, args[2], 0);
        OutputHandler.chatConfirmation(sender, "You have set the radius to " + border.rad);
      }
    }
    /*
     * Last option... Shape?
     */
    else if (args[1].equalsIgnoreCase("shape"))
    {
      if (args.length == 2)
      {
        OutputHandler.chatError(sender, "You have to set the boder to 'round' or 'square'.");
      }
      else if (args[2].equalsIgnoreCase("square"))
      {
        border.shapeByte = 1;
        OutputHandler.chatConfirmation(sender, "You have set the border to " + border.getShape());
      }
      else if (args[2].equalsIgnoreCase("round"))
      {
        border.shapeByte = 2;
        OutputHandler.chatConfirmation(sender, "You have set the border to " + border.getShape());
      }
    }
    /*
     * dafuq?
     */
    else
    {
      OutputHandler.chatError(sender, "dafuq? I have no clue what you are trying to do. Use TAB for cmd filling!");
      OutputHandler.chatError(sender, "/wb <zone> [info|enable|disable|center|radius|shape]");
    }

    ModuleWorldBorder.saveAll();
  }

  @Override
  public boolean canConsoleUseCommand()
  {
    return true;
  }

  @Override
  public String getPermissionNode()
  {
    return "fe.worldborder.admin";
  }

  @SuppressWarnings("unchecked")
    @Override
  public List<String> addTabCompletionOptions(ICommandSender sender, String[] args)
  {
    // Zone selection
    if (args.length == 1)
    {
      ArrayList<String> list = new ArrayList<String>();
      list.add("global");
      if (sender instanceof EntityPlayer)
      {
        list.add("world");
      }
      for (int i : DimensionManager.getIDs())
      {
        list.add("" + i);
      }
      return getListOfStringsFromIterableMatchingLastWord(args, list);
    }
    // Options
    if (args.length == 2)
    {
      return getListOfStringsMatchingLastWord(args, "info", "enable", "disable", "center", "radius", "shape");
    }
    // If shape...
    if (args.length == 3 && args[2].equalsIgnoreCase("shape"))
    {
      return getListOfStringsMatchingLastWord(args, "square", "round");
    }
    return null;
  }

  @Override
  public String getCommandUsage(ICommandSender sender)
  {

    return "/worldborder <global|world|dimID> [info|enable|disable|center|radius|shape] Configure FE WorldBorder.";
  }

  @Override
  public RegisteredPermValue getDefaultPermission()
  {

    return RegisteredPermValue.OP;
  }

}
TOP

Related Classes of com.forgeessentials.worldborder.CommandWB

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.