3

For every release of Minecraft, even a minor release, is almost guaranteed to break some plugins or mod.

Why is this so? I am asking this so that we could avoid the same architecture problem as Minecraft.

I mean, why can't the upgrades also support previous version of minecraft? Minecraft requires an EXACT version number match in order to connect. I am pretty sure the protocol can be designed so that clients should ignore unsupported commands.

For example, if there is new block introduced and the client doesn't understand it, they can just fall back to default/dummy block so that players can still play but start seeing dummy wireframe block or so.

Once they start seeing too much of wireframe blocks they know they should upgrade.

jmegaffin
  • 4,923
  • 2
  • 25
  • 46
Rosdi Kasim
  • 139
  • 4
  • 3
    They [Mojang] have no official compatibilities to make - they're not obliged to be compatible with mods and plugins. – ThorinII Dec 07 '13 at 09:11
  • 1
    This incompatibility is not exclusive to Bukkit/mods/plugins. Even Vanilla servers have this backward compatibility issue. Besides, I don't see Bukkit is harming them, it is the opposite. – Rosdi Kasim Dec 07 '13 at 09:45
  • If it is in the same major/minor version group then it will connect fine (though I believe there are some exceptions), i.e. the 1.6.2 client can connect to the 1.6.1 server, but can't connect to 1.7.2's server.

    Several of the bukkit developers are employed BY Mojang (as are some of MCP's), so they certainly are not trying to hurt them.

    The problem is, is that what you want doesn't really work. This is the same in most video games. If there was going to be backwards compatibility to that extent it would require more work that would ultimately worsen the gameplay experience in future versions.

    – Pandacoder Dec 07 '13 at 09:58
  • 1
    Questions like this, that are subjective and speculative, and expect a similar response, are not welcome on this site. This is not a discussion forum, it is a Q&A site. Please read the on-topic FAQ before posting again. – Engineer Dec 07 '13 at 12:37
  • 2
    "Mods" in Minecraft are basically hacks, there's no official Mod-API, so Mojang realistically can't update the game without breaking "plugins" because they don't know which behavior "plugins" rely on. What you need to do to avoid this is actually provide a Mod-API. – PeterT Dec 07 '13 at 16:20
  • 1
    Is the real question you are asking "how does a version-tolerant mod architecture work" or something similar? That's a much better question and if you reword this that way instead of being about Minecraft, that would be acceptable. –  Dec 07 '13 at 20:26

2 Answers2

4

Backward compatibility is hard work.

It really limits the architecture choices you can make. When you only have your application which doesn't need to interface with anything, and you decide that it's time to make everything different than you used to do it before, it's not a problem at all. But when you need to maintain compatibility with external components, you need to maintain a legacy interface to deal with outdated ones. This is a lot of additional work and makes your codebase more complex and thus harder to maintain.

When you decide to just screw backward compatibility and expect people to keep up with you instead of the other way around, you can develop much faster.

Philipp
  • 119,250
  • 27
  • 256
  • 336
3

It's a conspiracy!

Nah, not really. Although much of their success rides on user-created content, Mojang has done nothing to actually enable modders to do their thing. Because mods are basically just Java classes injected into the game code, it's very easy for an update to break everything.

Assuming that you're asking this question in the interest of developing a game that doesn't do this, the modern technique is to data-drive your game engine. This means leaving everything game-specific, like levels, entity definitions, or even rules, outside of the executable. Usually you'd write them in a scripting (Lua, Python) or markup (XML, JSON) language, or a binary format that you release a tool for.

This is a double bonus, because while it allows modders to easily add new content, it also allows the developer (yes, you) to rapidly iterate the standard content. If you're tweaking enemy health values through the native code, you need to recompile and reload the game every time you want to test them out. If you data-drive, you can make the necessary changes on-the-fly (while testing the game).

jmegaffin
  • 4,923
  • 2
  • 25
  • 46