Browse Source

Progress snapshot.

preble 13 years ago
parent
commit
1132d91503

+ 2 - 1
.gitignore

@@ -1,3 +1,4 @@
 build
 *.perspectivev3
-*.pbxuser
+*.pbxuser
+tmp

File diff suppressed because it is too large
+ 490 - 320
English.lproj/MainMenu.xib


+ 14 - 0
IJInventoryItem.h

@@ -8,6 +8,14 @@
 
 #import <Cocoa/Cocoa.h>
 
+// See: http://www.minecraftwiki.net/wiki/Data_values
+#define IJInventorySlotQuickFirst   (0)
+#define IJInventorySlotQuickLast    (8)
+#define IJInventorySlotNormalFirst  (9)
+#define IJInventorySlotNormalLast  (35)
+#define IJInventorySlotArmorLast  (103) // head
+#define IJInventorySlotArmorFirst (100) // feet
+
 
 @interface IJInventoryItem : NSObject {
 	uint16_t itemId;
@@ -20,4 +28,10 @@
 @property (nonatomic, assign) uint8_t count;
 @property (nonatomic, assign) uint8_t slot;
 
+@property (nonatomic, readonly) NSString *itemName;
+
++ (id)emptyItemWithSlot:(uint8_t)slot;
+
++ (NSDictionary *)itemIdLookup;
+
 @end

+ 37 - 0
IJInventoryItem.m

@@ -13,4 +13,41 @@
 
 @synthesize itemId, slot, damage, count;
 
++ (id)emptyItemWithSlot:(uint8_t)slot
+{
+	IJInventoryItem *obj = [[[[self class] alloc] init] autorelease];
+	obj.slot = slot;
+	return obj;
+}
+
+- (NSString *)itemName
+{
+	NSString *name = [[IJInventoryItem itemIdLookup] objectForKey:[NSNumber numberWithShort:self.itemId]];
+	if (name)
+		return name;
+	else
+		return [NSString stringWithFormat:@"%d", self.itemId];
+}
+
++ (NSDictionary *)itemIdLookup
+{
+	static NSDictionary *lookup = nil;
+	if (!lookup)
+	{
+		NSError *error = nil;
+		NSString *lines = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"Items" withExtension:@"csv"]
+												   encoding:NSUTF8StringEncoding
+													  error:&error];
+		NSMutableDictionary *building = [NSMutableDictionary dictionary];
+		[lines enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
+			NSArray *components = [line componentsSeparatedByString:@","];
+			NSNumber *itemId = [NSNumber numberWithShort:[[components objectAtIndex:0] intValue]];
+			NSString *name = [components objectAtIndex:1];
+			[building setObject:name forKey:itemId];
+		}];
+		lookup = [[NSDictionary alloc] initWithDictionary:building];
+	}
+	return lookup;
+}
+
 @end

+ 19 - 1
IJInventoryWindowController.h

@@ -8,9 +8,27 @@
 
 #import <Cocoa/Cocoa.h>
 
+@class IJMinecraftLevel;
 
 @interface IJInventoryWindowController : NSWindowController {
-
+	IJMinecraftLevel *level;
+	NSArray *inventory;
+	
+	NSOutlineView *outlineView;
+	NSPopUpButton *worldPopup;
+	
+	NSArray *rootItems;
+	NSMutableArray *armorItem;
+	NSMutableArray *quickItem;
+	NSMutableArray *inventoryItem;
+	
+	BOOL dirty;
+	int64_t sessionLockValue;
 }
 
+@property (nonatomic, assign) IBOutlet NSOutlineView *outlineView;
+@property (nonatomic, assign) IBOutlet NSPopUpButton *worldPopup;
+
+- (IBAction)worldSelectionChanged:(id)sender;
+
 @end

+ 270 - 6
IJInventoryWindowController.m

@@ -7,24 +7,288 @@
 //
 
 #import "IJInventoryWindowController.h"
-
+#import "IJMinecraftLevel.h"
+#import "IJInventoryItem.h"
+#import "IJItemPickerWindowController.h"
 
 @implementation IJInventoryWindowController
 
+@synthesize outlineView;
+@synthesize worldPopup;
+
 
-- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
+- (void)awakeFromNib
+{
+	armorItem = [NSMutableArray array];
+	quickItem = [NSMutableArray array];
+	inventoryItem = [NSMutableArray array];
+	rootItems = [[NSArray alloc] initWithObjects:armorItem, quickItem, inventoryItem, nil];
+	
+	[self worldSelectionChanged:nil];
+	
+	[outlineView expandItem:nil expandChildren:YES];
+}
+- (void)dealloc
 {
-	return 0;
+	[inventory release];
+	[rootItems release];
+	[level release];
+	[super dealloc];
 }
 
-- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
+
+#pragma mark -
+#pragma mark World Selection
+
+- (void)loadWorldAtIndex:(int)worldIndex
 {
-	return nil;
+	[armorItem removeAllObjects];
+	[quickItem removeAllObjects];
+	[inventoryItem removeAllObjects];
+	
+	sessionLockValue = [IJMinecraftLevel writeToSessionLockAtIndex:worldIndex];
+	if (![IJMinecraftLevel checkSessionLockAtIndex:worldIndex value:sessionLockValue])
+	{
+		NSBeginCriticalAlertSheet(@"Error loading world.", @"Dismiss", nil, nil, self.window, nil, nil, nil, nil, @"Inside Job was unable obtain the session lock.");
+		return;
+	}
+	
+	NSString *levelPath = [IJMinecraftLevel pathForLevelDatAtIndex:worldIndex];
+	
+	NSData *fileData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:levelPath]];
+	
+	if (!fileData)
+	{
+		// Error loading 
+		[outlineView reloadData];
+		NSBeginCriticalAlertSheet(@"Error loading world.", @"Dismiss", nil, nil, self.window, nil, nil, nil, nil, @"InsideJob was unable to load the level at %@.", levelPath);
+		return;
+	}
+	
+	[level release];
+	level = [[IJMinecraftLevel nbtContainerWithData:fileData] retain];
+	inventory = [[level inventory] retain];
+	
+	// Add placeholder inventory items:
+	
+	for (int i = 0; i < IJInventorySlotQuickLast + 1 - IJInventorySlotQuickFirst; i++)
+		[quickItem addObject:[IJInventoryItem emptyItemWithSlot:IJInventorySlotQuickFirst + i]];
+	
+	for (int i = 0; i < IJInventorySlotNormalLast + 1 - IJInventorySlotNormalFirst; i++)
+		[inventoryItem addObject:[IJInventoryItem emptyItemWithSlot:IJInventorySlotNormalFirst + i]];
+	
+	for (int i = 0; i < IJInventorySlotArmorLast + 1 - IJInventorySlotArmorFirst; i++)
+		[armorItem addObject:[IJInventoryItem emptyItemWithSlot:IJInventorySlotArmorFirst + i]];
+	
+	
+	// Overwrite the placeholders with actual inventory:
+	
+	for (IJInventoryItem *item in inventory)
+	{
+		if (IJInventorySlotQuickFirst <= item.slot && item.slot <= IJInventorySlotQuickLast)
+		{
+			[quickItem replaceObjectAtIndex:item.slot - IJInventorySlotQuickFirst withObject:item];
+		}
+		else if (IJInventorySlotNormalFirst <= item.slot && item.slot <= IJInventorySlotNormalLast)
+		{
+			[inventoryItem replaceObjectAtIndex:item.slot - IJInventorySlotNormalFirst withObject:item];
+		}
+		else if (IJInventorySlotArmorFirst <= item.slot && item.slot <= IJInventorySlotArmorLast)
+		{
+			[armorItem replaceObjectAtIndex:item.slot - IJInventorySlotArmorFirst withObject:item];
+		}
+	}
+	
+	[outlineView reloadData];
 }
 
-- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
+- (void)saveToWorldAtIndex:(int)worldIndex
 {
+	if (![IJMinecraftLevel checkSessionLockAtIndex:worldIndex value:sessionLockValue])
+	{
+		NSBeginCriticalAlertSheet(@"Another application has modified this world.", @"Dismiss", nil, nil, self.window, nil, nil, nil, nil, @"The session lock was changed by another application.");
+		return;
+	}
+	
+	NSString *levelPath = [IJMinecraftLevel pathForLevelDatAtIndex:worldIndex];
+	
+	NSMutableArray *newInventory = [NSMutableArray array];
 	
+	for (NSArray *items in rootItems)
+	{
+		for (IJInventoryItem *item in items)
+		{
+			if (item.count > 0 && item.itemId > 0)
+				[newInventory addObject:item];
+		}
+	}
+	
+	[level setInventory:newInventory];
+	
+	NSString *backupPath = [levelPath stringByAppendingPathExtension:@".insidejobbackup"];
+	
+	BOOL success;
+	NSError *error = nil;
+	success = [[NSFileManager defaultManager] removeItemAtPath:backupPath error:&error];
+	success = [[NSFileManager defaultManager] copyItemAtPath:levelPath
+													  toPath:backupPath
+													   error:&error];
+	if (!success)
+	{
+		NSBeginCriticalAlertSheet(@"An error occurred while saving.", @"Dismiss", nil, nil, self.window, nil, nil, nil, nil, @"Inside Job was unable to create a backup of the existing level file.");
+		return;
+	}
+	
+	[[level writeData] writeToURL:[NSURL fileURLWithPath:levelPath] atomically:NO];
+}
+
+#pragma mark -
+#pragma mark Actions
+
+- (IBAction)worldSelectionChanged:(id)sender
+{
+	int worldIndex = [[worldPopup selectedItem] tag];
+	[self loadWorldAtIndex:worldIndex];
+}
+
+- (void)saveDocument:(id)sender
+{
+	int worldIndex = [[worldPopup selectedItem] tag];
+	[self saveToWorldAtIndex:worldIndex];
+}
+
+
+#pragma mark -
+#pragma mark Inventory Outline View
+
+- (id)outlineView:(NSOutlineView *)theOutlineView child:(NSInteger)index ofItem:(id)item
+{
+	if (item == nil)
+	{
+		return [rootItems objectAtIndex:index];
+	}
+	else
+	{
+		return [item objectAtIndex:index];
+	}
+
+}
+
+- (BOOL)outlineView:(NSOutlineView *)theOutlineView isItemExpandable:(id)item
+{
+	return item == nil || [rootItems containsObject:item];
+}
+
+- (NSInteger)outlineView:(NSOutlineView *)theOutlineView numberOfChildrenOfItem:(id)item
+{
+	if (item == nil)
+	{
+		return 3;
+	}
+	else if ([rootItems containsObject:item])
+	{
+		return [(NSArray *)item count];
+	}
+	else
+	{
+		return 0;
+	}
+
+}
+
+- (id)outlineView:(NSOutlineView *)theOutlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
+{
+	if ([rootItems containsObject:item])
+	{
+		if ([tableColumn.identifier isEqual:@"slot"])
+		{
+			if (item == armorItem)
+				return @"Armor";
+			else if (item == quickItem)
+				return @"Quick Inventory";
+			else if (item == inventoryItem)
+				return @"Inventory";
+		}
+		else
+		{
+			return nil;
+		}
+	}
+	
+	IJInventoryItem *invItem = item;
+	
+	if ([tableColumn.identifier isEqual:@"slot"])
+	{
+		return [NSString stringWithFormat:@"%d", invItem.slot];
+	}
+	else if ([tableColumn.identifier isEqual:@"id"])
+	{
+		if (invItem.itemId)
+			return [NSNumber numberWithShort:invItem.itemId];
+		else
+			return nil;
+	}
+	else if ([tableColumn.identifier isEqual:@"item"])
+	{
+		if (invItem.itemId)
+			return invItem.itemName;
+		else
+			return @"";
+	}
+	else if ([tableColumn.identifier isEqual:@"count"])
+	{
+		if (invItem.count)
+			return [NSNumber numberWithUnsignedChar:invItem.count];
+		else
+			return nil;
+	}
+	else if ([tableColumn.identifier isEqual:@"damage"])
+	{
+		if (invItem.damage)
+			return [NSNumber numberWithShort:invItem.damage];
+		else
+			return nil;
+	}
+	
+	return nil;
+}
+
+- (void)outlineView:(NSOutlineView *)theOutlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
+{
+	IJInventoryItem *invItem = item;
+	if ([tableColumn.identifier isEqual:@"id"])
+	{
+		invItem.itemId = [object shortValue];
+	}
+	else if ([tableColumn.identifier isEqual:@"count"])
+	{
+		invItem.count = [object unsignedCharValue];
+		if (invItem.count > 64)
+			invItem.count = 64;
+	}
+	else if ([tableColumn.identifier isEqual:@"damage"])
+	{
+		invItem.damage = [object shortValue];
+	}
+}
+
+- (BOOL)outlineView:(NSOutlineView *)theOutlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item
+{
+	if ([rootItems containsObject:item])
+		return NO;
+	else if ([tableColumn.identifier isEqual:@"item"])
+	{
+		IJInventoryItem *invItem = item;
+		[[IJItemPickerWindowController sharedController] showPickerWithInitialItemId:invItem.itemId completionBlock:^(uint16_t itemId) {
+			invItem.itemId = itemId;
+			[outlineView reloadItem:item];
+		}];
+		return NO;
+	}
+	else
+	{
+		return [tableColumn.identifier isEqual:@"slot"] == NO;
+	}
 }
 
 

+ 27 - 0
IJItemPickerWindowController.h

@@ -0,0 +1,27 @@
+//
+//  IJItemPickerWindowController.h
+//  InsideJob
+//
+//  Created by Adam Preble on 10/7/10.
+//  Copyright 2010 Adam Preble. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface IJItemPickerWindowController : NSWindowController {
+	void(^completionBlock)(uint16_t itemId);
+	NSTableView *tableView;
+	NSArray *allItemIds;
+	NSArray *filteredItemIds;
+}
+@property (nonatomic, assign) IBOutlet NSTableView *tableView;
+
++ (IJItemPickerWindowController *)sharedController;
+
+- (void)showPickerWithInitialItemId:(uint16_t)initialItemId completionBlock:(void(^)(uint16_t itemId))block;
+
+- (IBAction)itemActivated:(id)sender;
+- (IBAction)updateFilter:(id)sender;
+
+@end

+ 113 - 0
IJItemPickerWindowController.m

@@ -0,0 +1,113 @@
+//
+//  IJItemPickerWindowController.m
+//  InsideJob
+//
+//  Created by Adam Preble on 10/7/10.
+//  Copyright 2010 Adam Preble. All rights reserved.
+//
+
+#import "IJItemPickerWindowController.h"
+#import "IJInventoryItem.h"
+
+@implementation IJItemPickerWindowController
+
+@synthesize tableView;
+
++ (IJItemPickerWindowController *)sharedController
+{
+	static IJItemPickerWindowController *globalSharedController = nil;
+	if (!globalSharedController)
+	{
+		globalSharedController = [[IJItemPickerWindowController alloc] initWithWindowNibName:@"ItemPicker"];
+	}
+	return globalSharedController;
+}
+
+- (void)awakeFromNib
+{
+	[tableView setTarget:self];
+	[tableView setDoubleAction:@selector(itemActivated:)];
+	
+	NSArray *keys = [[IJInventoryItem itemIdLookup] allKeys];
+	keys = [keys sortedArrayUsingSelector:@selector(compare:)];
+	allItemIds = [[NSArray alloc] initWithArray:keys];
+	filteredItemIds = [allItemIds retain];
+}
+
+- (void)showPickerWithInitialItemId:(uint16_t)initialItemId completionBlock:(void(^)(uint16_t itemId))theBlock
+{
+	[self showWindow:nil];
+	
+	[completionBlock autorelease];
+	completionBlock = [theBlock copy];
+	
+	NSUInteger row = [filteredItemIds indexOfObject:[NSNumber numberWithShort:initialItemId]];
+	if (row != NSNotFound)
+	{
+		[tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
+		[tableView scrollRowToVisible:row];
+	}
+}
+
+- (IBAction)updateFilter:(id)sender
+{
+	NSString *filterString = [sender stringValue];
+	
+	if (filterString.length == 0)
+	{
+		[filteredItemIds autorelease];
+		filteredItemIds = [allItemIds retain];
+		[tableView reloadData];
+		return;
+	}
+	
+	NSMutableArray *results = [NSMutableArray array];
+	
+	for (NSNumber *itemId in allItemIds)
+	{
+		NSString *name = [[IJInventoryItem itemIdLookup] objectForKey:itemId];
+		NSRange range = [name rangeOfString:filterString options:NSCaseInsensitiveSearch];
+		if (range.location != NSNotFound)
+			[results addObject:itemId];
+	}
+	
+	[filteredItemIds autorelease];
+	filteredItemIds = [results retain];
+	[tableView reloadData];
+}
+
+- (IBAction)itemActivated:(id)sender
+{
+	NSUInteger row = [tableView selectedRow];
+	uint16_t itemId = [[filteredItemIds objectAtIndex:row] shortValue];
+	
+	[[self window] orderOut:nil];
+	
+	completionBlock(itemId);
+}
+
+#pragma mark -
+#pragma mark NSTableViewDataSource
+
+- (NSInteger)numberOfRowsInTableView:(NSTableView *)theTableView
+{
+	return filteredItemIds.count;
+}
+- (id)tableView:(NSTableView *)theTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
+{
+	// TODO: Change this, because the row will not correspond once we support sorting.
+	NSNumber *itemId = [filteredItemIds objectAtIndex:row];
+	
+	if ([tableColumn.identifier isEqual:@"itemId"])
+		return [itemId stringValue];
+		
+	NSString *name = [[IJInventoryItem itemIdLookup] objectForKey:itemId];
+	return name;
+}
+
+- (void)windowDidResignKey:(NSNotification *)notification
+{
+	[[self window] orderOut:nil];
+}
+
+@end

+ 8 - 0
IJMinecraftLevel.h

@@ -15,4 +15,12 @@
 
 @property (nonatomic, copy) NSArray *inventory; // Array of IJInventoryItem objects.
 
++ (NSString *)pathForWorldAtIndex:(int)worldIndex;
++ (NSString *)pathForLevelDatAtIndex:(int)worldIndex;
++ (NSString *)pathForSessionLockAtIndex:(int)worldIndex;
+
++ (int64_t)writeToSessionLockAtIndex:(int)worldIndex;
++ (BOOL)checkSessionLockAtIndex:(int)worldIndex value:(int64_t)checkValue;
+
+
 @end

+ 66 - 0
IJMinecraftLevel.m

@@ -69,4 +69,70 @@
 	inventoryList.children = newChildren;
 }
 
+#pragma mark -
+#pragma mark Helpers
+
++ (NSString *)pathForWorldAtIndex:(int)worldIndex
+{
+	NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
+	NSString *path = [paths objectAtIndex:0];
+	path = [path stringByAppendingPathComponent:@"minecraft"];
+	path = [path stringByAppendingPathComponent:@"saves"];
+	path = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"World%d", worldIndex]];
+	return path;
+}
+
++ (NSString *)pathForLevelDatAtIndex:(int)worldIndex
+{
+	return [[[self class] pathForWorldAtIndex:worldIndex] stringByAppendingPathComponent:@"level.dat"];
+}
++ (NSString *)pathForSessionLockAtIndex:(int)worldIndex
+{
+	return [[[self class] pathForWorldAtIndex:worldIndex] stringByAppendingPathComponent:@"session.lock"];
+}
+
+
+
++ (NSData *)dataWithInt64:(int64_t)v
+{
+	NSMutableData *data = [NSMutableData data];
+	uint32_t v0 = htonl(v >> 32);
+	uint32_t v1 = htonl(v);
+	[data appendBytes:&v0 length:4];
+	[data appendBytes:&v1 length:4];
+	return data;
+}
++ (int64_t)int64FromData:(NSData *)data
+{
+	uint8_t *bytes = (uint8_t *)[data bytes];
+	uint64_t n = ntohl(*((uint32_t *)(bytes + 0)));
+	n <<= 32;
+	n += ntohl(*((uint32_t *)(bytes + 4)));
+	return n;
+}
+
++ (int64_t)writeToSessionLockAtIndex:(int)worldIndex
+{
+	NSString *path = [IJMinecraftLevel pathForSessionLockAtIndex:worldIndex];
+	NSDate *now = [NSDate date];
+	NSTimeInterval interval = [now timeIntervalSince1970];
+	int64_t milliseconds = (int64_t)(interval * 1000.0);
+	// write as number of milliseconds
+	
+	NSData *data = [IJMinecraftLevel dataWithInt64:milliseconds];
+	[data writeToFile:path atomically:YES];
+	
+	return milliseconds;
+}
+
++ (BOOL)checkSessionLockAtIndex:(int)worldIndex value:(int64_t)checkValue
+{
+	NSString *path = [IJMinecraftLevel pathForSessionLockAtIndex:worldIndex];
+	NSData *data = [NSData dataWithContentsOfFile:path];
+	
+	int64_t milliseconds = [IJMinecraftLevel int64FromData:data];
+	return checkValue == milliseconds;
+}
+
+
 @end

+ 14 - 0
InsideJob.xcodeproj/project.pbxproj

@@ -15,6 +15,9 @@
 		668B27AF125D8EFD0060BF71 /* IJMinecraftLevel.m in Sources */ = {isa = PBXBuildFile; fileRef = 668B27AE125D8EFD0060BF71 /* IJMinecraftLevel.m */; };
 		668B27B2125D8F8E0060BF71 /* IJInventoryItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 668B27B1125D8F8E0060BF71 /* IJInventoryItem.m */; };
 		668B27F2125D963F0060BF71 /* IJInventoryWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 668B27F1125D963F0060BF71 /* IJInventoryWindowController.m */; };
+		668B290F125E40560060BF71 /* Items.csv in Resources */ = {isa = PBXBuildFile; fileRef = 668B28D8125E370A0060BF71 /* Items.csv */; };
+		668B2979125E5DD40060BF71 /* IJItemPickerWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 668B2978125E5DD40060BF71 /* IJItemPickerWindowController.m */; };
+		668B297C125E5DF00060BF71 /* ItemPicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = 668B297B125E5DF00060BF71 /* ItemPicker.xib */; };
 		8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
 		8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
 		8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
@@ -42,6 +45,10 @@
 		668B27B1125D8F8E0060BF71 /* IJInventoryItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IJInventoryItem.m; sourceTree = "<group>"; };
 		668B27F0125D963F0060BF71 /* IJInventoryWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IJInventoryWindowController.h; sourceTree = "<group>"; };
 		668B27F1125D963F0060BF71 /* IJInventoryWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IJInventoryWindowController.m; sourceTree = "<group>"; };
+		668B28D8125E370A0060BF71 /* Items.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Items.csv; sourceTree = "<group>"; };
+		668B2977125E5DD40060BF71 /* IJItemPickerWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IJItemPickerWindowController.h; sourceTree = "<group>"; };
+		668B2978125E5DD40060BF71 /* IJItemPickerWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IJItemPickerWindowController.m; sourceTree = "<group>"; };
+		668B297B125E5DF00060BF71 /* ItemPicker.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ItemPicker.xib; sourceTree = "<group>"; };
 		8D1107310486CEB800E47090 /* InsideJob-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "InsideJob-Info.plist"; sourceTree = "<group>"; };
 		8D1107320486CEB800E47090 /* InsideJob.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = InsideJob.app; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
@@ -125,6 +132,8 @@
 				8D1107310486CEB800E47090 /* InsideJob-Info.plist */,
 				089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
 				1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
+				668B297B125E5DF00060BF71 /* ItemPicker.xib */,
+				668B28D8125E370A0060BF71 /* Items.csv */,
 			);
 			name = Resources;
 			sourceTree = "<group>";
@@ -165,6 +174,8 @@
 			children = (
 				668B27F0125D963F0060BF71 /* IJInventoryWindowController.h */,
 				668B27F1125D963F0060BF71 /* IJInventoryWindowController.m */,
+				668B2977125E5DD40060BF71 /* IJItemPickerWindowController.h */,
+				668B2978125E5DD40060BF71 /* IJItemPickerWindowController.m */,
 			);
 			name = Interface;
 			sourceTree = "<group>";
@@ -224,6 +235,8 @@
 			files = (
 				8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
 				1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
+				668B290F125E40560060BF71 /* Items.csv in Resources */,
+				668B297C125E5DF00060BF71 /* ItemPicker.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -241,6 +254,7 @@
 				668B27AF125D8EFD0060BF71 /* IJMinecraftLevel.m in Sources */,
 				668B27B2125D8F8E0060BF71 /* IJInventoryItem.m in Sources */,
 				668B27F2125D963F0060BF71 /* IJInventoryWindowController.m in Sources */,
+				668B2979125E5DD40060BF71 /* IJItemPickerWindowController.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

+ 1108 - 0
ItemPicker.xib

@@ -0,0 +1,1108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+	<data>
+		<int key="IBDocument.SystemTarget">1060</int>
+		<string key="IBDocument.SystemVersion">10F569</string>
+		<string key="IBDocument.InterfaceBuilderVersion">804</string>
+		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">804</string>
+		</object>
+		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<integer value="15"/>
+		</object>
+		<object class="NSArray" key="IBDocument.PluginDependencies">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSArray" key="dict.sortedKeys" id="0">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+			</object>
+			<object class="NSMutableArray" key="dict.values">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+			</object>
+		</object>
+		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSCustomObject" id="1001">
+				<string key="NSClassName">IJItemPickerWindowController</string>
+			</object>
+			<object class="NSCustomObject" id="1003">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="1004">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSWindowTemplate" id="416152146">
+				<int key="NSWindowStyleMask">27</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{577, 347}, {249, 286}}</string>
+				<int key="NSWTFlags">-1535637504</int>
+				<string key="NSWindowTitle">Item Picker</string>
+				<string key="NSWindowClass">NSPanel</string>
+				<nil key="NSViewClass"/>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<object class="NSView" key="NSWindowView" id="303777755">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<object class="NSMutableArray" key="NSSubviews">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSSearchField" id="801226773">
+							<reference key="NSNextResponder" ref="303777755"/>
+							<int key="NSvFlags">266</int>
+							<string key="NSFrame">{{6, 256}, {237, 22}}</string>
+							<reference key="NSSuperview" ref="303777755"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSSearchFieldCell" key="NSCell" id="88158655">
+								<int key="NSCellFlags">343014976</int>
+								<int key="NSCellFlags2">272630848</int>
+								<string key="NSContents"/>
+								<object class="NSFont" key="NSSupport" id="127191741">
+									<string key="NSName">LucidaGrande</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">1044</int>
+								</object>
+								<reference key="NSControlView" ref="801226773"/>
+								<bool key="NSDrawsBackground">YES</bool>
+								<int key="NSTextBezelStyle">1</int>
+								<object class="NSColor" key="NSBackgroundColor">
+									<int key="NSColorSpace">6</int>
+									<string key="NSCatalogName">System</string>
+									<string key="NSColorName">textBackgroundColor</string>
+									<object class="NSColor" key="NSColor" id="837009434">
+										<int key="NSColorSpace">3</int>
+										<bytes key="NSWhite">MQA</bytes>
+									</object>
+								</object>
+								<object class="NSColor" key="NSTextColor" id="905728987">
+									<int key="NSColorSpace">6</int>
+									<string key="NSCatalogName">System</string>
+									<string key="NSColorName">controlTextColor</string>
+									<object class="NSColor" key="NSColor" id="209838333">
+										<int key="NSColorSpace">3</int>
+										<bytes key="NSWhite">MAA</bytes>
+									</object>
+								</object>
+								<object class="NSButtonCell" key="NSSearchButtonCell">
+									<int key="NSCellFlags">130560</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">search</string>
+									<reference key="NSControlView" ref="801226773"/>
+									<string key="NSAction">_searchFieldSearch:</string>
+									<reference key="NSTarget" ref="88158655"/>
+									<int key="NSButtonFlags">138690815</int>
+									<int key="NSButtonFlags2">0</int>
+									<string key="NSKeyEquivalent"/>
+									<int key="NSPeriodicDelay">400</int>
+									<int key="NSPeriodicInterval">75</int>
+								</object>
+								<object class="NSButtonCell" key="NSCancelButtonCell">
+									<int key="NSCellFlags">130560</int>
+									<int key="NSCellFlags2">0</int>
+									<string key="NSContents">clear</string>
+									<object class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
+										<bool key="EncodedWithXMLCoder">YES</bool>
+										<object class="NSMutableDictionary">
+											<bool key="EncodedWithXMLCoder">YES</bool>
+											<object class="NSArray" key="dict.sortedKeys">
+												<bool key="EncodedWithXMLCoder">YES</bool>
+												<string>AXDescription</string>
+												<string>NSAccessibilityEncodedAttributesValueType</string>
+											</object>
+											<object class="NSMutableArray" key="dict.values">
+												<bool key="EncodedWithXMLCoder">YES</bool>
+												<string>cancel</string>
+												<integer value="1"/>
+											</object>
+										</object>
+									</object>
+									<reference key="NSControlView" ref="801226773"/>
+									<string key="NSAction">_searchFieldCancel:</string>
+									<reference key="NSTarget" ref="88158655"/>
+									<int key="NSButtonFlags">138690815</int>
+									<int key="NSButtonFlags2">0</int>
+									<string key="NSKeyEquivalent"/>
+									<int key="NSPeriodicDelay">400</int>
+									<int key="NSPeriodicInterval">75</int>
+								</object>
+								<int key="NSMaximumRecents">255</int>
+								<bytes key="NSSearchFieldFlags">CAAAAA</bytes>
+							</object>
+						</object>
+						<object class="NSScrollView" id="1009868452">
+							<reference key="NSNextResponder" ref="303777755"/>
+							<int key="NSvFlags">274</int>
+							<object class="NSMutableArray" key="NSSubviews">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSClipView" id="837139061">
+									<reference key="NSNextResponder" ref="1009868452"/>
+									<int key="NSvFlags">2304</int>
+									<object class="NSMutableArray" key="NSSubviews">
+										<bool key="EncodedWithXMLCoder">YES</bool>
+										<object class="NSTableView" id="69945491">
+											<reference key="NSNextResponder" ref="837139061"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrameSize">{249, 247}</string>
+											<reference key="NSSuperview" ref="837139061"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="_NSCornerView" key="NSCornerView">
+												<nil key="NSNextResponder"/>
+												<int key="NSvFlags">-2147483392</int>
+												<string key="NSFrame">{{224, 0}, {16, 17}}</string>
+											</object>
+											<object class="NSMutableArray" key="NSTableColumns">
+												<bool key="EncodedWithXMLCoder">YES</bool>
+												<object class="NSTableColumn" id="457520173">
+													<string key="NSIdentifier">itemId</string>
+													<double key="NSWidth">50</double>
+													<double key="NSMinWidth">40</double>
+													<double key="NSMaxWidth">1000</double>
+													<object class="NSTableHeaderCell" key="NSHeaderCell">
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">67110912</int>
+														<string key="NSContents"/>
+														<object class="NSFont" key="NSSupport" id="26">
+															<string key="NSName">LucidaGrande</string>
+															<double key="NSSize">11</double>
+															<int key="NSfFlags">3100</int>
+														</object>
+														<object class="NSColor" key="NSBackgroundColor">
+															<int key="NSColorSpace">3</int>
+															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+														</object>
+														<object class="NSColor" key="NSTextColor" id="150063763">
+															<int key="NSColorSpace">6</int>
+															<string key="NSCatalogName">System</string>
+															<string key="NSColorName">headerTextColor</string>
+															<reference key="NSColor" ref="209838333"/>
+														</object>
+													</object>
+													<object class="NSTextFieldCell" key="NSDataCell" id="977609724">
+														<int key="NSCellFlags">337772096</int>
+														<int key="NSCellFlags2">67110912</int>
+														<string key="NSContents">Text Cell</string>
+														<reference key="NSSupport" ref="127191741"/>
+														<reference key="NSControlView" ref="69945491"/>
+														<object class="NSColor" key="NSBackgroundColor" id="408361888">
+															<int key="NSColorSpace">6</int>
+															<string key="NSCatalogName">System</string>
+															<string key="NSColorName">controlBackgroundColor</string>
+															<object class="NSColor" key="NSColor">
+																<int key="NSColorSpace">3</int>
+																<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+															</object>
+														</object>
+														<reference key="NSTextColor" ref="905728987"/>
+													</object>
+													<int key="NSResizingMask">3</int>
+													<bool key="NSIsResizeable">YES</bool>
+													<reference key="NSTableView" ref="69945491"/>
+												</object>
+												<object class="NSTableColumn" id="889939254">
+													<string key="NSIdentifier">name</string>
+													<double key="NSWidth">191</double>
+													<double key="NSMinWidth">10</double>
+													<double key="NSMaxWidth">3.4028234663852886e+38</double>
+													<object class="NSTableHeaderCell" key="NSHeaderCell">
+														<int key="NSCellFlags">75628096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents"/>
+														<reference key="NSSupport" ref="26"/>
+														<object class="NSColor" key="NSBackgroundColor">
+															<int key="NSColorSpace">6</int>
+															<string key="NSCatalogName">System</string>
+															<string key="NSColorName">headerColor</string>
+															<reference key="NSColor" ref="837009434"/>
+														</object>
+														<reference key="NSTextColor" ref="150063763"/>
+													</object>
+													<object class="NSTextFieldCell" key="NSDataCell" id="211376469">
+														<int key="NSCellFlags">337772096</int>
+														<int key="NSCellFlags2">2048</int>
+														<string key="NSContents">Text Cell</string>
+														<reference key="NSSupport" ref="127191741"/>
+														<reference key="NSControlView" ref="69945491"/>
+														<reference key="NSBackgroundColor" ref="408361888"/>
+														<reference key="NSTextColor" ref="905728987"/>
+													</object>
+													<int key="NSResizingMask">3</int>
+													<bool key="NSIsResizeable">YES</bool>
+													<bool key="NSIsEditable">YES</bool>
+													<reference key="NSTableView" ref="69945491"/>
+												</object>
+											</object>
+											<double key="NSIntercellSpacingWidth">3</double>
+											<double key="NSIntercellSpacingHeight">2</double>
+											<reference key="NSBackgroundColor" ref="837009434"/>
+											<object class="NSColor" key="NSGridColor">
+												<int key="NSColorSpace">6</int>
+												<string key="NSCatalogName">System</string>
+												<string key="NSColorName">gridColor</string>
+												<object class="NSColor" key="NSColor">
+													<int key="NSColorSpace">3</int>
+													<bytes key="NSWhite">MC41AA</bytes>
+												</object>
+											</object>
+											<double key="NSRowHeight">17</double>
+											<int key="NSTvFlags">1444937728</int>
+											<reference key="NSDelegate"/>
+											<reference key="NSDataSource"/>
+											<int key="NSColumnAutoresizingStyle">0</int>
+											<int key="NSDraggingSourceMaskForLocal">15</int>
+											<int key="NSDraggingSourceMaskForNonLocal">0</int>
+											<bool key="NSAllowsTypeSelect">YES</bool>
+											<int key="NSTableViewDraggingDestinationStyle">0</int>
+										</object>
+									</object>
+									<string key="NSFrame">{{1, 1}, {249, 247}}</string>
+									<reference key="NSSuperview" ref="1009868452"/>
+									<reference key="NSNextKeyView" ref="69945491"/>
+									<reference key="NSDocView" ref="69945491"/>
+									<reference key="NSBGColor" ref="408361888"/>
+									<int key="NScvFlags">4</int>
+								</object>
+								<object class="NSScroller" id="715135007">
+									<reference key="NSNextResponder" ref="1009868452"/>
+									<int key="NSvFlags">-2147483392</int>
+									<string key="NSFrame">{{224, 17}, {15, 102}}</string>
+									<reference key="NSSuperview" ref="1009868452"/>
+									<reference key="NSTarget" ref="1009868452"/>
+									<string key="NSAction">_doScroller:</string>
+									<double key="NSPercent">0.99596774193548387</double>
+								</object>
+								<object class="NSScroller" id="631494429">
+									<reference key="NSNextResponder" ref="1009868452"/>
+									<int key="NSvFlags">-2147483392</int>
+									<string key="NSFrame">{{-100, -100}, {145, 15}}</string>
+									<reference key="NSSuperview" ref="1009868452"/>
+									<int key="NSsFlags">1</int>
+									<reference key="NSTarget" ref="1009868452"/>
+									<string key="NSAction">_doScroller:</string>
+									<double key="NSPercent">0.996</double>
+								</object>
+							</object>
+							<string key="NSFrame">{{-1, -1}, {251, 249}}</string>
+							<reference key="NSSuperview" ref="303777755"/>
+							<reference key="NSNextKeyView" ref="837139061"/>
+							<int key="NSsFlags">530</int>
+							<reference key="NSVScroller" ref="715135007"/>
+							<reference key="NSHScroller" ref="631494429"/>
+							<reference key="NSContentView" ref="837139061"/>
+							<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
+						</object>
+					</object>
+					<string key="NSFrameSize">{249, 286}</string>
+					<reference key="NSSuperview"/>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<double key="NSContentBorderThicknessMaxY">27</double>
+			</object>
+		</object>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<object class="NSMutableArray" key="connectionRecords">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">window</string>
+						<reference key="source" ref="1001"/>
+						<reference key="destination" ref="416152146"/>
+					</object>
+					<int key="connectionID">5</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="416152146"/>
+						<reference key="destination" ref="1001"/>
+					</object>
+					<int key="connectionID">6</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">initialFirstResponder</string>
+						<reference key="source" ref="416152146"/>
+						<reference key="destination" ref="801226773"/>
+					</object>
+					<int key="connectionID">9</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">tableView</string>
+						<reference key="source" ref="1001"/>
+						<reference key="destination" ref="69945491"/>
+					</object>
+					<int key="connectionID">19</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">dataSource</string>
+						<reference key="source" ref="69945491"/>
+						<reference key="destination" ref="1001"/>
+					</object>
+					<int key="connectionID">20</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="69945491"/>
+						<reference key="destination" ref="1001"/>
+					</object>
+					<int key="connectionID">21</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">updateFilter:</string>
+						<reference key="source" ref="1001"/>
+						<reference key="destination" ref="801226773"/>
+					</object>
+					<int key="connectionID">22</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="801226773"/>
+						<reference key="destination" ref="69945491"/>
+					</object>
+					<int key="connectionID">23</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="69945491"/>
+						<reference key="destination" ref="801226773"/>
+					</object>
+					<int key="connectionID">24</int>
+				</object>
+			</object>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<object class="NSArray" key="orderedObjects">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<reference key="object" ref="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="1001"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="1003"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="1004"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">3</int>
+						<reference key="object" ref="416152146"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="303777755"/>
+						</object>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="303777755"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="801226773"/>
+							<reference ref="1009868452"/>
+						</object>
+						<reference key="parent" ref="416152146"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">7</int>
+						<reference key="object" ref="801226773"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="88158655"/>
+						</object>
+						<reference key="parent" ref="303777755"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="88158655"/>
+						<reference key="parent" ref="801226773"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">10</int>
+						<reference key="object" ref="1009868452"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="715135007"/>
+							<reference ref="631494429"/>
+							<reference ref="69945491"/>
+						</object>
+						<reference key="parent" ref="303777755"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="715135007"/>
+						<reference key="parent" ref="1009868452"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="631494429"/>
+						<reference key="parent" ref="1009868452"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">13</int>
+						<reference key="object" ref="69945491"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="457520173"/>
+							<reference ref="889939254"/>
+						</object>
+						<reference key="parent" ref="1009868452"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">15</int>
+						<reference key="object" ref="457520173"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="977609724"/>
+						</object>
+						<reference key="parent" ref="69945491"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">18</int>
+						<reference key="object" ref="977609724"/>
+						<reference key="parent" ref="457520173"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">26</int>
+						<reference key="object" ref="889939254"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="211376469"/>
+						</object>
+						<reference key="parent" ref="69945491"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">27</int>
+						<reference key="object" ref="211376469"/>
+						<reference key="parent" ref="889939254"/>
+					</object>
+				</object>
+			</object>
+			<object class="NSMutableDictionary" key="flattenedProperties">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="NSArray" key="dict.sortedKeys">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<string>10.IBPluginDependency</string>
+					<string>11.IBPluginDependency</string>
+					<string>12.IBPluginDependency</string>
+					<string>13.IBPluginDependency</string>
+					<string>15.IBPluginDependency</string>
+					<string>18.IBPluginDependency</string>
+					<string>3.IBEditorWindowLastContentRect</string>
+					<string>3.IBPluginDependency</string>
+					<string>3.IBWindowTemplateEditedContentRect</string>
+					<string>3.NSWindowTemplate.visibleAtLaunch</string>
+					<string>4.IBPluginDependency</string>
+					<string>7.IBPluginDependency</string>
+					<string>8.IBPluginDependency</string>
+				</object>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{538, 134}, {249, 286}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{538, 134}, {249, 286}}</string>
+					<boolean value="YES"/>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+				</object>
+			</object>
+			<object class="NSMutableDictionary" key="unlocalizedProperties">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<reference key="dict.sortedKeys" ref="0"/>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+				</object>
+			</object>
+			<nil key="activeLocalization"/>
+			<object class="NSMutableDictionary" key="localizations">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<reference key="dict.sortedKeys" ref="0"/>
+				<object class="NSMutableArray" key="dict.values">
+					<bool key="EncodedWithXMLCoder">YES</bool>
+				</object>
+			</object>
+			<nil key="sourceID"/>
+			<int key="maxID">27</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBPartialClassDescription">
+					<string key="className">IJItemPickerWindowController</string>
+					<string key="superclassName">NSWindowController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>itemActivated:</string>
+							<string>updateFilter:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>itemActivated:</string>
+							<string>updateFilter:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">itemActivated:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">updateFilter:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">tableView</string>
+						<string key="NS.object.0">NSTableView</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">tableView</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">tableView</string>
+							<string key="candidateClassName">NSTableView</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">IJItemPickerWindowController.h</string>
+					</object>
+				</object>
+			</object>
+			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSActionCell</string>
+					<string key="superclassName">NSCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="100318845">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="543396748">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="559880067">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSCell</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSControl</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="648640530">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSFormatter</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenu</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1003824937">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="100318845"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="543396748"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="559880067"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="648640530"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="1003824937"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="947378056">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="662952195">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSPanel</string>
+					<string key="superclassName">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSScrollView</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSScrollView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSScroller</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSScroller.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSSearchField</string>
+					<string key="superclassName">NSTextField</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSearchField.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSSearchFieldCell</string>
+					<string key="superclassName">NSTextFieldCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSearchFieldCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTableColumn</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTableColumn.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTableView</string>
+					<string key="superclassName">NSControl</string>
+					<reference key="sourceIdentifier" ref="947378056"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTextField</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTextField.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTextFieldCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<string key="superclassName">NSResponder</string>
+					<reference key="sourceIdentifier" ref="662952195"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindowController</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">showWindow:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">showWindow:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">showWindow:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
+					</object>
+				</object>
+			</object>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1060" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3000" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">InsideJob.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+	</data>
+</archive>

+ 163 - 0
Items.csv

@@ -0,0 +1,163 @@
+1,Stone
+2,Grass
+3,Dirt
+4,Cobblestone
+5,Wood
+6,Sapling
+7,Bedrock
+8,Water
+9,Stationary Water
+10,Lava
+11,Stationary Lava
+12,Sand
+13,Gravel
+14,Gold Ore
+15,Iron Ore
+16,Coal Ore
+17,Log
+18,Leaves
+19,Sponge
+20,Glass
+35,White Cloth
+37,Yellow Flower
+38,Red Rose
+39,Brown Mushroom
+40,Red Mushroom
+41,Gold Block
+42,Iron Block
+43,Double Step
+44,Step
+45,Brick
+46,TNT
+47,Bookcase
+48,Mossy Cobblestone
+49,Obsidian
+50,Torch
+51,Fire
+52,Mob Spawner
+53,Wooden Stairs
+54,Chest
+55,Redstone Wire
+56,Diamond Ore
+57,Diamond Block
+58,Workbench
+59,Crops
+60,Soil
+61,Furnace
+62,Burning Furnace
+63,Sign Post
+64,Wooden Door
+65,Ladder
+66,Minecart Tracks
+67,Cobblestone Stairs
+68,Wall Sign
+69,Lever
+70,Stone Pressure Plate
+71,Iron Door
+72,Wooden Pressure Plate
+73,Redstone Ore
+74,Glowing Redstone Ore
+75,Redstone Torch (Off)
+76,Redstone Torch (On)
+77,Stone Button
+78,Snow
+79,Ice
+80,Snow Block
+81,Cactus
+82,Clay
+83,Reed
+84,Jukebox
+85,Fence
+256,Iron Spade
+257,Iron Pickaxe
+258,Iron Axe
+259,Flint and Steel
+260,Apple
+261,Bow
+262,Arrow
+263,Coal
+264,Diamond
+265,Iron Ingot
+266,Gold Ingot
+267,Iron Sword
+268,Wooden Sword
+269,Wooden Spade
+270,Wooden Pickaxe
+271,Woord Axe
+272,Stone Sword
+273,Stone Spade
+274,Stone Pickaxe
+275,Stone Axe
+276,Diamond Sword
+277,Diamond Spade
+278,Diamond Pickaxe
+279,Diamond Axe
+280,Stick
+281,Bowl
+282,Mushroom Soup
+283,Gold Sword
+284,Gold Spade
+285,Gold Pickaxe
+286,Gold Axe
+287,String
+288,Feather
+289,Gunpowder
+290,Wooden Hoe
+291,Stone Hoe
+292,Iron Hoe
+293,Diamond Hoe
+294,Gold Hoe
+295,Seeds
+296,Wheat
+297,Bread
+298,Leather Helmet
+299,Leather Chestplate
+300,Leather Pants
+301,Leather Boots
+302,Chainmail Helmet
+303,Chainmail Chestplate
+304,Chainmail Pants
+305,Chainmail Boots
+306,Iron Helmet
+307,Iron Chestplate
+308,Iron Pants
+309,Iron Boots
+310,Diamond Helmet
+311,Diamond Chestplate
+312,Diamond Pants
+313,Diamond Boots
+314,Gold Helmet
+315,Gold Chestplate
+316,Gold Pants
+317,Gold Boots
+318,Flint
+319,Pork
+320,Grilled Pork
+321,Paintings
+322,Golden Apple
+323,Sign
+324,Wooden Door
+325,Bucket
+326,Water Bucket
+327,Lava Bucket
+328,Mine Cart
+329,Saddle
+330,Iron Door
+331,Redstone
+332,Snowball
+333,Boat
+334,Leather
+335,Milk Bucket
+336,Clay Brick
+337,Clay Balls
+338,Reed
+339,Paper
+340,Book
+341,Slime Ball
+342,Storage Minecart
+343,Powered Minecart
+344,Egg
+345,Compass
+346,Fishing Rod
+2256,Gold Record
+2257,Green Record

Some files were not shown because too many files changed in this diff