Possible ways to stop/prevent world download?

So I just want to use this thread to shoot around some ideas about how to mitigate players using world download to get the worlds of servers they join. I have not began testing or developing anything at all so this is really just a brainstorm about how to even tackle this problem (if it can be tackled to any meaningful degree).

Some background is that a number of my players have recently been using “mircokroon’s” minecraft world downloader (the source code is actually on GitHub funnily enough: GitHub - mircokroon/minecraft-world-downloader: Download Minecraft worlds, extend server's render distance. 1.12.2 - 1.20.1).

Unfortunately, I was thinking about looking at events like the ChannelRegistrationEvent and maybe doing getChannel() to see if it equaled any world-downloader related strings (ChannelRegistrationEvent (SpongeAPI 7.4.0 API)). But judging by the way this specific world downloader works, it is actually not really a “client mod” but a proxy that sits in-between the client and the server and intercepts chunk data. So my assumption is that this method won’t work.

Some further ideas I have been thinking about:

  1. What if there is a way to prevent chunk data being sent to the client? But then I imagine players will just be playing in an empty void which is obviously just not a solution.

  2. What if we limit the chunk data that is sent to players - and in particular perhaps limiting the “block packets(?)” and limiting these packets to only the blocks that the player can actually see. But that does not really solve the problem as all the good builds are above ground and viewable.

  3. Somehow detecting the “proxy” architecture that mircokroon’s world downloader depends on. I don’t really know how that would be done and frankly it wouldn’t prevent other world downloaders if they operate without that architecture anyway.

I have a feeling this might all be an impossible task and the best I can hope for is to prevent it to the best of my ability but not outright stop it from happening.

The client needs to receive the chunk data to render blocks. So as soon as the client (or a proxy whatever) can see blocks, it can also save the data. You can nicely ask the mod to not save your world but you can’t fully enforce it. It’s like putting an image on your website or any social platform and asking people to not save it.

In the past the only mod able to download worlds was Pokechu22’s WorldDownloader . This mod had a way for the server to nicely ask to not download which would disable the mod. However any programmer could modify the mod sources to circumvent this protection.

Today there are other mods/proxies able to download worlds. You might be able to detect and block some proxies but a well-made proxy is theorically indifferentiable from a client. Supposing you manage to block proxies, there are still client mods that can download worlds (eg Avanatiker’s WorldTools).

So to answer your points:

  1. Sending no data will appear as an empty world for client.

  2. This is what anti-xray plugins do. This will not prevent the world from being downloaded but it will protect a few structures and ores that aren’t supposed to be visible until a player gets close enough or starts digging. This might be good for a survival map but for artistic maps this is mostly useless as most structures are above the surface. If you want to go this way, the anti-xray plugin for Sponge is called Mirage.

  3. Detecting proxy might prevent some downloaders but not all. Also depending on the proxy it might hard or impossible to detect.

1 Like

Saw another plugin which replaced blocks the player could not see with TNT etc.

As someone else said, a player could just disable TNT and then that wouldn’t do much. Wondering about some redstone contraptions etc though, maybe even playing around with NBT data(?), to make it as annoying as possible.