Thank you both so much! This is extremely helpful. It sounds like most of what I want needs to be managed through the DataWatcher and/or custom packets.
Something that's a little strange to me - the DataWatcher can watch Byte, Short, Integer, Float, String, ItemStack and ChunkCoordinates, according to the wiki (http://www.minecraftforge.net/wiki/Datawatcher). Is there a character limit on Strings? The difference between an Integer and a String in terms of data tored is pretty massive - Integers and Floats are 4 bytes, but a String is able to have Integer.MAX_VALUE (2^31) bytes - it is a glorified array of char after all. Not to endorse a Stringly-typed data structure, but couldn't I avoid managing packets by simply packaging my data into a single String? Or perhaps some related clusters of data into a few Strings? Managing manipulation and storage of that String might be as big a hassle as actually learning how to send my own packets, and is ultimately less flexible, but it's just strange to me that any sized Strings could be sent alongside considerably smaller data formats when there's an upper bound on how many things the DataWatcher can manage.