// Path: src/main/java/com/creativemd/igcm/api/segments/ValueSegment.java
// public abstract class ValueSegment<T> extends ConfigSegment implements ICommandSupport {
// 	
// 	public T defaultValue;
// 	
// 	public T value;
// 	
// 	public ValueSegment(String title, T defaultValue) {
// 		super(title);
// 		this.value = defaultValue;
// 		this.defaultValue = defaultValue;
// 	}
// 	
// 	@Override
// 	public void initDefault() {
// 		value = defaultValue;
// 		super.initDefault();
// 	}
// 	
// 	@Override
// 	public boolean contains(String search) {
// 		if (title != null && title.toLowerCase().contains(search))
// 			return true;
// 		if (value != null && value.toString().toLowerCase().contains(search))
// 			return true;
// 		return getKey().toLowerCase().contains(search);
// 	}
// 	
// 	public abstract void set(T newValue);
// 	
// 	@Override
// 	public boolean hasCommandSupport() {
// 		return CommandParser.canParseObject(value.getClass());
// 	}
// 	
// 	@Override
// 	public void parseValue(String arg) throws CommandException {
// 		set((T) CommandParser.parseObject(arg, value.getClass()));
// 	}
// 	
// 	@Override
// 	public String printValue() {
// 		return CommandParser.printObject(value);
// 	}
// 	
// 	@Override
// 	public String printDefaultValue() {
// 		return CommandParser.printObject(defaultValue);
// 	}
// 	
// 	@Override
// 	public String[] getPossibleValues() {
// 		if (value instanceof Boolean)
// 			return new String[] { "true", "false" };
// 		return null;
// 	}
// }
// 
// Path: src/main/java/com/creativemd/igcm/container/controls/InfoSlotControl.java
// public class InfoSlotControl extends SlotControlNoSync {
// 	
// 	public InfoStack info;
// 	public InventoryBasic inventory;
// 	
// 	public InfoSlotControl(IInventory inventory, int index, int x, int y, InfoStack info) {
// 		super(new SlotPreview(inventory, index, x, y));
// 		this.info = info;
// 		inventory = (InventoryBasic) slot.inventory;
// 		if (info != null)
// 			slot.putStack(info.getItemStack());
// 	}
// 	
// 	public void putInfo(InfoStack info) {
// 		this.info = info;
// 		if (info != null)
// 			slot.putStack(info.getItemStack());
// 		else
// 			slot.putStack(ItemStack.EMPTY);
// 	}
// 	
// }
// 
// Path: src/main/java/com/creativemd/igcm/utils/SearchUtils.java
// public class SearchUtils {
// 	
// 	public static boolean canStackBeFound(ItemStack stack, String search) {
// 		try {
// 			if (stack.getItem() instanceof ItemBlock)
// 				if (Block.REGISTRY.getNameForObject(Block.getBlockFromItem(stack.getItem())).toString().toLowerCase().contains(search))
// 					return true;
// 				else if (Item.REGISTRY.getNameForObject(stack.getItem()).toString().toLowerCase().contains(search))
// 					return true;
// 				
// 			return stack.getDisplayName().toLowerCase().contains(search);
// 		} catch (Exception e) {
// 			return false;
// 		}
// 	}
// 	
// 	public static boolean canInfoBeFound(InfoStack info, String search) {
// 		return info == null ? false : canStackBeFound(info.getItemStack(), search);
// 	}
// 	
// }


import java.lang.reflect.Modifier;
import java.util.ArrayList;
import com.creativemd.creativecore.common.gui.ContainerControl;
import com.creativemd.creativecore.common.gui.GuiControl;
import com.creativemd.creativecore.common.gui.GuiRenderHelper;
import com.creativemd.creativecore.common.gui.container.SubContainer;
import com.creativemd.creativecore.common.gui.container.SubGui;
import com.creativemd.creativecore.common.gui.controls.gui.GuiLabel;
import com.creativemd.creativecore.common.utils.stack.InfoBlock;
import com.creativemd.creativecore.common.utils.stack.InfoContainOre;
import com.creativemd.creativecore.common.utils.stack.InfoFuel;
import com.creativemd.creativecore.common.utils.stack.InfoItem;
import com.creativemd.creativecore.common.utils.stack.InfoItemStack;
import com.creativemd.creativecore.common.utils.stack.InfoMaterial;
import com.creativemd.creativecore.common.utils.stack.InfoName;
import com.creativemd.creativecore.common.utils.stack.InfoOre;
import com.creativemd.creativecore.common.utils.stack.InfoStack;
import com.creativemd.igcm.api.segments.ValueSegment;
import com.creativemd.igcm.container.controls.InfoSlotControl;
import com.creativemd.igcm.utils.SearchUtils;
import com.mojang.realmsclient.gui.ChatFormatting;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.inventory.InventoryBasic;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
		
		InventoryBasic basic = new InventoryBasic(getKey(), false, 1);
		slots.add(new InfoSlotControl(basic, 0, x + 5, y + 5, value) {
			
			@Override
			public void putInfo(InfoStack info) {
				super.putInfo(info);
				label.caption = getLabelText(info);
				label.width = GuiRenderHelper.instance.font.getStringWidth(label.caption) + label.getContentOffset() * 2;
			}
			
		});
		return slots;
	}
	
	@Override
	public void loadExtra(NBTTagCompound nbt) {
		value = InfoStack.parseNBT(nbt);
	}
	
	@Override
	public void saveExtra(NBTTagCompound nbt) {
		if (value != null)
			value.writeToNBT(nbt);
	}
	
	@Override
	public boolean contains(String search) {
		if (!super.contains(search)) {
			if (value != null)
// Path: src/main/java/com/creativemd/igcm/api/segments/ValueSegment.java
// public abstract class ValueSegment<T> extends ConfigSegment implements ICommandSupport {
// 	
// 	public T defaultValue;
// 	
// 	public T value;
// 	
// 	public ValueSegment(String title, T defaultValue) {
// 		super(title);
// 		this.value = defaultValue;
// 		this.defaultValue = defaultValue;
// 	}
// 	
// 	@Override
// 	public void initDefault() {
// 		value = defaultValue;
// 		super.initDefault();
// 	}
// 	
// 	@Override
// 	public boolean contains(String search) {
// 		if (title != null && title.toLowerCase().contains(search))
// 			return true;
// 		if (value != null && value.toString().toLowerCase().contains(search))
// 			return true;
// 		return getKey().toLowerCase().contains(search);
// 	}
// 	
// 	public abstract void set(T newValue);
// 	
// 	@Override
// 	public boolean hasCommandSupport() {
// 		return CommandParser.canParseObject(value.getClass());
// 	}
// 	
// 	@Override
// 	public void parseValue(String arg) throws CommandException {
// 		set((T) CommandParser.parseObject(arg, value.getClass()));
// 	}
// 	
// 	@Override
// 	public String printValue() {
// 		return CommandParser.printObject(value);
// 	}
// 	
// 	@Override
// 	public String printDefaultValue() {
// 		return CommandParser.printObject(defaultValue);
// 	}
// 	
// 	@Override
// 	public String[] getPossibleValues() {
// 		if (value instanceof Boolean)
// 			return new String[] { "true", "false" };
// 		return null;
// 	}
// }
// 
// Path: src/main/java/com/creativemd/igcm/container/controls/InfoSlotControl.java
// public class InfoSlotControl extends SlotControlNoSync {
// 	
// 	public InfoStack info;
// 	public InventoryBasic inventory;
// 	
// 	public InfoSlotControl(IInventory inventory, int index, int x, int y, InfoStack info) {
// 		super(new SlotPreview(inventory, index, x, y));
// 		this.info = info;
// 		inventory = (InventoryBasic) slot.inventory;
// 		if (info != null)
// 			slot.putStack(info.getItemStack());
// 	}
// 	
// 	public void putInfo(InfoStack info) {
// 		this.info = info;
// 		if (info != null)
// 			slot.putStack(info.getItemStack());
// 		else
// 			slot.putStack(ItemStack.EMPTY);
// 	}
// 	
// }
// 
// Path: src/main/java/com/creativemd/igcm/utils/SearchUtils.java
// public class SearchUtils {
// 	
// 	public static boolean canStackBeFound(ItemStack stack, String search) {
// 		try {
// 			if (stack.getItem() instanceof ItemBlock)
// 				if (Block.REGISTRY.getNameForObject(Block.getBlockFromItem(stack.getItem())).toString().toLowerCase().contains(search))
// 					return true;
// 				else if (Item.REGISTRY.getNameForObject(stack.getItem()).toString().toLowerCase().contains(search))
// 					return true;
// 				
// 			return stack.getDisplayName().toLowerCase().contains(search);
// 		} catch (Exception e) {
// 			return false;
// 		}
// 	}
// 	
// 	public static boolean canInfoBeFound(InfoStack info, String search) {
// 		return info == null ? false : canStackBeFound(info.getItemStack(), search);
// 	}
// 	
// }


// Path: src/main/java/com/creativemd/igcm/api/segments/advanced/InfoSegment.java
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import com.creativemd.creativecore.common.gui.ContainerControl;
import com.creativemd.creativecore.common.gui.GuiControl;
import com.creativemd.creativecore.common.gui.GuiRenderHelper;
import com.creativemd.creativecore.common.gui.container.SubContainer;
import com.creativemd.creativecore.common.gui.container.SubGui;
import com.creativemd.creativecore.common.gui.controls.gui.GuiLabel;
import com.creativemd.creativecore.common.utils.stack.InfoBlock;
import com.creativemd.creativecore.common.utils.stack.InfoContainOre;
import com.creativemd.creativecore.common.utils.stack.InfoFuel;
import com.creativemd.creativecore.common.utils.stack.InfoItem;
import com.creativemd.creativecore.common.utils.stack.InfoItemStack;
import com.creativemd.creativecore.common.utils.stack.InfoMaterial;
import com.creativemd.creativecore.common.utils.stack.InfoName;
import com.creativemd.creativecore.common.utils.stack.InfoOre;
import com.creativemd.creativecore.common.utils.stack.InfoStack;
import com.creativemd.igcm.api.segments.ValueSegment;
import com.creativemd.igcm.container.controls.InfoSlotControl;
import com.creativemd.igcm.utils.SearchUtils;
import com.mojang.realmsclient.gui.ChatFormatting;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.inventory.InventoryBasic;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

		
		InventoryBasic basic = new InventoryBasic(getKey(), false, 1);
		slots.add(new InfoSlotControl(basic, 0, x + 5, y + 5, value) {
			
			@Override
			public void putInfo(InfoStack info) {
				super.putInfo(info);
				label.caption = getLabelText(info);
				label.width = GuiRenderHelper.instance.font.getStringWidth(label.caption) + label.getContentOffset() * 2;
			}
			
		});
		return slots;
	}
	
	@Override
	public void loadExtra(NBTTagCompound nbt) {
		value = InfoStack.parseNBT(nbt);
	}
	
	@Override
	public void saveExtra(NBTTagCompound nbt) {
		if (value != null)
			value.writeToNBT(nbt);
	}
	
	@Override
	public boolean contains(String search) {
		if (!super.contains(search)) {
			if (value != null)
				return SearchUtils.canInfoBeFound(value, search);