Buildat ======= A Minecraft clone with vast extendability. License: MIT Client ------ Built using Polycode C++. Module code is transfered from the server and run in a safe Lua sandbox. Server ------ Built using C++ with most functionality in RCC++. C++ modules can interface with each other by using Cereal. Module structure ---------------- module |-- client | `-- init.lua << Client-side code |-- server | `-- init.cpp << Server-side code |-- include | `-- api.h << Structures for interfacing between modules `-- data `-- media.png << Data files Module behavior --------------- No script or data transfer to the client is initiated by the core. The module/client/init.lua file is a convention followed by the built-in modules. Modules can be unloaded at runtime. Handling of client-side state is left up to the C++ modules themselves. The first module to be loaded is called __loader. It loads all other modules. C++ modules can use the core/ and interface/ headers. Everything else is considered unstable. C++ modules are run in threads, and everything they can officially access is thread-safe. C++ modules can provide direct library functionality inlined in their include/ files. They cannot export any internally defined functions directly, but they can provide convenience wrappers for event-based interfaces. Startup sequence and what the module should do: - constructor : Initialize everything you can here - init() : Subscribe to events - "core:start" event : Start doing whatever the module wants to actively do Network protocol ---------------- (Type, length, data) tuples on TCP. In the future TLS can be taken into use. A name->type registry is used for determining numeric packet types. Data is freeform. Types 0...99 are reserved for initialization. Core uses cereal's portable binary serialization.