Quick brain dump from IRC on what I, as an engineer, would want out of a proper modding API for Minecraft:
<@Harmony> First suggestion: Study the plugin structure of N64 emulators. Some folks hate 'em, but I've always been a fan of a-la-carte services.
<@Harmony> Have an input abstraction layer for input plugins, for example; define a standard set of messages that the input plugin will send to the application, and the input plugin can be written to accept input from whatever HID it wants. Person's playing on a keyboard, with no force-feedback? Fine, EVENT_DAMAGE_* (hypothetical name) will be ignored. Person's playing with an X360 controller? The input plugin can key off those events and send the motors a-spinning.
<@Harmony> Some sort of abstraction layer to allow assets to be easily dropped-in; not just textures, but block models, mob models, player models.
<Nightmare> block types, and block-block interactions (so we can make a brick which floods the map with molten cheese, etc)
<@Harmony> That should actually be considered separately, let's not get ahead of ourselves.
<@Harmony> The blocks themselves aren't so much data-driven, I imagine, as code-driven.
<@Harmony> It would be nice to have them data-driven, perhaps by the same asset replacement system as renderable assets, but depending on where the core gameplay portion of the engine goes in the future, it might be easier to have blocks conceptually be part of the core gameplay engine, and simply have each block have an associated render asset
<@Harmony> Perhaps that plugin or subsystem could communicate with a render abstraction layer, which could allow people (like me) to write custom materials
<@Harmony> Imagine, dirt that's lit and has low specular like dirt
<@Harmony> Genuinely bumpy stone
<@Harmony> Environment-mapped water, with a soft UV wobble applied depending on the water current
<@Harmony> A modified fur shader for lush-looking grass
<@Harmony> Bright, bloomy snow
<@Harmony> Man, if I could get my hands on the original source code and not some decompiled bullshit, that's the first thing I'd do, is change that "OpenGL 1.1!" yellow text line to "OpenGL 3.0!"
<@Harmony> And think even further down the rabbit hole - nice, polished-looking mob, animal and player models, with plenty of bones, nicely skinned
<@Harmony> None of this requires any modifications to the physics side of the engine, so that could remain the same :D