@Override
	public void modifyGenCraftSkill(MOB mob, Ability me, int showFlag) throws IOException
	{
		if(mob.isMonster())
			return;
		boolean ok=false;
		if((showFlag == -1) && (CMProps.getIntVar(CMProps.Int.EDITORTYPE)>0))
			showFlag=-999;
		while((mob.session()!=null)&&(!mob.session().isStopped())&&(!ok))
		{
			int showNumber=0;
			// id is bad to change.. make them delete it.
			//genText(mob,me,null,++showNumber,showFlag,"Enter the class","CLASS");
			promptStatStr(mob,me,null,++showNumber,showFlag,"Skill name","NAME",false);
			promptStatStr(mob,me,null,++showNumber,showFlag,"Skill verb","VERB",false);
			promptStatStr(mob,me,null,++showNumber,showFlag,"Command Words (comma sep)","TRIGSTR",false);
			promptStatStr(mob,me,null,++showNumber,showFlag,"Recipe filename","FILENAME",false);
			++showNumber;
			if((showFlag<=0)||(showFlag==showNumber))
			{
				mob.tell(L("@x1. Raw materials: @x2",""+showNumber,me.getStat("MATLIST")));
				if((showFlag==showNumber)||(showFlag<=-999))
				{
					final String promptStr=L("Enter a material or resource to add or remove (?)\n\r:");
					while((mob.session()!=null)&&(!mob.session().isStopped()))
					{
						final String word=mob.session().prompt(promptStr,"");
						if(word.trim().length()==0)
						{
							break;
						}
						if(word.equalsIgnoreCase("?"))
						{
							final StringBuilder str=new StringBuilder(CMParms.toListString(RawMaterial.Material.values()));
							str.append(", ").append(CMParms.toListString(RawMaterial.CODES.NAMES()));
							mob.tell(str.toString());
							continue;
						}
						final List<String> curSet=CMParms.parseCommas(me.getStat("MATLIST").toUpperCase(),true);
						if(curSet.contains(word.toUpperCase().trim()))
						{
							curSet.remove(word.toUpperCase().trim());
							me.setStat("MATLIST", CMParms.toListString(curSet.toArray(new String[0])));
							mob.tell(L("Resource or Material '@x1' removed.",word));
						}
						else
						if((RawMaterial.Material.findIgnoreCase(word)!=null)
						||CMParms.containsIgnoreCase(RawMaterial.CODES.NAMES(), word))
						{
							curSet.add(word.toUpperCase().trim());
							me.setStat("MATLIST", CMParms.toListString(curSet.toArray(new String[0])));
							if(RawMaterial.Material.findIgnoreCase(word)!=null)
								mob.tell(L("Material type '@x1' added.",word));
							else
								mob.tell(L("Raw resource '@x1' added.",word));
						}
						else
							mob.tell(L("'@x1' is not a material or resource.  Try ?",word));
					}
				}
			}
			promptStatBool(mob,me,null,++showNumber,showFlag,"Can mend","CANMEND");
			promptStatBool(mob,me,null,++showNumber,showFlag,"Can refit","CANREFIT");
			promptStatBool(mob,me,null,++showNumber,showFlag,"Can bundle","CANBUNDLE");
			promptStatBool(mob,me,null,++showNumber,showFlag,"Can sit","CANSIT");
			promptStatStr(mob,me,null,++showNumber,showFlag,"MSP file","SOUND",false);
			promptStatStr(mob,me,null,++showNumber,showFlag,"Help Text","HELP",true);

			if (showFlag < -900)
			{
				ok = true;
				break;
			}
			if (showFlag > 0)
			{
				showFlag = -1;
				continue;
			}
			showFlag=CMath.s_int(mob.session().prompt(L("Edit which? "),""));
			if(showFlag<=0)
			{
				showFlag=-1;
				ok=true;
			}
		}
	}