package mcjty.rftools.items.dimlets;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mcjty.lib.varia.Logging;
import mcjty.rftools.dimension.DimensionInformation;
import mcjty.rftools.dimension.DimensionStorage;
import mcjty.rftools.dimension.RfToolsDimensionManager;
import mcjty.rftools.dimension.description.DimensionDescriptor;
import mcjty.rftools.dimension.network.PacketGetDimensionEnergy;
import mcjty.rftools.network.RFToolsMessages;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RealizedDimensionTab extends Item {
private static long lastTime = 0;
public RealizedDimensionTab() {
setMaxStackSize(1);
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if ((!world.isRemote) && player.isSneaking()) {
NBTTagCompound tagCompound = stack.getTagCompound();
Logging.message(player, tagCompound.getString("descriptionString"));
int id = tagCompound.getInteger("id");
if (id != 0) {
RfToolsDimensionManager dimensionManager = RfToolsDimensionManager.getDimensionManager(world);
DimensionInformation information = dimensionManager.getDimensionInformation(id);
if (information != null) {
information.dump(player);
}
}
}
return stack;
}
@SideOnly(Side.CLIENT)
@Override
public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean whatIsThis) {
super.addInformation(itemStack, player, list, whatIsThis);
NBTTagCompound tagCompound = itemStack.getTagCompound();
if (tagCompound != null) {
String name = tagCompound.getString("name");
int id = 0;
if (name != null) {
id = tagCompound.getInteger("id");
if (id == 0) {
list.add(EnumChatFormatting.BLUE + "Name: " + name);
} else {
list.add(EnumChatFormatting.BLUE + "Name: " + name + " (Id " + id + ")");
}
}
String descriptionString = tagCompound.getString("descriptionString");
constructDescriptionHelp(list, descriptionString);
Integer ticksLeft = tagCompound.getInteger("ticksLeft");
if (ticksLeft == 0) {
DimensionInformation information = RfToolsDimensionManager.getDimensionManager(player.getEntityWorld()).getDimensionInformation(id);
if (information == null) {
list.add(EnumChatFormatting.RED + "Dimension information Missing!");
} else {
list.add(EnumChatFormatting.BLUE + "Dimension ready!");
int maintainCost = tagCompound.getInteger("rfMaintainCost");
int actualCost = information.getActualRfCost();
if (actualCost == maintainCost || actualCost == 0) {
list.add(EnumChatFormatting.YELLOW + " Maintenance cost: " + maintainCost + " RF/tick");
} else {
list.add(EnumChatFormatting.YELLOW + " Maintenance cost: " + actualCost + " RF/tick (Specified: " + maintainCost + " RF/tick)");
}
if (id != 0) {
if (System.currentTimeMillis() - lastTime > 500) {
lastTime = System.currentTimeMillis();
RFToolsMessages.INSTANCE.sendToServer(new PacketGetDimensionEnergy(id));
}
DimensionStorage storage = DimensionStorage.getDimensionStorage(player.getEntityWorld());
int power = storage.getEnergyLevel(id);
list.add(EnumChatFormatting.YELLOW + " Current power: " + power + " RF");
}
}
} else {
int createCost = tagCompound.getInteger("rfCreateCost");
int maintainCost = tagCompound.getInteger("rfMaintainCost");
int tickCost = tagCompound.getInteger("tickCost");
int percentage = (tickCost - ticksLeft) * 100 / tickCost;
list.add(EnumChatFormatting.BLUE + "Dimension progress: " + percentage + "%");
list.add(EnumChatFormatting.YELLOW + " Creation cost: " + createCost + " RF/tick");
list.add(EnumChatFormatting.YELLOW + " Maintenance cost: " + maintainCost + " RF/tick");
list.add(EnumChatFormatting.YELLOW + " Tick cost: " + tickCost + " ticks");
}
}
}
private void constructDescriptionHelp(List list, String descriptionString) {
Map<DimletType,List<DimletKey>> dimletTypeListMap = new HashMap<DimletType, List<DimletKey>>();
for (DimletKey descriptor : DimensionDescriptor.parseDescriptionString(descriptionString)) {
DimletType type = descriptor.getType();
if (!dimletTypeListMap.containsKey(type)) {
dimletTypeListMap.put(type, new ArrayList<DimletKey>());
}
dimletTypeListMap.get(descriptor.getType()).add(descriptor);
}
for (Map.Entry<DimletType, List<DimletKey>> entry : dimletTypeListMap.entrySet()) {
DimletType type = entry.getKey();
List<DimletKey> keys = entry.getValue();
if (keys != null && !keys.isEmpty()) {
if (type == DimletType.DIMLET_DIGIT) {
String digitString = "";
for (DimletKey key : keys) {
digitString += DimletObjectMapping.idToDigit.get(key);
}
list.add(EnumChatFormatting.GREEN + "Digits " + digitString);
} else {
if (keys.size() == 1) {
list.add(EnumChatFormatting.GREEN + type.dimletType.getName() + " 1 dimlet");
} else {
list.add(EnumChatFormatting.GREEN + type.dimletType.getName() + " " + keys.size() + " dimlets");
}
}
}
}
}
}