package zmaster587.advancedRocketry.command;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import zmaster587.advancedRocketry.api.AdvancedRocketryAPI;
import zmaster587.advancedRocketry.api.AdvancedRocketryItems;
import zmaster587.advancedRocketry.api.Configuration;
import zmaster587.advancedRocketry.api.DataStorage.DataType;
import zmaster587.advancedRocketry.api.dimension.IDimensionProperties;
import zmaster587.advancedRocketry.api.dimension.solar.StellarBody;
import zmaster587.advancedRocketry.api.stations.ISpaceObject;
import zmaster587.advancedRocketry.dimension.DimensionManager;
import zmaster587.advancedRocketry.dimension.DimensionProperties;
import zmaster587.advancedRocketry.item.ItemMultiData;
import zmaster587.advancedRocketry.item.ItemStationChip;
import zmaster587.advancedRocketry.network.PacketDimInfo;
import zmaster587.advancedRocketry.network.PacketStellarInfo;
import zmaster587.advancedRocketry.stations.SpaceObjectManager;
import zmaster587.advancedRocketry.world.util.TeleporterNoPortal;
import zmaster587.libVulpes.network.PacketHandler;
import zmaster587.libVulpes.util.BlockPosition;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;
public class WorldCommand implements ICommand {
private List aliases;
public WorldCommand() {
aliases = new ArrayList<String>();
aliases.add("advancedRocketry");
aliases.add("advRocketry");
}
@Override
public int compareTo(Object arg) {
if(arg instanceof ICommand)
return this.getCommandName().compareTo(((ICommand) arg).getCommandName());
return 0;
}
@Override
public String getCommandName() {
return "advancedRocketry";
}
@Override
public String getCommandUsage(ICommandSender sender) {
return "advancedRocketry help";
}
@Override
public List getCommandAliases() {
return aliases;
}
@Override
public void processCommand(ICommandSender sender, String[] string) {
//advRocketry planet set <var value>
int opLevel = 2;
if(!(sender instanceof EntityPlayer))
{
if(sender != null)
sender.addChatMessage(new ChatComponentText("Commands can only be executed by a player"));
return;
}
if(string.length >= 1 && string[0].equalsIgnoreCase("givestation")) {
if(string.length >= 2) {
int stationId = Integer.parseInt(string[1]);
ItemStack stack = new ItemStack(AdvancedRocketryItems.itemSpaceStationChip);
((ItemStationChip)AdvancedRocketryItems.itemSpaceStationChip).setUUID(stack, stationId);
((EntityPlayer)sender).inventory.addItemStackToInventory(stack);
}
else
sender.addChatMessage(new ChatComponentText("Usage: /advRocketry " + string[0] + " <stationId>"));
}
if(string.length >= 1 && string[0].equalsIgnoreCase("filldata")) {
ItemStack stack;
if(sender instanceof EntityPlayer ) {
stack = ((EntityPlayer)sender).getHeldItem();
if(string.length >= 2 && string[1].equalsIgnoreCase("help")) {
sender.addChatMessage(new ChatComponentText("Usage: /advRocketry" + string[0] + " [datatype] [amountFill]\n"));
sender.addChatMessage(new ChatComponentText("Fills the amount of the data type specifies into the chip being held."));
sender.addChatMessage(new ChatComponentText("If the datatype is not specified then command fills all datatypes, if no amountFill is specified completely fills the chip"));
return;
}
if(stack != null && stack.getItem() instanceof ItemMultiData) {
ItemMultiData item = (ItemMultiData) stack.getItem();
int dataAmount = item.getMaxData(stack);
DataType dataType = null;
if(string.length >= 2) {
try {
dataType = DataType.valueOf(string[1].toUpperCase(Locale.ENGLISH));
} catch (IllegalArgumentException e) {
sender.addChatMessage(new ChatComponentText("Did you mean: /advRocketry" + string[0] + " [datatype] [amountFill]"));
sender.addChatMessage(new ChatComponentText("Not a valid datatype"));
String value = "";
for(DataType data : DataType.values())
if(!data.name().equals("UNDEFINED"))
value += data.name().toLowerCase() + ", ";
sender.addChatMessage(new ChatComponentText("Try " + value));
return;
}
}
if(string.length >= 3)
try {
dataAmount = Integer.parseInt(string[2]);
} catch(NumberFormatException e) {
sender.addChatMessage(new ChatComponentText("Did you mean: /advRocketry" + string[0] + " [datatype] [amountFill]"));
sender.addChatMessage(new ChatComponentText("Not a valid number"));
return;
}
if(dataType != null)
item.setData(stack, dataAmount, dataType);
else
{
for(DataType type : DataType.values())
item.setData(stack, dataAmount, type);
}
sender.addChatMessage(new ChatComponentText("Data filled!"));
}
else
sender.addChatMessage(new ChatComponentText("Not Holding data item"));
}
else
sender.addChatMessage(new ChatComponentText("Ghosts don't have items!"));
return;
}
if(string.length >= 1 && string[0].equalsIgnoreCase("setGravity")) {
if(string.length >= 2) {
if(sender instanceof Entity) {
Entity player;
if(string.length > 2)
player = sender.getEntityWorld().getPlayerEntityByName(string[2]);
else
player = (Entity) sender;
if(player != null) {
try {
double d = Double.parseDouble(string[1]);
if(d == 0)
AdvancedRocketryAPI.gravityManager.clearGravityEffect(player);
else
AdvancedRocketryAPI.gravityManager.setGravityMultiplier((Entity) sender, d);
} catch(NumberFormatException e) {
sender.addChatMessage(new ChatComponentText(string[1] + " is not a valid number"));
}
} else {
sender.addChatMessage(new ChatComponentText("Not a valid player"));
}
}
}
else {
sender.addChatMessage(new ChatComponentText("Help: "));
sender.addChatMessage(new ChatComponentText("/advRocketry " + string[0] + " gravity_multiplier [playerName]"));
sender.addChatMessage(new ChatComponentText(""));
sender.addChatMessage(new ChatComponentText("use 0 as the gravity_multiplier to allow regular planet gravity to take over"));
}
return;
}
if(string.length > 1) {
if(string[0].equalsIgnoreCase("goto") && (string.length == 2 || string.length == 3)) {
EntityPlayer player = sender.getEntityWorld().getPlayerEntityByName(sender.getCommandSenderName());
if(player != null) {
try {
int dim;
if(string.length == 2) {
dim = Integer.parseInt(string[1]);
if(net.minecraftforge.common.DimensionManager.isDimensionRegistered(dim))
MinecraftServer.getServer().getConfigurationManager().transferPlayerToDimension((EntityPlayerMP) player, dim , new TeleporterNoPortal(MinecraftServer.getServer().worldServerForDimension(dim)));
else
sender.addChatMessage(new ChatComponentText("Dimension does not exist"));
}
else if(string[1].equalsIgnoreCase("station")) {
dim = Configuration.spaceDimId;
int stationId = Integer.parseInt(string[2]);
ISpaceObject object = SpaceObjectManager.getSpaceManager().getSpaceStation(stationId);
if(object != null) {
if(player.worldObj.provider.dimensionId != Configuration.spaceDimId)
MinecraftServer.getServer().getConfigurationManager().transferPlayerToDimension((EntityPlayerMP) player, dim , new TeleporterNoPortal(MinecraftServer.getServer().worldServerForDimension(dim)));
BlockPosition vec = object.getSpawnLocation();
player.setPositionAndUpdate(vec.x, vec.y, vec.z);
}
else {
sender.addChatMessage(new ChatComponentText("Station " + stationId + " does not exist!"));
}
}
} catch(NumberFormatException e) {
sender.addChatMessage(new ChatComponentText(string[0] + " <dimId>"));
sender.addChatMessage(new ChatComponentText(string[0] + "station <station ID>"));
}
}
else
sender.addChatMessage(new ChatComponentText("Must be a player to use this command"));
}
else if(string[0].equalsIgnoreCase("fetch") && string.length == 2) {
EntityPlayer me = sender.getEntityWorld().getPlayerEntityByName(sender.getCommandSenderName());
EntityPlayer player = null;
for(World world : MinecraftServer.getServer().worldServers) {
player = world.getPlayerEntityByName(string[1]);
if(player != null)
break;
}
System.out.println(string[1] + " " + sender.getCommandSenderName());
if(player == null) {
sender.addChatMessage(new ChatComponentText("Invalid player name: " + string[1]));
}
else {
MinecraftServer.getServer().getConfigurationManager().transferPlayerToDimension((EntityPlayerMP) player, me.worldObj.provider.dimensionId , new TeleporterNoPortal(MinecraftServer.getServer().worldServerForDimension(me.worldObj.provider.dimensionId)));
player.setPosition(me.posX, me.posY, me.posZ);
}
}
else if(string[0].equalsIgnoreCase("planet")) {
int dimId;
if(string[1].equalsIgnoreCase("reset")) {
if(string.length == 3) {
try {
dimId = Integer.parseInt(string[2]);
DimensionManager.getInstance().getDimensionProperties(dimId).resetProperties();
PacketHandler.sendToAll(new PacketDimInfo(dimId, DimensionManager.getInstance().getDimensionProperties(dimId)));
} catch (NumberFormatException e) {
sender.addChatMessage(new ChatComponentText("Invalid dimId"));
}
}
else if(string.length == 2) {
if(DimensionManager.getInstance().isDimensionCreated((dimId = sender.getEntityWorld().provider.dimensionId))) {
DimensionManager.getInstance().getDimensionProperties(dimId).resetProperties();
PacketHandler.sendToAll(new PacketDimInfo(dimId, DimensionManager.getInstance().getDimensionProperties(dimId)));
}
}
}
else if(string[1].equalsIgnoreCase("list")) { //Lists dimensions
sender.addChatMessage(new ChatComponentText("Dimensions:"));
for(int i : DimensionManager.getInstance().getRegisteredDimensions()) {
sender.addChatMessage(new ChatComponentText("DIM" + i + ": " + DimensionManager.getInstance().getDimensionProperties(i).getName()));
}
}
else if(string[1].equalsIgnoreCase("delete")) {
// advRocketry planet delete <name>
if(string.length == 3) {
int deletedDimId;
try {
deletedDimId = Integer.parseInt(string[2]);
if(DimensionManager.getInstance().isDimensionCreated(deletedDimId)) {
if(net.minecraftforge.common.DimensionManager.getWorld(deletedDimId) == null || net.minecraftforge.common.DimensionManager.getWorld(deletedDimId).playerEntities.isEmpty()) {
DimensionManager.getInstance().deleteDimension(deletedDimId);
PacketHandler.sendToAll(new PacketDimInfo(deletedDimId, null));
sender.addChatMessage(new ChatComponentText("Deleted!"));
}
else {
//If the world still has players abort and list players
sender.addChatMessage(new ChatComponentText("World still has players:"));
for(EntityPlayer player : (List<EntityPlayer>)net.minecraftforge.common.DimensionManager.getWorld(deletedDimId).playerEntities) {
sender.addChatMessage(new ChatComponentText(player.getDisplayName()));
}
}
} else {
sender.addChatMessage(new ChatComponentText("Dimension does not exist"));
}
} catch(NumberFormatException exception) {
sender.addChatMessage(new ChatComponentText("Invalid Argument"));
}
}
else {
sender.addChatMessage(new ChatComponentText(string[0] + " " + string[1] + " " + string[2] + " <dimid>"));
}
}
/*
* Attempt to generate a planet
*/
else if(string[1].equalsIgnoreCase("generate")) {
int gasOffset = 0;
boolean gassy = false;
boolean moon = false;
int starId = 0;
if(string.length > 2 ) {
try {
starId = Integer.parseInt(string[2]);
gasOffset++;
} catch(NumberFormatException e) {
}
}
if(string.length > 2 + gasOffset) {
if(string[2 + gasOffset].equalsIgnoreCase("moon")) {
gasOffset++;
moon = true;
if(!DimensionManager.getInstance().isDimensionCreated(starId)) {
sender.addChatMessage(new ChatComponentText("Invalid planet ID"));
sender.addChatMessage(new ChatComponentText(string[0] + " " + string[1] + "[planetId] [moon] [gas] <name> <atmosphereRandomness> <distanceRandomness> <gravityRandomness>"));
return;
}
}
else if(DimensionManager.getInstance().getStar(starId) == null) {
sender.addChatMessage(new ChatComponentText("Invalid star ID"));
sender.addChatMessage(new ChatComponentText(string[0] + " " + string[1] + "[starId] [gas] <name> <atmosphereRandomness> <distanceRandomness> <gravityRandomness>"));
return;
}
}
if(string.length > 2 + gasOffset && string[2 + gasOffset].equalsIgnoreCase("gas")) {
gasOffset++;
gassy = true;
}
try {
//Advancedrocketry planet generate <name> <atmosphereRandomness> <distanceRandomness> <gravityRandomness>
if(string.length == 6 + gasOffset) {
int planetId = starId;
if(moon)
starId = DimensionManager.getInstance().getDimensionProperties(planetId).getStarId();
DimensionProperties properties;
if(!gassy)
properties = DimensionManager.getInstance().generateRandom(starId, string[2 + gasOffset], Integer.parseInt(string[3 + gasOffset]), Integer.parseInt(string[4 + gasOffset]), Integer.parseInt(string[5 + gasOffset]));
else
properties = DimensionManager.getInstance().generateRandomGasGiant(starId, string[2 + gasOffset], Integer.parseInt(string[3 + gasOffset]), Integer.parseInt(string[4 + gasOffset]), Integer.parseInt(string[5 + gasOffset]),1,1,1);
if(properties == null)
sender.addChatMessage(new ChatComponentText("Dimension: " + string[2 + gasOffset] + " failed to generate!"));
else
sender.addChatMessage(new ChatComponentText("Dimension: " + string[2 + gasOffset] + " Generated!"));
if(moon) {
properties.setParentPlanet(DimensionManager.getInstance().getDimensionProperties(planetId));
DimensionManager.getInstance().getStar(starId).removePlanet(properties);
}
sender.addChatMessage(new ChatComponentText("Dimension Generated!"));
}
else if(string.length == 9 + gasOffset) {
int planetId = starId;
if(moon)
starId = DimensionManager.getInstance().getDimensionProperties(planetId).getStarId();
DimensionProperties properties;
if(!gassy)
properties = DimensionManager.getInstance().generateRandom(starId,string[2 + gasOffset] ,Integer.parseInt(string[3 + gasOffset]), Integer.parseInt(string[4 + gasOffset]), Integer.parseInt(string[5 + gasOffset]),Integer.parseInt(string[6 + gasOffset]), Integer.parseInt(string[7 + gasOffset]), Integer.parseInt(string[8 + gasOffset]));
else
properties = DimensionManager.getInstance().generateRandomGasGiant(starId, string[2 + gasOffset] ,Integer.parseInt(string[3 + gasOffset]), Integer.parseInt(string[4 + gasOffset]), Integer.parseInt(string[5 + gasOffset]),Integer.parseInt(string[6 + gasOffset]), Integer.parseInt(string[7 + gasOffset]), Integer.parseInt(string[8 + gasOffset]));
if(properties == null)
sender.addChatMessage(new ChatComponentText("Dimension: " + string[2 + gasOffset] + " failed to generate!"));
else
sender.addChatMessage(new ChatComponentText("Dimension: " + string[2 + gasOffset] + " Generated!"));
if(moon) {
properties.setParentPlanet(DimensionManager.getInstance().getDimensionProperties(planetId));
DimensionManager.getInstance().getStar(starId).removePlanet(properties);
}
}
else {
sender.addChatMessage(new ChatComponentText(string[0] + " " + string[1] + " [starId] [moon] [gas] <name> <atmosphereRandomness> <distanceRandomness> <gravityRandomness>"));
sender.addChatMessage(new ChatComponentText(""));
sender.addChatMessage(new ChatComponentText(string[0] + " " + string[1] + " [starId] [moon] [gas] <name> <atmosphere base value> <distance base value> <gravity base value> <atmosphereRandomness> <distanceRandomness> <gravityRandomness>"));
}
} catch(NumberFormatException e) {
sender.addChatMessage(new ChatComponentText(string[0] + " " + string[1] + " [starId] [moon] [gas] <name> <atmosphereRandomness> <distanceRandomness> <gravityRandomness>"));
sender.addChatMessage(new ChatComponentText(""));
sender.addChatMessage(new ChatComponentText(string[0] + " " + string[1] + " [starId] [moon] [gas] <name> <atmosphere base value> <distance base value> <gravity base value> <atmosphereRandomness> <distanceRandomness> <gravityRandomness>"));
}
}
//Make sure player is in Dimension we have control over
else if( DimensionManager.getInstance().isDimensionCreated((dimId = sender.getEntityWorld().provider.dimensionId)) ) {
if(string[1].equalsIgnoreCase("set") && string.length > 2) {
DimensionProperties properties = DimensionManager.getInstance().getDimensionProperties(dimId);
try {
if(string[2].equalsIgnoreCase("atmosphereDensity")) {
properties.setAtmosphereDensityDirect(Integer.parseUnsignedInt(string[3]));
PacketHandler.sendToAll(new PacketDimInfo(dimId, properties));
}
else {
Field field = properties.getClass().getDeclaredField(string[2]);
if(field.getType().isArray()) {
if(Float.TYPE == field.getType().getComponentType()) {
float var[] = (float[])field.get(properties);
if(string.length - 3 == var.length) {
//Make sure we catch if some invalid arg is entered
for(int i = 0; i < var.length; i++) {
var[i] = Float.parseFloat(string[3+i]);
}
field.set(properties, var);
}
}
if(Integer.TYPE == field.getType().getComponentType()) {
int var[] = (int[])field.get(properties);
if(string.length - 3 == var.length) {
//Make sure we catch if some invalid arg is entered
for(int i = 0; i < var.length; i++) {
var[i] = Integer.parseInt(string[3+i]);
}
field.set(properties, var);
}
}
}
else {
if(Integer.TYPE == field.getType() )
field.set(properties, Integer.parseInt(string[3]));
else if(Float.TYPE == field.getType())
field.set(properties, Float.parseFloat(string[3]));
else if(Double.TYPE == field.getType())
field.set(properties, Double.parseDouble(string[3]));
else
field.set(properties, string[3]);
}
PacketHandler.sendToAll(new PacketDimInfo(dimId, properties));
return;
}
} catch (NumberFormatException e) {
sender.addChatMessage(new ChatComponentText("Invalid Argument for parameter " + string[2]));
} catch (Exception e) {
e.printStackTrace();
}
}
else if(string[1].equalsIgnoreCase("get") && string.length == 3) {
DimensionProperties properties = DimensionManager.getInstance().getDimensionProperties(dimId);
if(string[2].equalsIgnoreCase("atmosphereDensity")) {
sender.addChatMessage(new ChatComponentText(Integer.toString(properties.getAtmosphereDensity())));
}
else {
try {
Field field = properties.getClass().getDeclaredField(string[2]);
sender.addChatMessage(new ChatComponentText(field.get(properties).toString()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
} //string[0] = planet
else if(string[0].equals("star")) {
if(string.length > 1) {
if(string[1].equalsIgnoreCase("list")) {
for(StellarBody star : DimensionManager.getInstance().getStars())
sender.addChatMessage(new ChatComponentText(String.format("Star ID: %d Name: %s Num Planets: %d", star.getId(), star.getName(), star.getNumPlanets())));
}
else if(string[1].equalsIgnoreCase("help")) {
printStarHelp(sender);
}
}
if(string.length > 3) {
if(string[1].equalsIgnoreCase("get")) {
try {
int id = Integer.parseInt(string[3]);
StellarBody star = DimensionManager.getInstance().getStar(id);
if(star == null)
sender.addChatMessage(new ChatComponentText("Error: " + string[3] + " is not a valid star ID"));
else {
if(string[2].equalsIgnoreCase("temp")) {
sender.addChatMessage(new ChatComponentText("Temp: " + star.getTemperature()));
}
else if(string[2].equalsIgnoreCase("planets")) {
sender.addChatMessage(new ChatComponentText("Planets orbiting the star:"));
for(IDimensionProperties planets : star.getPlanets()) {
sender.addChatMessage(new ChatComponentText("ID: " + planets.getId() + " : " + planets.getName()));
}
}
else if(string[2].equalsIgnoreCase("pos")) {
sender.addChatMessage(new ChatComponentText("Pos: " + star.getPosX() + "," + star.getPosZ()));
}
}// end star existance validation
} catch (NumberFormatException e) {
sender.addChatMessage(new ChatComponentText("Error: " + string[3] + " is not a valid star ID"));
}
} //get
} if(string.length > 4) {
if(string[1].equalsIgnoreCase("set")) {
try {
int id = Integer.parseInt(string[3]);
StellarBody star = DimensionManager.getInstance().getStar(id);
if(star == null)
sender.addChatMessage(new ChatComponentText("Error: " + string[3] + " is not a valid star ID"));
else {
if(string[2].equalsIgnoreCase("temp")) {
try {
star.setTemperature(Integer.parseInt(string[4]));
sender.addChatMessage(new ChatComponentText("Temp set to " + star.getTemperature()));
} catch(NumberFormatException e) {
sender.addChatMessage(new ChatComponentText("star set temp <starId> <temp>"));
}
} else if(string.length > 5 && string[2].equalsIgnoreCase("pos")) {
try {
int x= Integer.parseInt(string[4]);
int z = Integer.parseInt(string[5]);
star.setPosX(x);
star.setPosZ(z);
sender.addChatMessage(new ChatComponentText("Position set to " + x + "," + z));
} catch(NumberFormatException e) {
sender.addChatMessage(new ChatComponentText("star set pos <starId> <x> <y>"));
}
}
}// end star existance validation
} catch (NumberFormatException e) {
sender.addChatMessage(new ChatComponentText("Error: " + string[3] + " is not a valid star ID"));
}
}
}
if(string.length > 5) {
if(string[1].equalsIgnoreCase("generate")) {
try {
String name = string[2];
int temp = Integer.parseInt(string[3]);
int x = Integer.parseInt(string[4]);
int z = Integer.parseInt(string[5]);
StellarBody star = new StellarBody();
star.setTemperature(temp);
star.setPosX(x);
star.setPosZ(z);
star.setName(name);
star.setId(DimensionManager.getInstance().getNextFreeStarId());
if(star.getId() != -1) {
DimensionManager.getInstance().addStar(star);
PacketHandler.sendToAll(new PacketStellarInfo(star.getId(), star));
sender.addChatMessage(new ChatComponentText("star Added!"));
}
else
sender.addChatMessage(new ChatComponentText("Why can't I hold all these stars! (either you have an insane number of stars or something really broke!)"));
} catch(NumberFormatException e) {
sender.addChatMessage(new ChatComponentText("star generate <name> <temp> <x> <y>"));
}
}
}
} //string[0] = star
} // len > 2
}
private void printStarHelp(ICommandSender sender) {
sender.addChatMessage(new ChatComponentText("star list"));
sender.addChatMessage(new ChatComponentText("star get temp <star id>"));
sender.addChatMessage(new ChatComponentText("star get planets <star id>"));
sender.addChatMessage(new ChatComponentText("star get pos <star id>"));
sender.addChatMessage(new ChatComponentText("star set temp <star id> <temperature>"));
sender.addChatMessage(new ChatComponentText("star set pos <star id> <x> <y>"));
sender.addChatMessage(new ChatComponentText("star generate <name> <temp> <x> <y>"));
}
@Override
public boolean canCommandSenderUseCommand(ICommandSender sender) {
return !sender.getCommandSenderName().equalsIgnoreCase("RCon") && sender.canCommandSenderUseCommand(2, getCommandName());
}
@Override
public List addTabCompletionOptions(ICommandSender sender,
String[] string) {
ArrayList<String> list = new ArrayList<String>();
if(string.length == 1) {
list.add("planet");
list.add("goto");
list.add("fetch");
list.add("star");
list.add("givestation");
} else if(string.length == 2) {
ArrayList<String> list2 = new ArrayList<String>();
list2.add("get");
list2.add("set");
list2.add("list");
list2.add("generate");
if(string[0].equalsIgnoreCase("planet")) {
list2.add("reset");
list2.add("new");
list2.add("delete");
for(String str : list2) {
if(str.startsWith(string[1]))
list.add(str);
}
}
} else if(( string[1].equalsIgnoreCase("get") || string[1].equalsIgnoreCase("set")) && string[0].equalsIgnoreCase("planet") && string.length == 3) {
for(Field field : DimensionProperties.class.getFields()) {
if(field.getName().startsWith(string[2]))
list.add(field.getName());
}
list.add("atmosphereDensity");
}
return list;
}
@Override
public boolean isUsernameIndex(String[] string, int number) {
return number == 1 && string[0].equalsIgnoreCase("fetch");
}
}