Thanks, that explains a lot. However, the problem I'm now having is with persistence. Using the World object passed to onBlockPlacedBy, I was able to successfully edit the WorldInfo instances (seemingly all of them) with worldObject.getWorldInfo(). Both the respawn and gui code worked using this command.
After exiting to the menu and reloading the world, however, it was only the respawn code that now recognized this instance of WorldInfo. Here's what I did to accomplish this level of persistence:
added respawn variable initialization to WorldInfo(WorldInfo info) constructor
added respawn variable to NBTTagCompound in updateTagCompound(...) using setBoolean("respawnEnabled", this.respawnEnabled)
added respawn variable initialization to WorldInfo(NBTTagCompound compound) constructor
This clearly works on some level because whatever WorldInfo object NetServerHandler is pulling is correct after saving, but the one GuiGameOver is pulling is not. Most confusingly of all, I tried setting my variable directly to the gui's WorldInfo with Minecraft.getMinecraft().theWorld.getWorldInfo() and it STILL didn't work, even when the WorldInfo object was directly descended from the Minecraft object in both the gui and block code.
There's only one constructor in WorldInfo that I didn't add my property too, and that's the one that takes in a WorldSettings object as an argument. Could this be the one that GuiGameOver is using? If so, how do you recommend I make sure the client knows about my property?