This is my first attempt to building a multi-user game from scratch, which translates to “without any kind of previous knowledge”. It took some time but now I have a decent structure, but still not ready to be populated with content.
This is however currently on hold, since the structure I had adopted was, to put it mildly, crappy. I went back to the beginning, did some readings and started using the Entity-Component approach instead of classic inheritance.
I am, therefore, rewriting this again from scratch. This time, before I spend time in breadth, I will focus on depth. For example, I will start with just a few commands (walking and taking/leaving objects) but make sure that the “task executor” is sensibly integrated with the rest. Same thing for the AI: I want it driven by scripts, not hard-coded in Java, and for that I need a proper system of hooks/triggers/events.
I will also decouple the “textual component” from the engine, and put it in a middle layer between the server and the clients. This means that the server will output updates of the world state to the middleware, which will then translate them in text messages (coloured appropriately) and then send it back to the clients via Telnet or a proprietary protocol, even via websockets for HTML clients.
Not having to deal with string formatting all over the place will definitely be a plus and make the coding more comfortable.