package com.rota.ee3help.commands;
import java.util.Map;
import com.pahimar.ee3.api.exchange.EnergyValue;
import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.exchange.OreStack;
import com.pahimar.ee3.exchange.WrappedStack;
import com.pahimar.ee3.network.PacketHandler;
import com.pahimar.ee3.network.message.MessageSetEnergyValue;
import com.rota.ee3help.Helper;
import cpw.mods.fml.common.registry.GameData;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.RegistryNamespaced;
import net.minecraftforge.oredict.OreDictionary;
public class CommandAddOreRange extends CommandModifyBase
{
EnergyValueRegistry registryValues = EnergyValueRegistry.getInstance();
static RegistryNamespaced registryNames = GameData.getItemRegistry();
public static void addOreRangeForRange(String name, int start, int end, float value)
{
for(int i = start; i <= end; i++)
{
addOreRange(name,i,value);
}
}
public static void addOreRange(String name, int damageValue, float value)
{
if(!registryNames.containsKey(name))
return;
ItemStack iStack = new ItemStack((Item) registryNames.getObject(name));
Map<WrappedStack, EnergyValue> valuesPre = Helper.loadPre();
iStack.setItemDamage(damageValue);
int oreIDs [] = OreDictionary.getOreIDs(iStack);
if(oreIDs.length == 0) return;
for(int i : oreIDs)
{
WrappedStack w = WrappedStack.wrap(new OreStack(OreDictionary.getOreName(i)));
EnergyValue e = new EnergyValue(value);
if (w != null && e != null && Float.compare(e.getValue(), 0) > 0)
{
if(valuesPre.containsKey(w))
valuesPre.replace(w, e);
else
valuesPre.put(w, e);
PacketHandler.INSTANCE.sendToAll(new MessageSetEnergyValue(w, e));
}
}
EnergyValueRegistry.getInstance().setShouldRegenNextRestart(true);
Helper.savePre(valuesPre);
}
@Override
public String getCommandName()
{
return "add-ore-range";
}
@Override
public String getCommandUsage(ICommandSender cs)
{
return "Use command with no arguments.";
}
@Override
public void processCommand(ICommandSender cs, String[] args)
{
resetFlag();
try
{
String name;
int dmg;
float value;
switch(args.length)
{
case 0:
Helper.toChatErr(cs, "add-ore-range <emcvalue>, Uses held item");
Helper.toChatErr(cs, "add-ore-range <id/name> <emcvalue> (DMG=0|N/A)");
Helper.toChatErr(cs, "add-ore-range <id/name> <damagevalue> <emcvalue>");
break;
case 1:
if(cs instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer) cs;
ItemStack iStack = player.getHeldItem();
if(iStack != null)
{
name = registryNames.getNameForObject(iStack.getItem());
value = Float.parseFloat(args[0]);
dmg = iStack.getItemDamage();
addOreRange(name,dmg,value);
Helper.toChat(cs, EnumChatFormatting.GREEN + "(+) ORE RANGE FOR: "+name);
}
else
Helper.toChatErr(cs, "(X) Invalid item.");
}
break;
case 2:
name = Helper.getItemName(args[0]);
value = Float.parseFloat(args[1]);
dmg = 0;
if(name != null)
{
addOreRange(name,dmg,value);
Helper.toChat(cs, EnumChatFormatting.GREEN + "(+) ORE RANGE FOR: "+name);
}
else
Helper.toChatErr(cs, "(X) Invalid item.");
break;
case 3:
name = Helper.getItemName(args[0]);
dmg = Integer.parseInt(args[1]);
value = Float.parseFloat(args[2]);
if(name != null)
{
addOreRange(name,dmg,value);
Helper.toChat(cs, EnumChatFormatting.GREEN + "(+) ORE RANGE FOR: "+name);
}
else
Helper.toChatErr(cs, "(X) Invalid item.");
break;
default:
Helper.toChatErr(cs, "Invalid number of arguments for operation.");
Helper.toChatErr(cs, "add-ore-range <emcvalue>, Uses held item");
Helper.toChatErr(cs, "add-ore-range <id/name> <emcvalue> (DMG=0|N/A)");
Helper.toChatErr(cs, "add-ore-range <id/name> <damagevalue> <emcvalue>");
}
}
catch (NumberFormatException e)
{
Helper.toChatErr(cs, "Non-number in numeric field.");
}
}
}