Hacker News new | ask | show | jobs
Minecase – A distributed Minecraft server in .NET Core (github.com)
52 points by JasonWang1027 3134 days ago
4 comments

Looking into the issues: "Add multiplayer support" The only reason I see running a minecraft server is to play multiplayer, so I guess there still is a lot of work to do.
"World Persistence" too. Although to me it's pretty useless without mod support which would be very difficult to do since Forge/Mods are all java obviously.

But a neat side project. Wish them luck.

Since it's distributed, maybe mods can be handled as microservices. Then it wouldn't matter the source language.
For an incomplete list of open (and closed) source alternative Minecraft servers, see: http://wiki.vg/Server_List
How exactly is this distributed? The readme isn't really useful...
I'm not a .Net developer but:

> MineCase is a cross-platform, distributed Minecraft server application developed using .NET Core that uses the Orleans framework.

Orleans seems to be what makes this distributed I think, following the trail leads me to: https://dotnet.github.io/orleans/

> Orleans is a framework that provides a straightforward approach to building distributed high-scale computing applications, without the need to learn and apply complex concurrency or other scaling patterns. It was created by Microsoft Research and designed for use in the cloud.

I can elaborate a little further having extensive experience with Orleans:

- Various parts of this Minecraft server have been built as Grains

- Grains are basically class instances which are activated (instantiated) somewhere in a network

- Orleans has a very clean interface which allows one to use a class instance in regular code as though the instance were stored in local memory. In reality, the class instance may be instantiated on a different machine in the cluster.

- Orleans clusters are generally controlled/private, though I suppose there's nothing stopping someone from building an open network of Orleans silos. That means the distributed aspect of this project is in regards to how the code behaves within a datacenter, in most cases.

This seems to be an exploration of how to build game infrastructure using Orleans. Microsoft has done this with the Halo franchise in their most recent games (Halo 4 + Halo 5.) Seems to work pretty well. On a fast network you can operate on distributed instances of just about anything and have sub-millisecond response times. Mind you, that'll depend greatly on what work is being done.

Think Akka if you're familiar with Java. It's not a port, but both are actor frameworks.
The readme doesn't show these. It needs to be improved.
How distributed are we talking? Could it be distributed over fast internet connections or does it take a data center?
It needs quite fast network between distributed servers in clusters. A distributed database, MongoDB, is used to store Minecraft terrain and entities.
So what is the benefit for distributing this data?

I haven't played multiplayer MC in quite a while, but from what I can remember, lag could be a bummer, so I could see how being able to connect to a low-lag "local" server and yet still play alongside players from around the world with their own low-lag connections would be nice. Yet if someone places a block on the ground and it still takes a couple seconds for that block placement to be distributed to my local server's Mongo instance and sent to me, I don't know how much the user experience is really improved for anyone.

The placed block isn't synchronized to MongoDB immediately. Chunks data is stored in memory, while some players nearby.