BuildCraft History and Design

Published on January 30, 2015

BuildCraft is one of the few ancient Minecraft mods which has made it through almost 4 years of modding up until the present day, as well as m any changes of the maintainer/developer team. In this post, I’d like to briefly discuss the history of it and my design views. Please note that if you want to read up on the recent history of BuildCraft (1.6.4-1.7.10), you might be better off reading my previous BC blog post from December.

Let’s begin with a Christmas Carol-esque introspection of the Past, the Present and the Future of BuildCraft as it were when I joined the development team in October 2014.

Our story begins in Minecraft Beta 1.4. Yes, that was April 2011 - almost 4 years ago! To give you a sense of perspective, almost none of the mods that exist today were out back then. IndustrialCraft 1 had only come out a month before, MineFactory was primarily conveyor belts, Redstone Advanced was the (buggy) gate mod of choice and nobody imagined that Pistons would become an official part of Minecraft. BuildCraft 1.4.1 (the first release) came out on the 25th of April, 2011. Back then, it actually didn’t have building or crafting - much like the first releases of Minecraft. Instead, it had five pipe types: wooden, cobblestone, iron, gold and diamond - their functions didn’t change much until today.

BuildCraft 1.5_01.1 brought Mining Wells and a port to beta 1.5_01, and 1.5_01.3 added Quarries and Automatic Crafting Tables (now Auto Workbenches). Back then, they still were powered by fast-clocked redstone; in those days, a power system was a rather innovative concept! What is interesting to note, though, is that the recipes are currently very similar, the primary difference being that pipes are no longer part of the mining machine recipes.

A lot of the later history is lost to time, Minecraft Forum moves and the lost CVS tree of early BuildCraft development, however we can try to piece it back with SpaceToad’s videos.

BuildCraft 1.6.5.1 added Vacuum Pipes (now Obsidian Transport Pipes), the Land Marks and the Filler - at which point the mod finally had both Buiilding and Crafting. In 1.6.6.4, we got filler enhancements, stone pipes and a much better Landmark model, now based on torches. 1.7.2.1 was the first version to add support for SMP via ModLoaderMP.

At the same time, a new idea has begun to happen: Minecraft Forge. Eloraam, FlowerChild and SpaceToad had created an API that was supposed to sit on top of Risugami’s ModLoader and bring inter-mod compatibility for patches required by multiple mods. (Interesting historical note: the initial commits were put in place by SpaceToad on July 12, 2011, and LexManos started commiting in October; in early 2012, he had been making the majority of commits.)

Back to BuildCraft, version 2.0.0 came out at the very end of July 2011. It was the first version to depend on Minecraft Forge. The major revolution here was the addition of a power system - Minecraft Joules. In 2.0.1, we got oil and wrenches, and 2.1.0 gave us fluid pipes and pumps. (Interestingly, Hawkye had a pump addon for BuildCraft 1.7.2.x, however, it operated on buckets - one bucket at a time.) BuildCraft 2.2.0 added power pipes, fuel and the refinery. It also had lava support for the Iron engine. It was not an SMP version, though - that only came out in 2.2.1, which also added a small liquid API and implemented (then Forge’s) ISidedInventory.

At this point, we get access to the mod-buildcraft.com blog, which was created alongside version 2.2.1, giving us exact changelogs. BuildCraft 2.2.2, thus, brought APIs! Power and liquid APIs relying only on the public BC API, letting many more addons appear. Also, it made energy loops explode (instead of crashing the game).

It is interesting that BuildCraft only became truly open-source in version 2.2.5, and only due to the fact that open source code was one of the requirements of SourceForge hosting. It also formalized the modpack inclusion process - earlier, you had to have SpaceToad’s personal permission, which had only been given to one pack; now, you only had to fulfill a list of requirements in the license (which back then and up until now was the MMPL 1.0).

The builder had been added sometime in the early 2.x versions, but I am not sure when.

The 2.2 branch was stabilizing, but SpaceToad wasn’t resting on his laurels. 3.0.0 Alpha came out soon after, adding gates - a generalized system of detecting triggers and reacting to them with actions, as well as pipe wires (then called “signals”), assembly tables, lasers and a major speed optimization to pipes - buffering tile entity accesses. This was November 2011 and Minecraft was still in Beta 1.8.1.

At the same time, a major issue happened in the Minecraft Forge team: FlowerChild quit and made his mod, Better than Wolves, disconnected from Forge - a “base mod” or “JAR mod”. Citing SpaceToad on the matter,

Honestly, I share FlowerChild[‘s] analysis. That is, the Forge has failed to create a platform for a community of modders to share their needs. Our organization is too centralized and a-democratic, and the initial core members, starting with me, don’t have as much time as required to organize this community. […] Any way, for the time being things are status-quo - hoping to get a Forge for MC 1.0.0…

Source

Around then, Krapht’s Logistics Pipes came out - one of the most notable BuildCraft addons, adding a routing system for supplying and providing items intelligently. It was SSP-only at the time, though, and an SMP port never happened until the RS485 team’s fork in 1.2.5, which wasn’t taken too kindly by Krapht himself.

While the BuildCraft 2.2 branch was stabilizing, being ported to Minecraft 1.0.0 (the “stable” version) and getting all the way to 2.2.11, SpaceToad released BuildCraft 3.1.0, “completing the initial mission of BuildCraft!” - specifically, he introduced blueprints and Blueprint Libraries. It also brought Structure Pipes, a trigger API and “a pipe placing an object”, which later became the Stripes Pipe. A notable thing that happened this time is Better than BuildCraft, a port of BuildCraft for Better than Wolves which lasted all the way until Minecraft 1.2.5, for reasons to be explained later.

After porting BC 2.2.12 and 3.1.2 to Minecraft 1.1.0, a major change happened. Since late January, there had been zero site updates for a month, and when a post was finally made on the 2nd of March, 2012, it had this to say:

Dear all,

As you might have seen for the past few weeks, BuildCraft development intensity has dramatically decreased, along with my involvement in the community. This is due to a clear diminution of my time, both for personal and professional reasons. Everything is going great on these two ends, […] but I’m no more able to commit to the 15+ hours per week on BuildCraft that I have been putting together over the first 9 months of the project.

From the very beginning, this project has been designed to be community driven. […] Time has come to go to the next step, that is actually giving the development responsibility to a community of developers.

Krapht and SirSengir have volunteer[ed] to take over and co-lead the project. You probably know them from the amazing work they’ve done on the Logistic[s] Pipes and Forestry mods. […] Please join me in welcoming them at the head of the BuildCraft mod!”

Source

Direwolf20 commented under the post, stating “Congrats to you two, and good luck to you Spacetoad”.

The updates have slowed down, becoming mostly patch/port releases (notably, BC 2.2.14 for Minecraft 1.2.5 moved from ModLoaderMP to Forge’s netcode), as Sengir and Krapht have begun work on porting BuildCraft 3 to SMP. The Git repository, superseding BC’s original repository, was opened on May 9, 2012 - from then to now it has accumulated 106 (!) pages of commits.

The work took quite a while, with the first pre-release (for Minecraft 1.3.2) coming out in late October. Numerous features got added - facades, autarchic gates, the hopper (renamed in 1.5 to the Chute), void and sandstone pipes, a laser-powered Advanced Crafting Table, localization and a new API. Thanks to the great work of Sengir, Krapht, Kyprus, cpw and CovertJaguar, BuildCraft had the chance to be reborn. It also removed the Stripes Pipe, primarily because no one member of the old team liked it.

After a few bugfix versions under MC 1.4.5, BuildCraft 3.3.0 came out - for 1.4.6. CovertJaguar heavily improved the pipe performance, both CPU- and bandwidth-wise, support for the Liquid Dictionary was added and some ACT improvements happened along the way. BuildCraft 3.4.0 ported it to MInecraft 1.4.7, marked that only Forge is necessary in the blog post and made some changes, including a Filler nerf by cpw (no dropping of broken blocks, to stop it from being a Quarry replacement). 3.4.1 brought emerald transport and liquid pipes, while 3.4.2 added a creative tab and “3D rendering of items in pipes”. Notably, it also removed the builder, citing “world corruption” - this was only fixed in BuildCraft 6.0.0. (Historical oddity: a Japanese modder made their own mod, SchematicBuilder, for Minecraft 1.4.7/1.5.2, partially restoring the functionality. Does any of you have more information on that?)

The development slowed down over time. 3.5.0 was “a straight port […] by Krapht, cpw, CovertJaguar, Player and Flow86” with some bugfixes for Minecraft 1.5.1. 3.5.1 (for 1.5.2) added Oil Springs, API improvements and bugfixes. 3.5.2 brought Pipe Plugs.

BuildCraft 3.6.0, at the end of May 2012, finally added some new features: oil biomes, a rewrite of the automatic crafting table by CovertJaguar which highly nerfed it (and annoyed countless players in the process).

Slowly, CovertJaguar became the main developer - changelogs point that BuildCraft 3.7.0 (June 2012) was mostly his commits, with quartz pipes, a rewritten conductive pipe systerm and, as usual, tweaks and bugfixes. He also started posting videos to the BuildCraft blog, however Sengir still wrote down the release notes. 3.7.2 added the Filtered Buffer.

One of the most notable BuildCraft additions at the time was Thermal Expansion 2, which existed all the way since TE1 in I think Minecraft 1.2.5. It added one of the most interesting machine systems at the time, its own energy conduction system without losses, its own liquiducts, tesseracts, et cetera.

In July, CovertJaguar became the de-facto primary developer of BuildCraft, moving it to the very early CurseForge in July 2013 and releasing BC 4.0.1 on the 9th of August, 2012. It added some great features, including a Flood Gate, color sorting (lapis/daizuli pipes) and API improvements. BC 4.1.0 brought Iron Kinesis Pipes, tooltips and many config options, however, the downfall of BuildCraft was about to begin…

BuildCraft 4 added “forced perdition”, that is, it enforced a small energy loss for all power storage in Minecraft Joules via the PerditionCalculator. Many modders were greatly angered by it, notably Aidan, skyboy026 and KingLemming. Let’s see what Aidan had to say on the matter back in June 2013:

I hope you all have grown to love Mekanism’s universal energy system […] I have thoroughly enjoyed integrating BuildCraft, and due to Krapht and many others’ hard work, this implementation was rather easy. BuildCraft has seemed to be following along the lines of a proper open-source project, accepting PRs quickly and building upon what SpaceToad’s idea was. I have been excited about 1.6 to see what all BuildCraft has to offer for its supposedly revamped energy system by CovertJaguar.

Looking at GitHub, there are some wonderful improvements […] One minor catch, however. This update also finalizes the “PowerProvider” class and removes “IPowerProvider”. [explanation - the PowerProvider, in the MJ API, was the part of code used for all interfacing with the power system] This means there will be absolutely no flexibility when working with the system, and all power interactions will have to act exactly how CovertJaguar intends for them to work.

CJ has always been a good firend of mine, he’s open to suggestions and has helped me many times in the past. […] This change to the BuildCraft power system, however, does the mod no justice that I can see. Not only is he cutting off many possibilities for mods that could potentially integrate with BuildCraft’s API, but he is also screwing over developers that already use BuildCraft significantly in their own mods. Mekanism uses custom PowrProviders for managing its machines, generators, and Universal Cables, without these systems my support for the mod would literally fall apart. […]

lol, not very flexible its not supposed to be […] An API is not supposed to be flexible lol? and API is ment to provide an interface into a propriatary system, so that you can interact with that system on its terms

[…] Because of these ridiculous actions and statements I am withdrawing complete BuildCraft support from Mekanism for the next major update. No longer will any of my content interact in any way with the BuildCraft API.”

Source

Ouch. That was a huge blow.

Other modders were more active, however. Skyboy026 added an ASM hook in PowerCrystalsCore to let MFR define its own, custom PowerProvider, and in return received threats from Covert stating that “we will be forced to ask FTB does not ship BC alongside PowerCrystalsCore” (Source)

The final blow, though, came from KingLemming, with the introduction of Redstone Flux in Thermal Expansion 3. It provided for a new, much simpler to observe by the end-user and fully lossless power system, complete with its own energy generation… and full support for MJ consumers. Along with the addition of itemducts, this meant that BuildCraft is almost dead, hanging merely on the Quarry… which was reimplemented by RWTema in Extra Utilities and immibis in Quarry Minus.

Rest in pieces, BuildCraft. CovertJaguar did little to rectify the situation, instead adding an Emzuli Pipe in BC 4.2. The BuildCraft releases slowed down, with patch releases being few and far between, with the final release done by Covert being BC 4.2.2 for Minecraft 1.6.4.

(Major note - he later admitted on Reddit that the decision was a huge mistake. Sadly, I cannot be bothered to look for the post - it was in an /r/feedthebeast AMA thread, I believe)

Redstone Flux grew to become the ultimate energy API, with the few mods holding out being the “EU ecosystem” of IC2, Reika’s mods and BuildCraft/Forestry/RailCraft, still faithfully using MJ. Sengir also left the community around then, and Krapht had already left almost a year ago, leaving BC dead, abandoned, obsolete and deprecated, limited to a small group of fanboys, who also were becoming annoyed at the horrible inter-mod compatibility the new BuildCraft had and considering moving to other mods. The same happened to modpacks, with some deciding that a unified energy system is the true direction - and settling on RF.

It looked as if BuildCraft’s destiny was to die, like most other mods of its time - Redstone Advanced had already died in late beta with the creation of RedPower; IndustrialCraft, now 2, had died in the eyes of most people due to the “gregification”; MineFactory Reloaded had been the only mod this old holding out after all these years. Other modders provided replacements for the most useful features, and the slow road of abandonment began. And then, on the 4th of January, 2014, some very familiar words appeared on the blog:

Dear all,

It’s been almost two years since I handed BuildCraft development over to the Minecraft modding comunity. The way things have been picked up [..] is truly amazing, and I’m extremely pleased to see contributions done by so many people. […]

I’m very happy to be announcing my return to the BuildCraft development team. I have lots of ideas for new features and systems in the mod. […]

Thanks again for being part of community built around BuildCraft, and stay tuned, there’s a lot more to come!

SpaceToad

Source

And he’s back! The man who originally started the mod, just as CovertJaguar was finishing the 4.2.2 release, is coming back to save us all! …Or is he?

A few weeks later, CovertJaguar quits the team, primarily due to a conflict on the Builder API. Little information is known about this, except that SpaceToad and CovertJaguar had different API designs and that the work of Covert and Player had been rejected. This also meant that there was only one developer left on BuildCraft: Sengir, Krapht and countless others have left a long time ago.

SpaceToad worked hard, rewriting parts of the networking system and porting the mod to Minecraft 1.7.2, finally releasing BuildCraft 5.0.0 on the 15th of February, 2014. The next two test builds, with heavy bugfixing, were released on the 17th and 18th respectively. Around those builds, some improvements to gates were added; most notably, gate expansions, which let the functionality be split across different modules to stop the huge and quickly increasing amount of available triggers and actions. This was the last feature CovertJaguar added to BuildCraft - this happened during the short period of time they collaborated in. During that period, the BuildCraft forum was also remade and made functional.

He had also been working on some things for a while. The networking rewrite was supposed to pave way for Robots - little cubic machines which do tasks for you, programmed with Gates. In the same preview, he also demonstrated the tiering system (which never came out, replaced by the far superior Eureka mod) and the Urbanist block (which has not come out as of writing this post). The Urbanist is especially interesting - it gave you a Sims-esque overview of the entire loaded world area around you in 3D, letting you assign tasks to robots under control of the Urbanist, such as placing and removing blocks or building blueprints. Finally, a BuildCraft end-game!

Of course, those were all far away - but BuildCraft had been missing its core feature, Builders, for a long time now. BuildCraft “NextGen Pre Alpha 6.0.0” was released on the 5th of March, 2014, and despite being highly unstable, it introduced them back into the game after over a year of disappearance. New bugfix releases started coming out every few days, breaking some things and fixing many more. The Path Marker and Templates returned in BuildCraft 6.0.2 and the Stripes Pipe came back a version later.

BuildCraft 5.0.5 Stable and 6.0.7 Beta were released on April 28th, giving us a proper, stable 1.7 BC release. Among its additions (on the 6.0 side) were Phased and Advanced facades, new achievements (further extended in later 6.0 builds) and Creative Engines. Around the same time, a new MJ API was being written to make it a lot more flexible, however it had the issue of being somewhat overcomplicated.

The work focused now on making BC 6.0 stable, which finally happened on the 31st of May, and finishing off the robot system, slated for 6.1. BuildCraft ported to Minecraft 1.7.10 somewhat late, on the 11th of July, and everything looked as if the mod is on its way to innovation once more. BuildCraft 6.1.0’s early alpha was released on the 3rd of August. It added sided gates (up to 6 gates on a pipe, as opposed to the previous 1), improvements to the integration table, the addition of transparent facades, support for fluids in the Builder and, of course, robots!

6.1.1 added the delivery and crafting robots and SpaceToad was working on Lists (for item sorting/detection) and Composite Blueprints (for larger builder schematics), but then…

24th of August, 2014. After a long debate with CovertJaguar, Parker8283 releases fork of Forestry, then called ForestryRF. This was a very important change: it marked the point where one of the “old guard” of MJ mods slowly started considering the option of moving to Redstone Flux. While it was supposed to stay a fork due to the hesitance of the development team, it began the slow fallout of BuildCraft addons.

The final blow was actually given by accident by me a few days later, while debugging RailCraft engines on a Polish modded server I ran. I found out that the “new” BuildCraft 6.0 MJ API had a fatal compatibility flaw with CovertJaguar’s old API: for engines, they only gave off half the power! In addition, there were weird, undebuggable power losses in random places. As I started discussing it with the more tech-knowledgeable members (also known as the Starchasers, as they call themselves), we realized that a rewrite is in place. We started joking around that the BuildCraft power system is so detached from the API that it could be easily ported to RF… and then it struck.

We got to work, and a few mere days later, we had a working version of BuildCraft 6.0.18 running on RF for its energy system, while having (partial) compatibility with CJ’s MJ API. It not only made the pipes a lot more predictable (the 6.0 API did some weird things not related to perdition, which I still fail to understand), it also allowed us to include RF mods we really liked, such as Thermal Expansion.

We realized that we have something rather dangerous on our hands - it could help BuildCraft from its fall to obsolescence or it could cause incomprehendable amounts of drama. I started talking about it with some friends from the modding community, as I feared the BC dev team (I only had a chance to contact Covert as a pull requester; I never managed to meet SpaceToad, so I didn’t know what to expect). Finally, I made an announcement quietly on my Twitter, and someone reposted it to Reddit with the title “Asie I hope you know what your doing”. It’s really quite the interesting thread, where Covert and KingLemming argue while the community started heavily debating as well (Source).

SpaceToad gave me a shoutout on Twitter, I got in contact with him, he merged in the RF support, ramping up for a BuildCraft 6.1.2 release, and then… nothing. Except for a warning: “Things are still crazy at work

  • sorry for being unreachable these days. Hoping I’ll be able to come back to BC soon.”.

Deja vu, some would say. Nothing for almost a month. No commits, no posts, nothing. Eventually, I catch SpaceToad on IRC and, knowing we were in contact for a while, planning future work and releases, I ask him if he’s willing to let me maintain BuildCraft while he’s gone. He agreed to it with the exception of not giving me access to making official releases. But I managed to get BC 6.1.2, 6.1.3 and 6.1.4 out that way. They were mostly bugfixing, but that last one brought two interesting features: official Gate Copiers, which were highly requested after denoflionsx’s mod disappeared, and stained glass in pipes, which was added mostly for aesthetics.

That’s where the Past stops and the Present begins… which is not really interesting: I stuck to adding new features and fixing bugs, Hea3ven contributed some fixes on the robot side which I was not highly interested in, and due to many factors (the inclusion of BuildCraft’s new versions in the more popular packs, chilm’s Let’s Plays, the delay on Thermal Dynamics, etc.), BC started gaining its popularity again.

The Future? There were two Futures. The first one, which, due to a series of complex accidents explained above, we managed to leave, is SpaceToad disappearing into the Void, BuildCraft laying dormant due to no maintainers or developers working on it; possibly an unofficial fork.

The second one was unexpected, but it was the rebirth of BuildCraft, which is on the horizon. As you should probably know, a horizon is an imaginary line that moves away from you as you try to reach it.

So, what are my design views and plans for BuildCraft?

The most important point is staying on the forefront of innovation. Remember - it’s the BuildCraft developer who was on the original Forge team; BuildCraft who brought the first pipes, quarries and builders; BuildCraft gave us programmable Robots, which, unlike turtles, were somewhat accessible to the common man, Gates, the Filler and many other features, of which quite a few were not replicated in other mods to the present day.

What does that mean? It means we’re experimenting, much like SpaceToad did, to find new areas and directions which can push the mod forward. If everything goes right, I might have some exciting news for you in the summer, but that’s a long time away from now.

Another important point is to keep BuildCraft true to its core. While it can be argued that some of our decisions (like the vapourware delay on adding a perdition option to pipes) go against this, we try to keep the engineering aspect of the mod mostly intact, attempting to fill the niche of people who like building and programming complex automation mechanisms with our pipes and gates. We’re also going to try very hard not to remove the Builder. Heh, heh.

Simplicity in the codebase is also important. We could add things like graph networks to pipes to give them a huge speed boost, but that would make the code a lot more complex and possibly hard to understand by the common man. (Also, it would introduce its own Pandora’s Box of bugs.)

So, to sum up, BuildCraft had a turbulent and highly interesting history, which led to me taking over its development. What I want to achieve is go forth and innovate, while staying simple and true to our roots.

PS. I didn’t expect this post to be even half as long. Really.