public CustomNPC(NPCData data) {
   super();
   this.data = data;
   growth = data.getGrowth();
   preferredAttributes = new ArrayList<PreferredAttribute>(data.getPreferredAttributes());
   character = new NPC(data.getName(), data.getStats().level, this);
   character.outfitPlan.addAll(data.getTopOutfit());
   character.outfitPlan.addAll(data.getBottomOutfit());
   character.closet.addAll(character.outfitPlan);
   character.change(Modifier.normal);
   character.att = new HashMap<Attribute, Integer>(data.getStats().attributes);
   character.traits = new HashSet<Trait>(data.getStats().traits);
   character.getArousal().setMax(data.getStats().arousal);
   character.getStamina().setMax(data.getStats().stamina);
   character.getMojo().setMax(data.getStats().mojo);
   character.getWillpower().setMax(data.getStats().willpower);
   character.setTrophy(data.getTrophy());
   character.plan = data.getPlan();
   character.mood = Emotion.confident;
   character.custom = true;
   try {
     character.body = data.getBody().clone(character);
   } catch (CloneNotSupportedException e) {
     e.printStackTrace();
     character.body = new Body(character);
   }
   character.body.finishBody(data.getSex());
   for (ItemAmount i : data.getStartingItems()) {
     character.gain(i.item, i.amount);
     ;
   }
   Global.gainSkills(character);
 }