BlockBook is a desktop app built for Minecraft players to manage Minecraft gamer contacts, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, BlockBook can get your contact management tasks done faster than traditional GUI apps.
BlockBook makes it easy to manage the contacts of other gamers you meet on servers, allowing you to manage contacts through not just names, but other gaming attributes too.
Ensure you have Java 17 or above installed in your Computer.
You can check what Java version you have by opening a command terminal in the same location you put BlockBook in, and then running the command java -version.
Mac users: Ensure you have the precise JDK version prescribed here.
Download the latest blockbook.jar file from here.
Copy the file to the folder you want to use as the home folder for BlockBook.
Double click blockbook.jar file to open BlockBook. Alternatively, open a command terminal in the same location you put BlockBook in, and use the java -jar blockbook.jar command to run the application.
A GUI similar to the below should appear in a few seconds.

Type the command in the command box and press Enter to execute it. e.g. typing ? or help and pressing Enter will open the built-in help menu, where you can view all the commands available.
Some example commands you can try:
list : Lists all contacts.
add g/JD910 n/John Doe : Adds a contact named John Doe to BlockBook with the gamertag JD910.
d 3 : Deletes the 3rd contact shown in the current list. d is a shortcut for delete.
clear : Deletes all contacts.
exit : Exits the app.
Refer to the Features below for details of each command.
Notes about the command format:
Words in UPPER_CASE are the parameters to be supplied by the user.
add name/NAME, NAME is a parameter which can be used as add name/John Doe.Characters inside brackets () can be typed in place of the full command or full argument prefix.
(d)elete means you can type either delete or d.(g)amertag/ means you can type either gamertag/ or g/.add g/JD910 name/John Doe is acceptable.Items in square brackets are optional.
name/NAME [t/TAG] can be used as name/John Doe t/friend or as name/John Doe.Items with … after them can be used multiple times including zero times.
GAMER_INDEX… can be used as (i.e. left blank), 1, 1 2 3 etc.Parameters can be in any order.
e.g. if the command specifies name/NAME gamertag/GAMERTAG, gamertag/GAMERTAG name/NAME is also acceptable.
Extraneous parameters for commands that do not take in parameters (such as help or exit) will be ignored.
e.g. if the command specifies help 123, it will be interpreted as help.
If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.
Input normalization rules
For prefixed values, BlockBook may normalize user input before validation.
General rules for prefixed values:
Additional normalization for stored field values in commands such as add and edit:
name/, phone/, country/, and group/, repeated internal spaces are collapsed into a single space before validation and storage.name/ and country/, capitalization is also standardized before storage.note/, leading and trailing spaces are ignored, but internal spaces are not collapsed in the same way.As a result:
n/ are invalid.p/ - is trimmed to p/-, so it is treated as starting with a hyphen.helpOpens a new window listing all available commands.
Format: help or ?
addAdds a gamer to BlockBook with a required gamertag and optional details such as name, phone number, email address, server, region, country, and notes.
Format: (a)dd (g)amertag/GAMERTAG [(n)ame/NAME] [(p)hone/PHONE] [(e)mail/EMAIL] [(s)erver/SERVER] [(c)ountry/COUNTRY] [(r)egion/REGION] [note/NOTE]
Examples:
a g/ilovesteve n/Herobrine p/99999 e/brine@gmail.com s/127.0.0.1:8080 c/Singapore r/ASIA note/I hate steveadd gamertag/Notch name/Notch phone/+12345 email/notch@example.com server/mc.example.net:25565 country/Malaysia region/ASIA note/Usually plays survivalTip: Only gamertag/ is required. All other fields are optional.
gamertag/: letters, numbers, underscores only, max 50 characters.name/: letters, spaces, hyphens, apostrophes only, max 50 characters.phone/: optional leading +, digits/spaces/hyphens, at least 3 digits, at most 15 digits, max 30 characters.email/: must be a valid email in the format local-part@domain, where the domain contains at least two labels separated by periods (e.g. example.com).server/: letters, numbers, ., -, :, max 50 characters.country/: letters, spaces, hyphens only, max 50 characters.region/: accepts NA, SA, EU, AFRICA, ASIA, OCEANIA or ME.note/: letters, numbers, spaces, underscores, hyphens, apostrophes, max 50 characters.Common errors you may encounter:
Duplicate gamertag
You cannot add two gamers with the same gamertag.
Gamertags are treated as case-insensitive, so banana, Banana, and BaNaNa are all treated as the same gamertag.
Missing required gamertag
The add command requires a gamertag/ or g/ field.
Example: add n/Steve
Repeated prefixes
Each single-value field can only be entered once in the same add command.
Example: add g/Steve123 g/Alex456
Invalid gamertag format
Gamertags cannot contain spaces or special characters other than underscores.
Example: g/steve boy
Notes:
n/jOhN doE will be stored as John Doe.r/asia will be stored as ASIA.listShows a list of all gamers stored in BlockBook.
Format: (l)ist
find) and any active sort, restoring original order.editEdits an existing gamer stored in BlockBook.
Format: (e)dit GAMER_INDEX [(g)amertag/GAMERTAG] [(n)ame/NAME] [(p)hone/PHONE] [(e)mail/EMAIL] [(s)erver/SERVER] [(c)ountry/COUNTRY] [(r)egion/REGION] [note/NOTE]
GAMER_INDEX. The index refers to the index number shown in the displayed gamer list. The index must be a positive integer 1, 2, 3, ...Examples:
edit 1 p/91234567 e/johndoe@example.come 2 n/Betsy Crower r/ASIAedit 3 g/new_tag s/mc.example.com:25565 c/Singapore note/Alt accountTip: The index refers to the number shown in the current displayed list (after any find, sort or list).
gamertag/: letters, numbers, underscores only, max 50 characters.name/: letters, spaces, hyphens, apostrophes only, max 50 characters.phone/: optional leading +, digits/spaces/hyphens, at least 3 digits, at most 15 digits, max 30 characters.email/: must be a valid email in the format local-part@domain, where the domain contains at least two labels separated by periods (e.g. example.com).server/: letters, numbers, ., -, :, max 50 characters.country/: letters, spaces, hyphens only, max 50 characters.region/: accepts NA, SA, EU, AFRICA, ASIA, OCEANIA or ME.note/: letters, numbers, spaces, underscores, hyphens, apostrophes, max 50 characters.Common errors you may encounter:
Invalid index
The index must be a positive integer within the displayed list.
Examples: edit 0 n/Alex, edit -1 n/Alex, edit 999 n/Alex
No fields provided
At least one field must be specified after the index.
Example: edit 1
Repeated prefixes
Each single-value field can only be entered once in the same edit command.
Example: edit 1 n/Alex n/Bob
Duplicate gamertag
You cannot change a gamertag to one that already exists.
Example: edit 1 g/amy_tag (if another gamer already has amy_tag)
Invalid field values Input must follow the constraints above (e.g., invalid email, region, or server).
Notes:
edit. Use favourite or unfavourite instead.favourite, unfavouriteUpdates a gamer's favourite status via index.
Format: (fav)ourite GAMER_INDEX or (unfav)ourite GAMER_INDEX
GAMER_INDEX. The index refers to the index number shown in the current displayed list (after any find, sort, or list).Examples:
fav 1 Updates the favourite status of the first gamer to favourite.unfavourite 1 Removes the first gamer from favourites.Tip: Use list first if you are unsure of the current index values.
Common errors you may encounter:
Invalid index
The index must be a positive integer within the displayed list.
Examples: favourite 0, unfavourite -1, favourite 999
Already favourite / already not favourite
The command will fail if the contact is already in the requested state.
Examples: favourite 1 when the contact is already a favourite, unfavourite 1 when the contact is not a favourite.
Notes:
findFinds gamers using either general keyword search or specific attribute prefixes. Has 2 formats.
Format 1: (f)ind KEYWORD
KEYWORD, the full phrase is matched as a single substring.find replaces the current filter (it does not stack with previous find results).Format 2: (f)ind [(g)amertag/GAMERTAG] [(n)ame/NAME] [(p)hone/PHONE] [(e)mail/EMAIL] [(gr)oup/GROUP] [(s)erver/SERVER] [(fav)ourite/] [(c)ountry/COUNTRY] [(r)egion/REGION] [note/NOTE]
(n)ame/ means name/ or n/.find replaces the current filter (it does not stack with previous find results).region/ must use a full region value (e.g., ASIA), not a partial substring. This is case-insensitive.Examples:
viewShows the full details of a gamer based on the index shown in the current list.
Format: (v)iew INDEX
INDEX refers to the index number shown in the currently displayed list.Example:
sortSorts gamers by one or more attributes.
Format: (s)ort [(g)amertag/] [(n)ame/] [(p)hone/] [(e)mail/] [(gr)oup/] [(s)erver/] [(fav)ourite/] [(c)ountry/] [(r)egion/] [note/]
g/ and gamertag/ count as the same attribute).name/, not NAME/).name, phone, email, group, server, country, region, note), gamers without that value appear after gamers with a value.favourite/ places favourited gamers before non-favourited gamers.group/ sorts by a gamer's full group set (group names are alphabetically ordered before comparison).find), the filtered results are shown in the active sort order.exit command or by closing the window) ends the session and discards the current sort order. When BlockBook is reopened, gamers are displayed in their original insertion order.list resets sorting within the current session and returns to insertion order.Examples:
sort sorts gamers by gamertag (default).sort name/ sorts gamers by name.s p/ g/ sorts gamers by phone number, then by gamertag.sort favourite/ name/ sorts favourites before non-favourites, then by name within each favourite-status group.Before running sort favourite/ name/:
After running sort favourite/ name/:
In the after screenshot, verify:
Common errors you may encounter:
sort gamertag/ g/
Error shown: Duplicate attribute detected: gamertag. Each attribute can only be specified once.sort rank/
Error shown: Invalid attribute detected: rank. Please provide a valid sort attribute.sort rank/ level/
Error shown: Invalid attributes detected: rank, level. Please provide only valid sort attributes./.
Example: sort name
Error shown: Invalid command format! followed by the sort usage format.sort cannot run when the gamer list is empty.
Error shown: There are no contacts to sort!Notes:
sort name/ p/.note/ has no short alias.find, run list, then run sort again.deleteDeletes the specified gamers from BlockBook.
Format: (d)elete GAMER_INDEX [GAMER_INDEX]...
GAMER_INDEX.delete 2 1 is acceptable.Examples:
list followed by delete 2 deletes the 2nd gamer shown in the list.find Betsy followed by delete 1 2 deletes the 1st and 2nd gamer in the results of the find command.d 2 1 deletes the 1st and 2nd gamer shown in the list.delete 1 2 2 deletes only the 1st and 2nd gamers shown in the list. The 2nd gamer is only deleted once.clearClears all entries from BlockBook.
Format: clear [CONFIRMATION_CODE]
clear without a confirmation code will display a warning and a confirmation code.clear 2v8wua).Examples:
clear shows a warning and a confirmation code (e.g., clear 2v8wua).clear 2v8wua clears all entries if the confirmation code is 2v8wua.groupcreateCreates a new group in BlockBook.
Format: groupcreate GROUP or gc GROUP
Examples:
groupcreate Raid Teamgc Arena TeamgroupeditRenames an existing group by its index in the group list.
Format: groupedit BLOCKBOOK_GROUP_INDEX NEW_GROUP_NAME or ge BLOCKBOOK_GROUP_INDEX NEW_GROUP_NAME
BLOCKBOOK_GROUP_INDEX refers to the index shown in the group list.Raid Team exists, another group cannot be named raid team).Raid Team → raid team) is allowed which is an exception to the rule above.Examples:
groupedit 1 iloveAlexge 2 Arena TeamgroupnukeDeletes a group from BlockBook and removes that group from all gamers associated to it.
Format: groupnuke BLOCKBOOK_GROUP_INDEX [CONFIRMATION_CODE] or gn BLOCKBOOK_GROUP_INDEX [CONFIRMATION_CODE]
Example:
groupnuke 1
BlockBook will prompt you with a confirmation code.groupnuke 1 j5n0w3
Deletes the group and removes it from all gamers.groupaddAdds a specific gamer to a specific group in a single command, by providing the gamer’s index in the current list and the group’s index in the group list.
Format: groupadd GAMER_INDEX BLOCKBOOK_GROUP_INDEX or ga GAMER_INDEX BLOCKBOOK_GROUP_INDEX
GAMER_INDEX refers to the index shown in the current gamer list.BLOCKBOOK_GROUP_INDEX refers to the index shown in the group list.0 0), BlockBook will report both as invalid.Example:
groupadd 2 1 adds the 2nd gamer in the current list to the 1st group in the group list.groupremoveRemoves a specific group from a specific gamer in a single command, by providing the gamer’s index in the current list and the group’s index in that gamer’s group list.
Format: groupremove GAMER_INDEX GAMER_GROUP_INDEX or gr GAMER_INDEX GAMER_GROUP_INDEX
GAMER_INDEX refers to the index shown in the current gamer list.GAMER_GROUP_INDEX refers to the index shown in that gamer’s group list (not the global group list).0 0), BlockBook will report both as invalid.Example:
groupremove 2 1 removes the 1st group from the 2nd gamer in the current list.grouplistLists all groups stored in BlockBook.
Format: grouplist or gl
1. Explorers, 2. Raid Team).Example:
grouplistgroupviewShows all gamers that belong to a specific group, and filters the list to those gamers.
Format: groupview BLOCKBOOK_GROUP_INDEX or gv BLOCKBOOK_GROUP_INDEX
BLOCKBOOK_GROUP_INDEX refers to the index shown in the group list.Example:
groupview 1 shows all gamers in the 1st group.exitExits the program.
Format: exit
BlockBook data is saved to primary storage automatically after any command that changes the data. There is no need to save manually.
BlockBook data is saved automatically as a JSON file [JAR file location]/BlockBook/contacts.json. Advanced users are welcome to update data directly by editing that data file.
Caution:
If your changes to the data file makes its format invalid, BlockBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
Furthermore, certain edits can cause BlockBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.
Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous BlockBook home folder.
preferences.json file created by the application before running the application again.| Action | Format, Examples |
|---|---|
| Help | help, ?e.g., help |
| Add | (a)dd (g)amertag/GAMERTAG [(n)ame/NAME] [(p)hone/PHONE] [(e)mail/EMAIL] [(s)erver/SERVER] [(c)ountry/COUNTRY] [(r)egion/REGION] [note/NOTE]e.g., add g/JamieH n/James Ho |
| Edit | (e)dit GAMER_INDEX [(g)amertag/GAMERTAG] [(n)ame/NAME] [(p)hone/PHONE] [(e)mail/EMAIL] [(s)erver/SERVER] [(c)ountry/COUNTRY] [(r)egion/REGION] [note/NOTE]e.g., edit 2 n/James Lee |
| Favourite | (fav)ourite GAMER_INDEXe.g., favourite 1 |
| Unfavourite | (unfav)ourite GAMER_INDEXe.g., unfavourite 1 |
| List | (l)iste.g., list |
| View | (v)iew GAMER_INDEX e.g., view 2 |
| Sort | (s)ort [(g)amertag/] [(n)ame/] [(p)hone/] [(e)mail/] [(gr)oup/] [(s)erver/] [(fav)ourite/] [(c)ountry/] [(r)egion/] [note/]e.g., sort, sort n/, sort p/ g/ |
| Find | (f)ind KEYWORDe.g., find James(f)ind [(g)amertag/GAMERTAG] [(n)ame/NAME] [(p)hone/PHONE] [(e)mail/EMAIL] [(gr)oup/GROUP] [(s)erver/SERVER] [(fav)ourite/] [(c)ountry/COUNTRY] [(r)egion/REGION] [note/NOTE]e.g., find n/Steve g/Block |
| Group Create | groupcreate GROUP, gc GROUPe.g., gc Raid Team |
| Group List | grouplist, gle.g., grouplist |
| Group Edit | groupedit BLOCKBOOK_GROUP_INDEX NEW_GROUP_NAME, ge BLOCKBOOK_GROUP_INDEX NEW_GROUP_NAMEe.g., ge 1 Arena Team |
| Group Add | groupadd GAMER_INDEX BLOCKBOOK_GROUP_INDEX, ga GAMER_INDEX BLOCKBOOK_GROUP_INDEXe.g., ga 2 1 |
| Group View | groupview BLOCKBOOK_GROUP_INDEX, gv BLOCKBOOK_GROUP_INDEXe.g., gv 1 |
| Group Delete | groupnuke BLOCKBOOK_GROUP_INDEX [CONFIRMATION_CODE], gn BLOCKBOOK_GROUP_INDEX [CONFIRMATION_CODE]e.g., gn 1 abc123 |
| Group Remove | groupremove GAMER_INDEX GAMER_GROUP_INDEX, gr GAMER_INDEX GAMER_GROUP_INDEXe.g., gr 2 1 |
| Delete | (d)elete GAMER_INDEX [GAMER_INDEX]...e.g., delete 3, delete 2 5 |
| Clear | clear [CONFIRMATION_CODE]e.g., clear, clear 2v8wua |
| Exit | exit |