MMMinecraft: A Multiserver/Multiplayer plugin and mod

MMMinecraft: An Introduction

Greetings my friends,

I’d like to discuss the idea of a very ambitious mod and plugin (it will by necessity incorporate both, as you will see by reading on) that will if successful enable things I have considered and wanted for nearly as long as I’ve played Minecraft.

I have in mind a system that takes Minecraft mulitplayer in a slightly different direction, allowing people to have their own servers and worlds, while simultaneously being able to discover new places that belong to other people- seamlessly and without the use of artificial and immersion-breaking systems like portals.

Background

From the first time I played Minecraft singleplayer, I was entranced by how endlessly fun it was to build, but I was also captivated by exploring. I would build little benchmarks out of crafting tables, make maps and even had a system of “quads” sort of like the USGS’ system for real-world mapping. I built boats and explored, made little survival huts, and had a great time looking around.

I set up a multiplayer server on Bukkit for me and some friends, and continued exploring there. We built lots of stuff, had (and still have) a great time. Instead of my little in-game maps we used dynmap, and found lots of cool stuff and places to look at.

But there was still something missing. I knew that no matter how far I would travel, how far I pushed the frontiers of what I knew, I wouldn’t meet anyone new or find anything built by someone else. I’d never meet a foreigner or be met by someone who saw me as one.

I kept wishing I could find a road out in the wilderness that led to a real town or city, or come over a hill and find a castle built by someone else.

I wanted to find new lands.

The Problem

By definition in Minecraft, the known world expands from spawn as new chunks are discovered. Whether single-player or multiplayer, you move the frontiers outward, but you never have the experience of pushing across someone else’s frontier into thier known space, where you are the foreign land.

MMMinecraft

I propose a system that allows multiple servers to share the same seed, and each one has its own “domain”, an area of the map. I’m thinking each one would have a very large area by default. Servers would be organized into networks, sharing certain information between them, but generally only on bordering domains.

Domains

A domain is that area of the Minecraft world “owned” by a given server. It is the primary owner of that area, its chunks and all the actions within it. Updates to a domain are shared to the bordering domains, so each server maintains its own information and is informed about updates to the eight domains around it (this has a salutary side-effect: No matter how big a world gets, you only need a server that can handle the data for nine domains).

Domains that border one another share information about chunk updates and changes. When a player crosses a border, they are seamlessly transferred to the server that “owns” that domain: they’ve crossed into a new land. If a server goes down, the bordering servers have all the chunk information, so if a player crosses into a “dead” domain, for example, they don’t just get disconnected. Questions about what they can actually do in “dead” domains are open, but resolvable, I believe.

Domain Networks

Networks of domains would be set up by like-minded server operators. They would share the same world seed and establish rules for joining the domain network as well as what happens when a server leaves or goes down permanently. Since chunk updates and other information would be shared, a server leaving isn’t the end of the world.

Other issues that would need to be established at the domain network level are things like required/banned/optional plugins and mods, player behavior rules, and so forth.

One thing I love about the concept is the possibility of people running into other domains where all of a sudden magic works (i.e., there’s plugins that create different effects), or different game mechanics (within reason) are at play.

Challenges

Let’s be totally clear here- this is an extremely ambitious concept. EXTREMELY ambitious. The number of technical issues alone are at best mind-boggling (how the hell will it share chunk information and updates between servers? I have no idea yet). However, I think it’s doable. Make no mistake, “doable” doesn’t necessarily mean “practical” or “feasible”. To make this possible will require a lot of hard work over a long period of time involving talented developers.

This post doesn’t even scratch the surface of the technical issues; this is intended to gauge whether people see it as interesting enough to be worth working on.

Why Sponge? This seems like a Forge mod

Well, as I’m envisioning it, this would be a Forge mod that would require the domains to be using Sponge. That would allow domain networks to establish consistent rules about plugins and versions, among other things.

Crazy, huh?

You betcha damn briches it is. Utterly insane. The question is whether it’s the good insane or the stupid kind. I’d like to hear some thoughts on whether this exists within the realm of possibility.

Summary

This is not intended to be anything more than an elevator pitch- I have some ideas about how the code and tech might work, but that’s way down the road, if it ever occurs at all. I’m mostly right now throwing out the broad strokes and seeing what people think of the idea in general.

Thanks for reading!

12 Likes

Why you do dis I was reading that :<

1 Like

Sorry, I hit ctrl-enter and posted it before I was finished editing. I’ll have it back up in a moment.

2 Likes

That’s a really cool idea. NNNice JJJob!

1 Like

This sounds epic :smile:
Maybe it is an option to have 1 of the worlds of the server connected so you can have multiworlds with one bige epic to explore and two worlds with other things :smiley:

And if there is another option you could try to have the same with a plotme world or so.

1 Like

Well, I don’t see why it wouldn’t work with multiworld plugins- like your own “local” world and the shared dimension. My currently vague concept envisions a Sponge plugin on each server that is the conduit for information about the server’s actions; telling it which worlds to make part of the shared space would be necessary anyway.

That diagram of the “DMZ” zones between server areas is exactly what I was thinking also. Having a buffer between servers and a broker of some kind to handle transitions, you could probably make the jump from server to server pretty seamless for the player.

In the end there will probably need to be a central server broker that handles connections and links the player to the right server, and maybe even handles all the network traffic; I’m not sure. But I’m really glad to hear I’m not the only one who has had similar ideas. :smile:

Instead of running these on different servers, why not have each domain running on a different core on the same server. Not sure how practical this would be because I think it would reach into the heart of Minecraft proper.

Disclaimer: I’m biased towards BungeeCord here, but that’s because I have more experience of that over other server proxy software. Feel free to switch BungeeCord for your favourite proxy software.

I’m thinking on the technical level here - might give you an idea on the potential scale of the idea. However, I reckon it’s doable - and if you are willing to make concessions at first, it might not necessarily be that difficult. If you do go ahead with this - start small - work up. The biggest mistake anyone can make when building a complex system is that they can go too far too fast.


You could probably create a plugin that interacts with BungeeCord or something to handle the transition - but it’d probably be a LOT of work to make it a seamless transition - some changes to any server proxy software would be needed due to changes in server entity IDs and whatnot. It would probably be better, at least at first, if you allowed the “dimension change” screen to be displayed for a small while - then you could probably get away with stock Bungee. Small steps!

Syncing inventories probably won’t be too much effort, if you run a sync job when a player enters the “buffer” before telling Bungee to switch server.

Syncing chunk changes between servers might be a bit more difficult - more on the when to sync. You could just send all block events though, but what happens when you have a server offline? Do you cache what needs sending?

Switching server should be easy - all you need to send is a signal to the proxy - Bungee makes that easy through plugin channels - I don’t know about other proxies. You just need to send a signal ahead of time to the target server to tell it where to log the player into. A plugin somewhere called Transporter did this with gates on servers through Bukkit, all you’d need to do is extend this concept to have a fluid boundary instead of a fixed point.

Ultimately, I don’t think this would be horribly difficult to do. It’d be a lot of work, and you need to think about it rather than just write code first. Make sure you think about what you need it to do before you write a single line - and it’ll seem a lot easier.

It sounds a very interesting project though. I’d be interested to see where it leads to if you go ahead with it.

3 Likes

I agree entirely, and thanks for the tip about BungeeCord, I’ll look into it. I’m very much of the “design first, code later” school of development, so as this matures and more people help refine the idea, I’ll have a place to start for design documents. Also, I have a lot more to learn about Forge modding in general- my background is very extensive as a coder, but not so much specifically with the toolsets and framework of Forge.

The sync issues and brokering between servers are very much open questions. I have some thoughts on them, but I’m not yet sure what will be most efficient or practical.

See, I wonder if you’d get away with it just as a Sponge plugin coupled with Bungee - if it provides the player move and block events, and a way to access the inventory, for the basics at least, all you’d need to have a custom connection via another socket to send the extra data. Corners would probably be the more problematic “edge” case* - you’d need to potentially connect to three other servers. Maybe you could slightly mitigate that by staggering the rows a bit, so only if a player is in corner, only two servers are potential targets, not three.


*Sorry, couldn’t resist that pun

1 Like

Also a good idea worth exploring- thanks!

1 Like

“The question is whether it’s the good insane or the stupid kind…”
Definitely good insane i love this idea

They would have to have knowledge - same map seeds, same plugins, same mods, etc. Essentially you are creating a virtual world that spans multiple hosts. Essentially some sort of active-active cluster. I may be misinterpreting the intent, but that’s the way I read it.

This is awesome idea! With Bungee it should also be doable.

Only problems which I can imagine do happen if some servers have custom items/blocks. They may easily use protocol hacks to allow vanilla clients connect… But it will probably freak out if the player changes server. And what about custom resource packs?

Mesh-work. Not a bad idea. not bad at all

ok so let me see if i did my math right:

Sponge + MeshWork = faster servers

nothing is perfect, but close enough is always atainable

1 Like

Hey folks- thanks for all the great comments and feedback. I’m sorry I didn’t get back to this sooner; I went to the beach yesterday and promptly broke my ankle on the trip down to the trail, so I haven’t really been at my computer much. :smile:

However, I’m going to spend some time over the next few days coming up with some early design documents focusing on features and exploring some options like BungeeCord as possible starting points. A long way to go, but I’m excited that there seems to be some support behind the concept.

Thank you!

I know this thread is “long” forgotten, pitty enough (sep14 latest reply)
But i would love to see if this gets a real life or atleast a real try :smile:.

Hopefully @Cyclometh is still thinking about it :smiley:.