/*
* This file is part of Matter Overdrive
* Copyright (c) 2015., Simeon Radivoev, All rights reserved.
*
* Matter Overdrive is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Matter Overdrive is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>.
*/
package matteroverdrive.commands;
import matteroverdrive.MatterOverdrive;
import matteroverdrive.api.quest.IQuest;
import matteroverdrive.api.quest.QuestStack;
import matteroverdrive.data.quest.PlayerQuestData;
import matteroverdrive.entity.player.MOExtendedProperties;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Random;
/**
* Created by Simeon on 11/19/2015.
*/
public class QuestCommands extends CommandBase
{
private Random random = new Random();
@Override
public String getCommandName() {
return "quest";
}
@Override
public int getRequiredPermissionLevel()
{
return 2;
}
@Override
public String getCommandUsage(ICommandSender commandSender)
{
return "quest <action> [parameters] <name> <player>";
}
@Override
public void processCommand(ICommandSender commandSender, String[] parameters)
{
if (parameters.length > 0)
{
if (parameters[0].equalsIgnoreCase("add"))
{
if (parameters.length > 1)
{
EntityPlayer entityPlayer;
if (parameters.length > 2)
{
entityPlayer = getPlayer(commandSender,parameters[2]);
}else
{
entityPlayer = commandSender.getEntityWorld().getPlayerEntityByName(commandSender.getCommandSenderName());
}
if (entityPlayer != null)
{
MOExtendedProperties extendedProperties = MOExtendedProperties.get(entityPlayer);
QuestStack questStack = MatterOverdrive.questFactory.generateQuestStack(parameters[1]);
if (questStack != null)
{
extendedProperties.addQuest(questStack);
}
else
{
throw new CommandException("Could not find a quest with the given name.");
}
}
else
{
throw new CommandException("Invalid Player.");
}
}
else
{
throw new CommandException("No random quest parameters.");
}
}
else if (parameters[0].equalsIgnoreCase("remove"))
{
if (parameters.length > 1)
{
EntityPlayer entityPlayer;
if (parameters.length > 2)
{
entityPlayer = getPlayer(commandSender,parameters[2]);
}else
{
entityPlayer = commandSender.getEntityWorld().getPlayerEntityByName(commandSender.getCommandSenderName());
}
if (entityPlayer != null) {
MOExtendedProperties extendedProperties = MOExtendedProperties.get(entityPlayer);
if (parameters[1].equalsIgnoreCase("all")) {
extendedProperties.getQuestData().clearActiveQuests();
extendedProperties.getQuestData().clearCompletedQuests();
extendedProperties.sync(EnumSet.allOf(PlayerQuestData.DataType.class));
} else if (parameters[1].equalsIgnoreCase("active")) {
extendedProperties.getQuestData().clearActiveQuests();
extendedProperties.sync(EnumSet.of(PlayerQuestData.DataType.ACTIVE_QUESTS));
} else if (parameters[1].equalsIgnoreCase("completed")) {
extendedProperties.getQuestData().clearCompletedQuests();
extendedProperties.sync(EnumSet.of(PlayerQuestData.DataType.COMPLETED_QUESTS));
}else
{
throw new CommandException("Invalid quest type.");
}
}
else
{
throw new CommandException("Invalid Player.");
}
}
else
{
throw new CommandException("No remove quests parameters.");
}
}
else if (parameters[0].equalsIgnoreCase("contract"))
{
if (parameters.length > 1)
{
IQuest quest = MatterOverdrive.quests.getQuestByName(parameters[1]);
if (quest != null)
{
EntityPlayer entityPlayer;
if (parameters.length > 2)
{
entityPlayer = getPlayer(commandSender,parameters[2]);
}else
{
entityPlayer = commandSender.getEntityWorld().getPlayerEntityByName(commandSender.getCommandSenderName());
}
QuestStack questStack = MatterOverdrive.questFactory.generateQuestStack(random,quest);
entityPlayer.inventory.addItemStackToInventory(questStack.getContract());
}else
{
throw new CommandException("No such quest.");
}
}
}
else
{
throw new CommandException("Invalid quest command.");
}
}
else
{
throw new CommandException("Invalid command.");
}
}
@Override
public List addTabCompletionOptions(ICommandSender commandSender, String[] parameters)
{
List<String> commands = new ArrayList<>();
if (parameters.length == 2)
{
if (parameters[0].equalsIgnoreCase("add") || parameters[0].equalsIgnoreCase("contract"))
{
for (String questName : MatterOverdrive.quests.getAllQuestName())
{
commands.add(questName);
}
}else if (parameters[0].equalsIgnoreCase("remove"))
{
commands.add("all");
commands.add("active");
commands.add("completed");
}
}
else if (parameters.length == 1)
{
commands.add("add");
commands.add("remove");
commands.add("contract");
}
else if (parameters.length == 3)
{
for (Object player : commandSender.getEntityWorld().playerEntities)
{
commands.add(((EntityPlayer)player).getCommandSenderName());
}
}
return commands;
}
}