This project is an open-source voxel game that aims to mimic the core mechanics of Minecraft. All source code and assets in this repository are available under the MIT license, though external libraries and resources may carry their own licenses.
- Development period: 2016/01 ~ 2021/12 (hold)
- Engine: Unity 6000.0.23f1
- Language: C# with Unity (.NET Framework 4.5) and standalone server components on .NET 6.0
- Libraries: NGUI 3.x, Sqlite3, JsonObject, Newtonsoft.Json, iTween, FMOD, UniRx, FreeNet, ECM, etc.
- Platforms: Windows PC (Android planned)
- License: MIT
Assets/– Unity game content and scripts.MyAssets/Scriptsincludes modules for AI, GameWorld, Network, Player, UI, pathfinding, and more.SharedProtocol/– ProtoBuf-based message definitions and networking helpers shared between client and server.GameServer/– TCP server usingSharedProtocol,SessionManager, and SQLite persistence.KojeomNetWorkSpace/– legacyKojeomNetnetwork library and test clients.MapGeneratorLib/– standalone library for procedural map generation.CustomToolSet/– editor utilities such asActorGeneratorToolandMapTool.Documents/– design documents and guides (Project_PDD.md).Packages/– Unity package manifest listing engine dependencies.proto/– Protobuf IDL files compiled into C# underAssets/Generated/Protobuf.docs/– networking overview and protocol notes.Config/,ProjectSettings/,UserSettings/– engine configuration files.Recordings/– gameplay capture sessions.
- 2025-10-16: Server status HUD now reports chunk residency totals and peak players (see docs/minecraft_chunk_residency_metrics_plan.md).
- 2025-10-15: ContainerPanelUI scaffolding exposes shared container contents in the Unity HUD (see docs/minecraft_container_feature_plan.md).
- 2025-10-15: Server status telemetry now reports container hash mismatches and the Unity HUD surfaces the counter (see docs/minecraft_feature_masterlist.md).
- 2025-10-12: Container snapshot hash handshake ensures clients resync on mismatches (see docs/minecraft_container_feature_plan.md).
- 2025-10-09: Remote player distance culling and object pooling keeps remote avatars lightweight (see docs/minecraft_feature_execution.md).
- 2025-10-06: Velocity-aware remote player smoothing now clamps server velocity updates and predicts client transforms with damped interpolation (see docs/minecraft_feature_execution.md).
- 2025-10-05: Introduced EntitySyncService and the Unity RemoteEntityManager for server-authoritative remote player interpolation (see docs/minecraft_feature_execution.md).
- 2025-10-03: Added server-side inventory snapshot persistence with SQLite JSON storage and login-time broadcast sync (see docs/minecraft-feature-plan.md).
- 2025-10-04: Unity now consumes time and weather broadcasts for lighting, ambient FX, and HUD readouts (see docs/minecraft_feature_execution.md).
- Unity Engine 6000.0.23f1
- C# / .NET Framework 4.5 (Unity) & .NET 6.0 (server)
- IDE: Visual Studio, Rider, or VS Code
Key packages from Packages/manifest.json include:
com.unity.2d.sprite1.0.0com.unity.2d.tilemap1.0.0com.unity.ai.navigation2.0.8com.unity.collab-proxy2.5.2com.unity.ext.nunit2.0.5com.unity.ide.visualstudio2.0.22com.unity.multiplayer.center1.0.0com.unity.postprocessing3.4.0com.unity.recorder5.1.1com.unity.render-pipelines.core17.0.3com.unity.shadergraph17.0.3com.unity.test-framework1.4.5com.unity.timeline1.8.7com.unity.ugui2.0.0com.unity.xr.legacyinputhelpers2.1.11
See Packages/manifest.json for the full dependency list.
- Clone this repository and open the root folder with Unity 6000.0.23f1.
- Build the standalone .NET components:
dotnet build SharedProtocol/SharedProtocol.csproj dotnet build GameServer/GameServer.csproj dotnet build MapGeneratorLib/MapGeneratorLib.sln
- After installing the .NET SDK, run available tests with
dotnet test. - Custom tools such as the map and actor generators can be opened through their solution files in
CustomToolSet/.
There is a helpful tutorial used at the start of the project:
http://studentgamedev.blogspot.kr/2013/08/unity-voxel-tutorial-part-1-generating.html
- The client and server communicate over a simple framed protocol:
[TotalLength:int][MessageType:int][Payload:protobuf]. - See
docs/networking-protocol.mdfor details, message type IDs, and client integration notes. - Container messages now carry
container_typeandsnapshot_hashfields so clients can validate diffs and request full resyncs on hash mismatches. - Clients now emit
ChunkUnloadNotificationMessagewhen dropping chunks and awaitChunkUnloadAcknowledgeMessageso the server can free residency immediately. - After changing
.protodefinitions runprotoc -I proto --csharp_out=Assets/Generated/Protobuf proto/*.prototo regenerate Unity-side contract classes.
- The server now boots
WorldTimeSystemto pushTimeUpdateMessagesnapshots on login and every tick so late joiners stay in sync. - A companion
WeatherSystemschedules configurableWeatherChangeMessagebroadcasts driven by the newWorldSettingskeys (EnableWeatherCycle,WeatherTickIntervalSeconds,ClearWeatherDurationSeconds,RainWeatherDurationSeconds,StormWeatherDurationSeconds,SnowWeatherDurationSeconds,WeatherStormProbability,WeatherSnowProbability). - Tweak those values in
server-config.jsonbefore launch to control cycle speed, duration, and precipitation mix. - Unity clients should bind these packets to skybox lighting, precipitation FX, and ambient audio (see
docs/minecraft-feature-plan.mdF-10).
EntitySyncServicenow broadcasts player spawn, update, and despawn messages so remote avatars remain authoritative and discoverable by late joiners.- Unity ships a
RemoteEntityManagerMonoBehaviour that subscribes toMinecraftGameClient.EntityUpdated, spawns remote player prefabs (or a fallback capsule), and smooths transforms with configurable lerp speeds. - Attach
RemoteEntityManagerto your network scene root and assign a prefab to override the default capsule. Seedocs/minecraft_feature_execution.md(F-11) for remaining velocity and culling follow-ups.
- The server supports a room-based architecture to scope chat and block broadcasts.
- See
docs/server-rooms-architecture.mdfor lifecycle and integration details.
- Server procedurally generates terrain, ores, caves, dungeons, and vegetation.
- See
docs/world-generation.mdfor the pipeline and extension notes. - Configure the day/night cycle via
WorldSettingsinserver-config.json(InitialWorldTime,InitialDayTime,EnableDayNightCycle,DayNightCycleSecondsPerDay).

