Infiniminer
Zachary Barth's 2009 team game of mining and building in a world of blocks, for Windows.
Infiniminer is a first-person game for teams, in which two sides, Red and Blue, dig through a world of blocks for gold and diamonds and build with the ore they find1,2,3. Zach Barth made it under his studio name, Zachtronics Industries, with help on the art from Chris Gengler4. He said later that he made it as a hobbyist, making games because he wanted to and releasing them so that people could play them5, and it was a free download6. Barth announced it on his site on 29 April 20097 and kept updating it over the following weeks, up to v1.58. He described it as a combination of Infinifrag, Team Fortress 2, and Motherload, made because he wanted a competitive mining game9. Infinifrag was his own earlier game, a multiplayer shooter in which players could also place and break blocks10.
The game quickly drew a following on message boards11. Barth built it as a team competition for points, but its players soon turned to exploring and building12. The game’s code leaked. Barth blamed himself for shipping an unobfuscated .NET program, and said the leak let hackers make hacked clients and let players who disliked his balancing run their own versions, so he stopped working on it13. He announced the source as open on 16 May 200914,14, and in July he wrote that he was done making “these games”15. Rock Paper Shotgun later wrote that the game’s small community broke up in the wake of the modified versions16. Markus Persson wrote in October 2009 that he had played it in multiplayer and “had a blast”, but found it flawed: building was fun, but there wasn’t enough variation, and the big red and blue blocks were “pretty horrible”17.
By 2014 Rock Paper Shotgun called Infiniminer “best known now as part of the inspiration for Minecraft“18. Zachtronics’ own page later called it “the game that started the ‘block genre’” and, in the same breath, “quite buggy and old”19. Barth returned to blocks in Infinifactory, which Rock Paper Shotgun announced as SpaceChem joined to Infiniminer, though Barth insisted it was not a retread18. A 2014 post on Zachtronics’ page says the Channel 4 series Fresh Meat aired Infiniminer footage at the end of the year before20.
#How it plays
Each map is a 64-block grid carved into a rounded world of dirt and caves, threaded with ore, veins of gold, single diamonds, rock, and lava21. Players pick a team and one of four classes: Prospector, Miner, Engineer, or Sapper1. In the client, every class has a pickaxe and a construction gun. The Prospector also gets a radar, the Engineer a gun that takes blocks back down, and the Sapper a detonator22.
The pickaxe reaches only the block in front of the player23. It digs out dirt, ore, gold, and diamonds, but not rock: rock gives way only to explosives, which the Sapper’s kit carries, each clearing a cube five blocks across23,24. Ore is building money, and gold and diamonds are the score25.1 What a player carries is capped by class: the Engineer holds the most ore, and the Miner twice the gold and diamonds of anyone else26.2 A player who dies loses everything carried27.
Gold and diamonds count once their carrier climbs back up to ground level, where they are banked on their own and added to the team’s total. The first team to reach the server’s target wins, and the server starts again on a new map2.3 Ore goes into a team bank, a block only the Engineer’s menu in the client offers. A teammate standing at it can put ore in or take it out, 50 at a time22,28.
The construction gun places a block up to six blocks away, against whatever surface the player is aiming at, and charges the block’s full price in ore at once3. A plain block in the team’s color, or a road, is cheapest. Translucent blocks, ladders, and jump pads cost more, and banks, beacons, shock blocks, and explosives more again29.4 Blocks come down with the deconstruction gun, which the client gives only to the Engineer, and only the user’s own team’s blocks, with no ore back30.
Every dig and every block goes through the server, which changes the map and tells every player31. But the server trusts the client in several ways. It takes the player’s position, view, tool, and block type as the client sends them31. It doesn’t check that a block or tool is one the player’s class has32,30, or that a player using the bank is standing at one28.
#In Minecraft’s lineage
On finding Infiniminer, Markus Persson wrote, he realized “that was the game I wanted to do”, and he tried a first-person engine in its style33. He found building in it fun but short of variety, and its big red and blue blocks “pretty horrible”17. Rock Paper Shotgun wrote in 2011 that both games let players strip blocks away, but that Minecraft was “(currently, at least)” about building, exploring, and excavating, and Infiniminer about competing, exploring, and excavating34. Digging differs too. In Infiniminer each swing of the pickaxe takes out a dirt or ore block, and rock can’t be dug at all; in Minecraft a block takes time to break, set by its hardness and the tool, and stone gives nothing without a pickaxe35. Barth, asked about it, said borrowing ideas “is integral to the creative process”, and that he liked building for its own sake: “That’s why I made a game about it!“36. To a player who asked in 2010 whether he could use the idea as Minecraft had, Barth answered that there was no permission to give37. In 2015 he said of Minecraft’s success, “It was never my plan to have what happened, happen”38.
Minecraft’s line runs on to Factorio, whose founder called mods for Minecraft a huge inspiration39. Infiniminer also reached block games directly: Perttu Ahola’s Minetest described itself in 2011 as an “InfiniMiner/Minecraft inspired game”40.
#Footnotes
-
An ore block gives 20 ore. Gold is worth $100 a block and a diamond $1,00025. ↩
-
Ore: In Infiniminer v1.5 the Engineer carries up to 350 ore and the other three classes up to 200. The Miner carries up to 8 units of loot (gold and diamonds) and the others up to 4.26,26. ↩
-
Solid block or road 10 ore; translucent, ladder, or jump 25; bank, beacon, or shock 50; explosive 10029. ↩
Mechanics
| Mechanic | Kind | How |
|---|---|---|
| Destructible terrain | Breakable tiles | the pickaxe digs dirt, ore, gold, and diamonds out a block at a time; rock gives way only to a Sapper's explosives |
| Resource harvesting | Carried loads | players carry ore to their team's bank, and gold and diamonds up to the surface, where they become the team's cash |
| Construction | Pay up front | a block's whole price in ore leaves the builder's pocket the moment it's placed |
| Inventory capacity | Quantity | each class carries a set amount of ore and of loot: the Engineer the most ore, the Miner the most loot |
Every claim about this game, by concept (38)
References
- ^ abInfiniminer v1.5 has two teams, Red and Blue, and four classes: Prospector, Miner, Engineer, and Sapper.CodeInfiniminer v1.5 source
How we know
18 public enum PlayerClass ⋮ 20 Prospector, 21 Miner, 22 Engineer, 23 Sapper ⋮ 35 public enum PlayerTeam ⋮ 38 Red, 39 Blue
code/InfiniminerClient/PropertyBag.cs lines 18–40 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abcIn Infiniminer v1.5 a player's loot is banked on its own once the player is within 8 blocks of the top of the 64-block map: its cash goes to the team and the player's loot empties. The first team to bank the server's winning amount, $10,000 unless the server's config sets another, wins (Blue, if both teams reach it in the same pass), and the server restarts on a new map 10 seconds later. On a sandbox server team cash doesn't count and nobody wins, but banking still adds to the player's own score and empties the player's cash and loot.CodeInfiniminer v1.5 sourcerevised
How we know
26 const int MAPSIZE = 64;code/InfiniminerServer/InfiniminerServer.cs line 26 at 639c16e · upstream ↗ 49 uint winningCashAmount = 10000;code/InfiniminerServer/InfiniminerServer.cs line 49 at 639c16e · upstream ↗ 35 public const int GROUND_LEVEL = 8;code/InfiniminerClient/InfiniminerGame.cs line 35 at 639c16e · upstream ↗ 746 public void DepositForPlayers() ⋮ 748 foreach (Player p in playerList.Values) ⋮ 750 if (p.Position.Y > 64 - InfiniminerGame.GROUND_LEVEL) 751 DepositCash(p); ⋮ 754 if (sandboxMode) 755 return; 756 if (teamCashBlue >= winningCashAmount && winningTeam == PlayerTeam.None) 757 winningTeam = PlayerTeam.Blue; 758 if (teamCashRed >= winningCashAmount && winningTeam == PlayerTeam.None) 759 winningTeam = PlayerTeam.Red;
code/InfiniminerServer/InfiniminerServer.cs lines 746–760 at 639c16e · upstream ↗ 1179 public void DepositCash(Player player) ⋮ 1181 if (player.Cash <= 0) 1182 return; ⋮ 1184 player.Score += player.Cash; ⋮ 1186 if (!sandboxMode) ⋮ 1188 if (player.Team == PlayerTeam.Red) 1189 teamCashRed += player.Cash; 1190 else 1191 teamCashBlue += player.Cash; 1192 SendServerMessage("SERVER: " + player.Handle + " HAS EARNED $" + player.Cash + " FOR THE " + GetTeamName(player.Team) + " TEAM!"); ⋮ 1195 PlaySound(InfiniminerSound.CashDeposit, player.Position); 1196 ConsoleWrite("DEPOSIT_CASH: " + player.Handle + ", " + player.Cash); ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 1179–1199 at 639c16e · upstream ↗ 722 // Is the game over? 723 if (winningTeam != PlayerTeam.None && !restartTriggered) ⋮ 725 BroadcastGameOver(); 726 restartTriggered = true; 727 restartTime = DateTime.Now.AddSeconds(10); ⋮ 730 // Restart the server? 731 if (restartTriggered && DateTime.Now > restartTime) ⋮ 733 SaveLevel("autosave_" + (UInt64)DateTime.Now.ToBinary() + ".lvl"); 734 netServer.Shutdown("The server is restarting."); 735 return true;
code/InfiniminerServer/InfiniminerServer.cs lines 722–735 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abIn Infiniminer v1.5 the construction gun reaches 6 blocks along the player's view and puts the block in the last empty cell before the first solid one it meets. It fails when nothing is in reach, when the player carries less ore than the block costs, when a player stands in the cell (at feet or head height), at the map's edge, or when the surface aimed at is lava. On success it takes the whole cost from the player's ore; a sandbox server charges nothing.CodeInfiniminer v1.5 source
How we know
825 public bool RayCollision(Vector3 startPosition, Vector3 rayDirection, float distance, int searchGranularity, ref Vector3 hitPoint, ref Vector3 buildPoint) ⋮ 827 Vector3 testPos = startPosition; 828 Vector3 buildPos = startPosition; 829 for (int i = 0; i < searchGranularity; i++) ⋮ 831 testPos += rayDirection * distance / searchGranularity; 832 BlockType testBlock = BlockAtPoint(testPos); 833 if (testBlock != BlockType.None) ⋮ 835 hitPoint = testPos; 836 buildPoint = buildPos; 837 return true; ⋮ 839 buildPos = testPos; ⋮ 841 return false;
code/InfiniminerServer/InfiniminerServer.cs lines 825–842 at 639c16e · upstream ↗ 935 public void UseConstructionGun(Player player, Vector3 playerPosition, Vector3 playerHeading, BlockType blockType) ⋮ 937 bool actionFailed = false; ⋮ 939 // If there's no surface within range, bail. 940 Vector3 hitPoint = Vector3.Zero; 941 Vector3 buildPoint = Vector3.Zero; 942 if (!RayCollision(playerPosition, playerHeading, 6, 25, ref hitPoint, ref buildPoint)) 943 actionFailed = true; ⋮ 945 // If the block is too expensive, bail. 946 uint blockCost = BlockInformation.GetCost(blockType); 947 if (sandboxMode) 948 blockCost = 0; 949 if (blockCost > player.Ore) ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 935–996 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Infiniminer is Barth's game, released under his studio name, Zachtronics Industries. Chris Gengler helped with the art.Dev blogBarth, "Infiniminer", 29 April 2009 · Infiniminer v1.5 source
How we know
Thanks go out to Chris Gengler (tayrtahn@gmail.com) for helping with the artwork.
post body, after the download links · archived copy ↗ 1++ INFINIMINER ++ ⋮ 3A GAME BY ZACHTRONICS INDUSTRIES ⋮ 5http://www.zachtronicsindustries.com ⋮ 7ART BY CHRIS GENGLER (tayrtahn@gmail.com)
bin/README.txt lines 1–7 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Barth told Cascade PBS in 2015 that he made Infiniminer as a hobbyist, making games because he wanted to and releasing them so that people could play them.InterviewCascade PBS, Barth interview, 10 August 2015
How we know
This was back in the period when I was a hobbyist," Barth says. "I'd make a game because I wanted to make it, and then release it so people could play it
opening section · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Cascade PBS's 2015 profile says Infiniminer was released as a free download in the spring of 2009.InterviewCascade PBS, Barth interview, 10 August 2015
How we know
Infiniminer was released as a free download in the spring of 2009
paragraph after Barth's "hobbyist" quote · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Zach Barth announced Infiniminer as available in a post on his Zachtronics Industries site dated 29 April 2009. To play it needed Microsoft's XNA 3.0 runtime and possibly the .NET 2.0 runtime.Dev blogBarth, "Infiniminer", 29 April 2009
How we know
Written by Zach on April 29, 2009
post header and body · archived copy ↗ That's right boys and girls – Infiniminer is now available! To play, you'll need the installer below, the XNA 3.0 runtime (linked below), and maybe the .NET 2.0 runtime
post body · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Barth updated the game through the following weeks. His replies in the release post's comments point players to v1.1 on 1 May 2009 and to v1.21, a crash fix, on 2 May; the post as captured offers v1.5.Dev blogBarth, "Infiniminer", 29 April 2009
How we know
If you grab the latest version (v1.1) you'll find a flag in the client config
comment by Zach, 1 May 2009, 10:58 am · archived copy ↗ v1.21 should fix your crash.
comment by Zach, 2 May 2009, 3:09 pm · archived copy ↗ Download Infiniminer v1.5 [1.45 MB]
post body, download link · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Barth told Rock Paper Shotgun in 2011 that Infiniminer combined Infinifrag, Team Fortress 2, and Motherload, and that he wanted to make a competitive mining game.InterviewRPS, Barth interview, 20 January 2011revised
How we know
Infiniminer is a combination of Infinifrag, Team Fortress 2, and Motherload. I wanted to make a competitive mining game, and this was it.
answer to "Could you talk a little about what inspired you to design Infiniminer?" · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^The Minecraft Wiki describes Infinifrag, Barth's earlier game, as a multiplayer first-person shooter in which players could also place and break blocks, first released in November 2006.WikiMinecraft Wiki, "Infiniminer"
How we know
Infiniminer was inspired by Zach Barth's earlier game Infinifrag, a multiplayer first-person shooter which also included the ability to place and break blocks. Infinifrag was first released in November 2006.
History · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^The Minecraft Wiki says Infiniminer was released in incremental updates in late April and early May 2009 and quickly gathered a following on message boards.WikiMinecraft Wiki, "Infiniminer"
How we know
released in steps of incremental updates during late April and early May of 2009. It quickly garnered a following on message boards around the internet
History · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Cascade PBS's 2015 profile says Barth built the game as a team competition for points, but players soon saw its potential for exploring and building.InterviewCascade PBS, Barth interview, 10 August 2015
How we know
Barth programmed the game as a team-based competition for points, but players quickly realized the game's potential for exploring and building objects in the game's open world.
paragraph after Barth's "hobbyist" quote · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abBarth said in 2011 that he stopped working on Infiniminer when its source code leaked, which he called his own fault for releasing an unobfuscated .NET assembly. The leak let hackers make hacked clients, and let players unhappy with his balancing fork the game and write their own clients and servers.InterviewRPS, Barth interview, 20 January 2011
How we know
I stopped working on Infiniminer when the source code was leaked. It was totally my fault, as that's what I get for releasing an un-obfuscated .NET assembly, but it nevertheless enabled hackers to create hacked clients and players upset with my balancing decisions to fork and write their own clients and servers.
answer to "What led to the decision that you were finished with Infiniminer…" · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abcOn 16 May 2009 Barth announced that Infiniminer was open source, with an official branch on GitHub that he would maintain and asked contributors to submit to.Dev blogBarth, "Infiniminer is now officially open source", 16 May 2009
How we know
Written by Zach on May 16, 2009
post header and body · archived copy ↗ Infiniminer is now officially open source! http://github.com/krispykrem/Infiniminer/tree/master I'll be maintaining the official branch, which I encourage anyone who wants to help out to submit to instead of simply forking off into oblivion.
post body · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In a post of 9 July 2009 Barth wrote that in the aftermath of Infiniminer, "feeling nothing but disgust", he had told people he was done making games; a month later he knew he could not stop, but was done making "these games".Dev blogBarth, "goodbye is only eybdoog backwards", 9 July 2009
How we know
Written by Zach on July 9, 2009
post header and body · archived copy ↗ In the aftermath of Infiniminer, feeling nothing but disgust in the pit of my stomach, I told people that I was done making games. A month later I knew it was a lie and that I could never stop making games, but the truth of the matter is that I'm done making these games.
post body · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abRock Paper Shotgun's 2016 retrospective says hackers leaked the source code during development, the small community that had formed around the game dissolved in the wake of the modified versions, and Barth made the game open source and shelved it.WebRPS, "Have You Played… Infiniminer?", 3 November 2016
How we know
But during development in 2009 the source code was leaked by hackers. … In the wake of new modified versions, the small community of players that had formed around the game dissolved. The developer made the game open source and shelved the project.
article body · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abMarkus Persson wrote in October 2009 that he played Infiniminer in multiplayer for a while and "had a blast", but found it flawed: building was fun, but there wasn't enough variation, and the big red and blue blocks were "pretty horrible".Dev blogNotch, "The origins of Minecraft", 30 October 2009
How we know
I played it in multiplayer for a while and had a blast, but found it flawed. Building was fun, but there wasn't enough variation, and the big red/blue blocks were pretty horrible.
The origins of Minecraft · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abRock Paper Shotgun announced Zachtronics' Infinifactory in 2014 as linking SpaceChem with Infiniminer, which it called never finished or released commercially and best known as part of the inspiration for Minecraft. Cascade PBS wrote in 2015 that Barth was adamant Infinifactory was not a retread of Infiniminer, despite the return of the block engine.WebRPS, "Infinifactory: By The Maker Of SpaceChem And Infiniminer", 10 October 2014 · Cascade PBS, Barth interview, 10 August 2015
How we know
Zachtronics has linked the SpaceChem molecule to the Infiniminer molecule to create and announce their new game: Infinifactory.
article body, first sentence · archived copy ↗ It was never finished or released commercially, but it's best known now as part of the inspiration for Minecraft.
article body · archived copy ↗ He is adamant that Infinifactory is not a retread of Minecraft's predecessor, despite the return of the block engine.
section on Infinifactory · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Zachtronics' later page for the game calls Infiniminer "the game that started the 'block genre'", and also "quite buggy and old", listed "purely for historical reasons".PublisherZachtronics, Infiniminer pagerevised
How we know
That's because Infiniminer is the game that started the "block genre" that everyone knows and loves! It's also quite buggy and old, and is listed here purely for historical reasons.
About Infiniminer · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^A first-person post of 15 March 2014 on Zachtronics' Infiniminer page says the Channel 4 series Fresh Meat asked to use Infiniminer footage and references, which the writer first took for a mix-up with Minecraft, and that it aired at the end of the previous year.PublisherZachtronics, Infiniminer pagerevised
How we know
Last year I was contacted by a production coordinator from the Channel 4 show Fresh Meat about including some Infiniminer-related footage and references into their show. I was convinced that it was a mistake and they had really intended to use Minecraft, but apparently it wasn't, and it actually aired on television at the end of last year!
"Infiniminer on… television?", March 15, 2014 · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^An Infiniminer v1.5 map is a grid 64 blocks on a side that the server generates in order: dirt throughout; ore laid in random walks (10 by default); 16 veins of gold and 16 single diamonds; the layers above ground level cleared except for random mounds of dirt; caves carved by random walks, and more walks steered by a radial gradient (the code's comment: "Carve the map into a sphere"); then rock and, by default, lava. The later steps can carve away or cover some of the gold and diamonds placed earlier.CodeInfiniminer v1.5 sourcerevised
How we know
24 public static BlockType[, ,] GenerateCaveSystem(int size, bool includeLava, uint oreFactor) ⋮ 26 float gradientStrength = (float)randGen.NextDouble(); 27 BlockType[, ,] caveData = CaveGenerator.GenerateConstant(size, BlockType.Dirt); ⋮ 29 // Add ore. 30 float[, ,] oreNoise = CaveGenerator.GeneratePerlinNoise(32); 31 oreNoise = InterpolateData(ref oreNoise, 32, size); 32 for (int i = 0; i < oreFactor; i++) 33 CaveGenerator.PaintWithRandomWalk(ref caveData, ref oreNoise, size, 1, BlockType.Ore, false); ⋮ 35 // Add minerals. 36 AddGold(ref caveData, size); 37 AddDiamond(ref caveData, size);
code/InfiniminerServer/CaveGenerator.cs lines 24–37 at 639c16e · upstream ↗ 39 // Level off everything above ground level, replacing it with mountains. ⋮ 49 int numMountains = randGen.Next(size, size * 3); 50 for (int i = 0; i < numMountains; i++) 51 CaveGenerator.PaintWithRandomWalk(ref mountainData, ref mountainNoise, size, randGen.Next(2, 3), BlockType.Dirt, false); ⋮ 54 for (int z = 0; z <= InfiniminerGame.GROUND_LEVEL; z++) 55 if (mountainData[x, y, z] == BlockType.None) 56 caveData[x, y, z] = BlockType.None;
code/InfiniminerServer/CaveGenerator.cs lines 39–56 at 639c16e · upstream ↗ 58 // Carve some caves into the ground. 59 float[, ,] caveNoise = CaveGenerator.GeneratePerlinNoise(32); 60 caveNoise = InterpolateData(ref caveNoise, 32, size); 61 gradient = CaveGenerator.GenerateGradient(size); 62 CaveGenerator.AddDataTo(ref caveNoise, ref gradient, size, 1 - gradientStrength, gradientStrength); 63 int cavesToCarve = randGen.Next(size / 8, size / 2); 64 for (int i = 0; i < cavesToCarve; i++) 65 CaveGenerator.PaintWithRandomWalk(ref caveData, ref caveNoise, size, randGen.Next(1, 2), BlockType.None, false); ⋮ 69 cavesToCarve = randGen.Next(size / 8, size / 2); 70 for (int i = 0; i < cavesToCarve; i++)
code/InfiniminerServer/CaveGenerator.cs lines 58–71 at 639c16e · upstream ↗ 73 // Add rocks. 74 AddRocks(ref caveData, size); ⋮ 76 // Add lava. 77 if (includeLava) 78 AddLava(ref caveData, size);
code/InfiniminerServer/CaveGenerator.cs lines 73–78 at 639c16e · upstream ↗ 29 uint oreFactor = 10; 30 bool publicServer = false; 31 uint maxPlayers = 16; 32 string serverName = "Unnamed Server"; 33 bool sandboxMode = false; 34 bool includeLava = true;
code/InfiniminerServer/InfiniminerServer.cs lines 29–34 at 639c16e · upstream ↗ 168 public static void AddDiamond(ref BlockType[, ,] data, int size) ⋮ 170 CaveInfo += "diamond"; ⋮ 172 int numDiamonds = 16; 173 for (int i = 0; i < numDiamonds; i++)
code/InfiniminerServer/CaveGenerator.cs lines 168–173 at 639c16e · upstream ↗ 190 // Gold appears in fairly numerous streaks, located at medium depths. 191 public static void AddGold(ref BlockType[, ,] data, int size) ⋮ 193 CaveInfo += "gold"; ⋮ 195 int numVeins = 16; 196 for (int i = 0; i < numVeins; i++)
code/InfiniminerServer/CaveGenerator.cs lines 190–196 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abIn Infiniminer v1.5's client, which sets each class's kit, every class carries a pickaxe and a construction gun. The Prospector adds a prospecting radar, the Engineer a deconstruction gun, and the Sapper a detonator; the Miner has only the two. The Miner can build its team's solid and translucent blocks and ladders; the Prospector adds its team's beacon, and the Sapper explosives. The Engineer builds its team's solid block, both teams' translucent blocks, road, ladder, jump and shock blocks, and its team's beacon and bank. The server never reads the class when a tool is used (see build-no-class-check), so these lists hold only in the client.CodeInfiniminer v1.5 sourcerevised
How we know
542 case InfiniminerMessage.UseTool: ⋮ 544 Vector3 playerPosition = msgBuffer.ReadVector3(); 545 Vector3 playerHeading = msgBuffer.ReadVector3(); 546 PlayerTools playerTool = (PlayerTools)msgBuffer.ReadByte(); 547 BlockType blockType = (BlockType)msgBuffer.ReadByte(); 548 switch (playerTool) ⋮ 550 case PlayerTools.Pickaxe: 551 UsePickaxe(player, playerPosition, playerHeading); 552 break; 553 case PlayerTools.ConstructionGun: 554 UseConstructionGun(player, playerPosition, playerHeading, blockType); 555 break; ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 542–567 at 639c16e · upstream ↗ 411 switch (playerClass) ⋮ 413 case PlayerClass.Prospector: 414 playerTools = new PlayerTools[3] { PlayerTools.Pickaxe, 415 PlayerTools.ConstructionGun, 416 PlayerTools.ProspectingRadar }; 417 playerBlocks = new BlockType[4] { playerTeam == PlayerTeam.Red ? BlockType.SolidRed : BlockType.SolidBlue, 418 playerTeam == PlayerTeam.Red ? BlockType.TransRed : BlockType.TransBlue, 419 playerTeam == PlayerTeam.Red ? BlockType.BeaconRed : BlockType.BeaconBlue, 420 BlockType.Ladder }; 421 break; ⋮ 423 case PlayerClass.Miner: 424 playerTools = new PlayerTools[2] { PlayerTools.Pickaxe, ⋮
code/InfiniminerClient/PropertyBag.cs lines 411–455 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abIn Infiniminer v1.5 the pickaxe reaches 2 blocks along the player's view and removes dirt, ore, gold, and diamond blocks. It doesn't remove rock, lava, or built blocks. A gold or diamond block stays put while the player's loot is full; an ore block is dug even when the player's ore is full, and its ore is lost.CodeInfiniminer v1.5 source
How we know
851 if (!RayCollision(playerPosition, playerHeading, 2, 10, ref hitPoint, ref buildPoint)) 852 return;
code/InfiniminerServer/InfiniminerServer.cs lines 851–852 at 639c16e · upstream ↗ 864 switch (BlockAtPoint(hitPoint)) ⋮ 866 case BlockType.Dirt: 867 case BlockType.DirtSign: 868 removeBlock = true; 869 sound = InfiniminerSound.DigDirt; 870 break; ⋮ 872 case BlockType.Ore: 873 removeBlock = true; 874 giveOre = 20; 875 sound = InfiniminerSound.DigMetal; 876 break; ⋮ 878 case BlockType.Gold: ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 864–891 at 639c16e · upstream ↗ 893 if (giveOre > 0) ⋮ 895 if (player.Ore < player.OreMax) ⋮ 897 player.Ore = Math.Min(player.Ore + giveOre, player.OreMax); 898 SendResourceUpdate(player); ⋮ 902 if (giveWeight > 0) ⋮ 904 if (player.Weight < player.WeightMax) ⋮ 906 player.Weight = Math.Min(player.Weight + giveWeight, player.WeightMax); 907 player.Cash += giveCash; 908 SendResourceUpdate(player); ⋮ 910 else 911 removeBlock = false; ⋮ 914 if (removeBlock) ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 893–918 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In Infiniminer v1.5 the detonator, which the client offers only in the Sapper's kit, sets off every explosive that player placed. Each clears the 5 × 5 × 5 cube around it of rock, dirt, ore, solid and translucent blocks, ladders, shock and jump blocks, road, and lava, and sets off any explosive inside it. Gold, diamonds, banks, and beacons survive, and so does the map's outermost layer of blocks, which the blast skips.CodeInfiniminer v1.5 sourcerevised
How we know
993 if (blockType == BlockType.Explosive) 994 player.ExplosiveList.Add(buildPoint);
code/InfiniminerServer/InfiniminerServer.cs lines 993–994 at 639c16e · upstream ↗ 1081 public void DetonateAtPoint(int x, int y, int z) ⋮ 1083 // Remove the block that is detonating. 1084 SetBlock((ushort)(x), (ushort)(y), (ushort)(z), BlockType.None, PlayerTeam.None); ⋮ 1086 // Remove this from any explosive lists it may be in. 1087 foreach (Player p in playerList.Values) 1088 p.ExplosiveList.Remove(new Vector3(x, y, z)); ⋮ 1090 // Detonate the block. 1091 for (int dx = -2; dx <= 2; dx++) 1092 for (int dy = -2; dy <= 2; dy++) 1093 for (int dz = -2; dz <= 2; dz++) ⋮ 1095 // Check that this is a sane block position. 1096 if (x + dx <= 0 || y + dy <= 0 || z + dz <= 0 || x + dx >= MAPSIZE - 1 || y + dy >= MAPSIZE - 1 || z + dz >= MAPSIZE - 1) ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 1081–1126 at 639c16e · upstream ↗ 1137 public void UseDetonator(Player player) ⋮ 1139 while (player.ExplosiveList.Count > 0) ⋮ 1141 Vector3 blockPos = player.ExplosiveList[0]; 1142 ushort x = (ushort)blockPos.X; 1143 ushort y = (ushort)blockPos.Y; 1144 ushort z = (ushort)blockPos.Z; ⋮ 1146 if (blockList[x, y, z] != BlockType.Explosive) 1147 player.ExplosiveList.RemoveAt(0); 1148 else 1149 DetonateAtPoint(x, y, z);
code/InfiniminerServer/InfiniminerServer.cs lines 1137–1151 at 639c16e · upstream ↗ 446 case PlayerClass.Sapper: 447 playerTools = new PlayerTools[3] { PlayerTools.Pickaxe, 448 PlayerTools.ConstructionGun, 449 PlayerTools.Detonator };
code/InfiniminerClient/PropertyBag.cs lines 446–449 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abIn Infiniminer v1.5 an ore block gives the player 20 ore, up to the class's limit. A gold block gives one unit of loot worth $100, and a diamond one unit worth $1,000.CodeInfiniminer v1.5 source
How we know
872 case BlockType.Ore: 873 removeBlock = true; 874 giveOre = 20; 875 sound = InfiniminerSound.DigMetal; 876 break; ⋮ 878 case BlockType.Gold: 879 removeBlock = true; 880 giveWeight = 1; 881 giveCash = 100; 882 sound = InfiniminerSound.DigMetal; 883 break; ⋮ 885 case BlockType.Diamond: ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 872–890 at 639c16e · upstream ↗ 893 if (giveOre > 0) ⋮ 895 if (player.Ore < player.OreMax) ⋮ 897 player.Ore = Math.Min(player.Ore + giveOre, player.OreMax); 898 SendResourceUpdate(player); ⋮ 902 if (giveWeight > 0) ⋮ 904 if (player.Weight < player.WeightMax) ⋮ 906 player.Weight = Math.Min(player.Weight + giveWeight, player.WeightMax); 907 player.Cash += giveCash; 908 SendResourceUpdate(player); ⋮ 910 else 911 removeBlock = false;
code/InfiniminerServer/InfiniminerServer.cs lines 893–912 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abcIn Infiniminer v1.5 the Engineer carries up to 350 ore and the other three classes up to 200. The Miner carries up to 8 units of loot (gold and diamonds) and the others up to 4.CodeInfiniminer v1.5 source
How we know
573 switch (playerClass) ⋮ 575 case PlayerClass.Engineer: 576 player.OreMax = 350; 577 player.WeightMax = 4; 578 break; 579 case PlayerClass.Miner: 580 player.OreMax = 200; 581 player.WeightMax = 8; 582 break; 583 case PlayerClass.Prospector: 584 player.OreMax = 200; 585 player.WeightMax = 4; ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 573–591 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In Infiniminer v1.5 a player who dies, or respawns, drops to no ore, no cash, and no loot.CodeInfiniminer v1.5 source
How we know
606 case InfiniminerMessage.PlayerDead: ⋮ 608 ConsoleWrite("PLAYER_DEAD: " + player.Handle); 609 player.Ore = 0; 610 player.Cash = 0; 611 player.Weight = 0; 612 player.Alive = false;
code/InfiniminerServer/InfiniminerServer.cs lines 606–612 at 639c16e · upstream ↗ 630 case InfiniminerMessage.PlayerAlive: ⋮ 632 ConsoleWrite("PLAYER_ALIVE: " + player.Handle); 633 player.Ore = 0; 634 player.Cash = 0; 635 player.Weight = 0; 636 player.Alive = true;
code/InfiniminerServer/InfiniminerServer.cs lines 630–636 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abIn Infiniminer v1.5 a player looking at their own team's bank from within 2.5 blocks presses 1 to deposit up to 50 ore into the team's shared store, which holds at most 9,999 (ore deposited past that is lost), and 2 to withdraw up to 50, as much as the player has room for. The distance and team check run in the client; the server moves the ore without checking where the player is.CodeInfiniminer v1.5 sourcerevised
How we know
418 // Deposit and withdraw from a bank. 419 if (_P.AtBankTerminal()) ⋮ 421 if (key == Keys.D1) ⋮ 423 _P.DepositOre(); 424 _P.PlaySound(InfiniminerSound.ClickHigh); ⋮ 426 if (key == Keys.D2) ⋮ 428 _P.WithdrawOre(); 429 _P.PlaySound(InfiniminerSound.ClickHigh);
code/InfiniminerClient/States/MainGameState.cs lines 418–430 at 639c16e · upstream ↗ 577 public bool AtBankTerminal() ⋮ 579 // Figure out what we're looking at. 580 Vector3 hitPoint = Vector3.Zero; 581 Vector3 buildPoint = Vector3.Zero; 582 if (!blockEngine.RayCollision(playerPosition, playerCamera.GetLookVector(), 2.5f, 25, ref hitPoint, ref buildPoint)) 583 return false; ⋮ 585 // If it's a valid bank object, we're good! 586 BlockType blockType = blockEngine.BlockAtPoint(hitPoint); 587 if (blockType == BlockType.BankRed && playerTeam == PlayerTeam.Red) 588 return true; 589 if (blockType == BlockType.BankBlue && playerTeam == PlayerTeam.Blue) 590 return true; ⋮
code/InfiniminerClient/PropertyBag.cs lines 577–592 at 639c16e · upstream ↗ 1153 public void DepositOre(Player player) ⋮ 1155 uint depositAmount = Math.Min(50, player.Ore); 1156 player.Ore -= depositAmount; 1157 if (player.Team == PlayerTeam.Red) 1158 teamOreRed = Math.Min(teamOreRed + depositAmount, 9999); 1159 else 1160 teamOreBlue = Math.Min(teamOreBlue + depositAmount, 9999); ⋮ 1163 public void WithdrawOre(Player player) ⋮ 1165 if (player.Team == PlayerTeam.Red) ⋮ 1167 uint withdrawAmount = Math.Min(player.OreMax - player.Ore, Math.Min(50, teamOreRed)); 1168 player.Ore += withdrawAmount; 1169 teamOreRed -= withdrawAmount; ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 1153–1177 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abIn Infiniminer v1.5 a solid block or a road costs 10 ore; a translucent block, a jump block, or a ladder 25; a bank, a beacon, or a shock block 50; and an explosive 100.CodeInfiniminer v1.5 source
How we know
80 public static uint GetCost(BlockType blockType) ⋮ 82 switch (blockType) ⋮ 84 case BlockType.BankRed: 85 case BlockType.BankBlue: 86 case BlockType.BeaconRed: 87 case BlockType.BeaconBlue: 88 return 50; ⋮ 90 case BlockType.SolidRed: 91 case BlockType.SolidBlue: 92 return 10; ⋮ 94 case BlockType.TransRed: 95 case BlockType.TransBlue: ⋮
code/InfiniminerClient/BlockInformation.cs lines 80–111 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^ abIn Infiniminer v1.5 the deconstruction gun, which the client offers only in the Engineer's kit, reaches 6 blocks and removes a block the user's own team built: a solid, translucent, road, ladder, jump, shock, beacon, or bank block. It refunds no ore, and it can't remove explosives or the other team's blocks. The server runs it for any client that sends the tool, checking only the block's builder team and type.CodeInfiniminer v1.5 sourcerevised
How we know
998 public void UseDeconstructionGun(Player player, Vector3 playerPosition, Vector3 playerHeading) ⋮ 1000 bool actionFailed = false; ⋮ 1002 // If there's no surface within range, bail. 1003 Vector3 hitPoint = Vector3.Zero; 1004 Vector3 buildPoint = Vector3.Zero; 1005 if (!RayCollision(playerPosition, playerHeading, 6, 25, ref hitPoint, ref buildPoint)) 1006 actionFailed = true; 1007 ushort x = (ushort)hitPoint.X; 1008 ushort y = (ushort)hitPoint.Y; 1009 ushort z = (ushort)hitPoint.Z; ⋮ 1011 // If this is another team's block, bail. 1012 if (blockCreatorTeam[x, y, z] != player.Team) ⋮
code/InfiniminerServer/InfiniminerServer.cs lines 998–1044 at 639c16e · upstream ↗ 556 case PlayerTools.DeconstructionGun: 557 UseDeconstructionGun(player, playerPosition, playerHeading);
code/InfiniminerServer/InfiniminerServer.cs lines 556–557 at 639c16e · upstream ↗ 431 case PlayerClass.Engineer: 432 playerTools = new PlayerTools[3] { PlayerTools.Pickaxe, 433 PlayerTools.ConstructionGun, 434 PlayerTools.DeconstructionGun };
code/InfiniminerClient/PropertyBag.cs lines 431–434 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^ abIn Infiniminer v1.5 the client only asks: a dig or a build is a message with the player's position, view, tool, and block type, and the server traces the view, changes its copy of the map, and sends the change to every connected player.CodeInfiniminer v1.5 source
How we know
542 case InfiniminerMessage.UseTool: ⋮ 544 Vector3 playerPosition = msgBuffer.ReadVector3(); 545 Vector3 playerHeading = msgBuffer.ReadVector3(); 546 PlayerTools playerTool = (PlayerTools)msgBuffer.ReadByte(); 547 BlockType blockType = (BlockType)msgBuffer.ReadByte(); 548 switch (playerTool) ⋮ 550 case PlayerTools.Pickaxe: 551 UsePickaxe(player, playerPosition, playerHeading); 552 break; 553 case PlayerTools.ConstructionGun: 554 UseConstructionGun(player, playerPosition, playerHeading, blockType); 555 break;
code/InfiniminerServer/InfiniminerServer.cs lines 542–555 at 639c16e · upstream ↗ 348 public void SetBlock(ushort x, ushort y, ushort z, BlockType blockType, PlayerTeam team) ⋮ 369 blockList[x, y, z] = blockType; 370 blockCreatorTeam[x, y, z] = team; ⋮ 374 msgBuffer.Write((byte)InfiniminerMessage.BlockSet); ⋮ 379 foreach (NetConnection netConn in playerList.Keys) ⋮ 381 netServer.SendMessage(msgBuffer, netConn, NetChannel.ReliableUnordered);
code/InfiniminerServer/InfiniminerServer.cs lines 348–387 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Infiniminer v1.5's server takes the block type from the client's message and checks a placement's cost and space, not the player's class: the lists of blocks each class may build are kept in the client.CodeInfiniminer v1.5 source
How we know
542 case InfiniminerMessage.UseTool: ⋮ 544 Vector3 playerPosition = msgBuffer.ReadVector3(); 545 Vector3 playerHeading = msgBuffer.ReadVector3(); 546 PlayerTools playerTool = (PlayerTools)msgBuffer.ReadByte(); 547 BlockType blockType = (BlockType)msgBuffer.ReadByte(); 548 switch (playerTool) ⋮ 550 case PlayerTools.Pickaxe: 551 UsePickaxe(player, playerPosition, playerHeading); 552 break; 553 case PlayerTools.ConstructionGun: 554 UseConstructionGun(player, playerPosition, playerHeading, blockType); 555 break;
code/InfiniminerServer/InfiniminerServer.cs lines 542–555 at 639c16e · upstream ↗ 935 public void UseConstructionGun(Player player, Vector3 playerPosition, Vector3 playerHeading, BlockType blockType) ⋮ 942 if (!RayCollision(playerPosition, playerHeading, 6, 25, ref hitPoint, ref buildPoint)) ⋮ 946 uint blockCost = BlockInformation.GetCost(blockType); 947 if (sandboxMode) ⋮ 949 if (blockCost > player.Ore) ⋮ 956 foreach (Player p in playerList.Values) ⋮ 958 if ((int)p.Position.X == x && (int)p.Position.Z == z && ((int)p.Position.Y == y || (int)p.Position.Y - 1 == y)) ⋮ 963 if (x <= 0 || y <= 0 || z <= 0 || x >= MAPSIZE - 1 || y >= MAPSIZE - 1 || z >= MAPSIZE - 1) ⋮ 971 if (blockList[(ushort)hitPoint.X, (ushort)hitPoint.Y, (ushort)hitPoint.Z] == BlockType.Lava)
code/InfiniminerServer/InfiniminerServer.cs lines 935–972 at 639c16e · upstream ↗ 396 public void SetPlayerClass(PlayerClass playerClass) ⋮ 398 if (netClient.Status != NetConnectionStatus.Connected) 399 return; ⋮ 401 this.playerClass = playerClass; ⋮ 403 NetBuffer msgBuffer = netClient.CreateBuffer(); 404 msgBuffer.Write((byte)InfiniminerMessage.SelectClass); 405 msgBuffer.Write((byte)playerClass); 406 netClient.SendMessage(msgBuffer, NetChannel.ReliableUnordered); ⋮ 408 playerToolSelected = 0; 409 playerBlockSelected = 0; ⋮ 411 switch (playerClass)
code/InfiniminerClient/PropertyBag.cs lines 396–411 at 639c16e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Persson wrote in 2009 that on finding Infiniminer he realized "that was the game I wanted to do". He found it flawed and tried a first-person engine in its style.Dev blogNotch, "The origins of Minecraft", 30 October 2009
How we know
But then I found Infiniminer. My god, I realized that that was the game I wanted to do. … I thought a fantasy game in that style would work really really well, so I tried to implement a simple first person engine in that style
The origins of Minecraft · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Rock Paper Shotgun wrote in 2011 that both games let players strip blocks away with ease, but where Minecraft was about building, exploring, and excavating, Infiniminer was about competing, exploring, and excavating.WebRPS, "Proto-MineCraft Abandoned Due To Epic Error", 20 January 2011
How we know
while MineCraft is (currently, at least) about the joy of building, exploring and excavating, Infiniminer was about the joy of competing, exploring and excavating.
article body · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Infiniminer v1.5's pickaxe takes out a dirt, ore, gold, or diamond block with each successful use and can't dig rock at all. In Minecraft today, by the Minecraft Wiki's account, breaking a block takes time set by its hardness and the tool held, stone and metal blocks yield nothing without a pickaxe, and a few blocks such as bedrock can't be broken in Survival.WikiInfiniminer v1.5 source · Minecraft Wiki: Breaking · Minecraft Wiki: Gameplayrevised
How we know
864 switch (BlockAtPoint(hitPoint)) ⋮ 866 case BlockType.Dirt: 867 case BlockType.DirtSign: 868 removeBlock = true; ⋮ 872 case BlockType.Ore: 873 removeBlock = true; ⋮ 878 case BlockType.Gold: 879 removeBlock = true; ⋮ 885 case BlockType.Diamond: 886 removeBlock = true;
code/InfiniminerServer/InfiniminerServer.cs lines 864–891 at 639c16e · upstream ↗ 914 if (removeBlock) ⋮ 916 SetBlock(x, y, z, BlockType.None, PlayerTeam.None); 917 PlaySound(sound, player.Position);
code/InfiniminerServer/InfiniminerServer.cs lines 914–918 at 639c16e · upstream ↗ The base time in seconds is the block's hardness multiplied by: 1.5 if the player can harvest the block with the current tool; 5 if the player cannot.
Speed · archived copy ↗ In particular, to obtain resources from stone or metal-type blocks, the player must use a pickaxe.
lead · archived copy ↗ Some blocks cannot be broken in Survival, such as bedrock, End portal frames, command blocks, and barriers.
Gameplay, lead · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Revised after a check by a second AI model, 2026-10-26.
- ^Asked in 2011 whether having made Minecraft's precursor raised conflicting emotions, Barth answered that borrowing ideas is integral to the creative process. Asked whether he saw value in building for its own sake, he said he thought it terrific: "That's why I made a game about it!"InterviewRPS, Barth interview, 20 January 2011
How we know
The act of borrowing ideas is integral to the creative process. There are games that came before Infiniminer, and there are games that will come after MineCraft. That's how it works.
answer to "Do you ever lie awake at night, howling into your pillow?" · archived copy ↗ Hell no; I think it's terrific. That's why I made a game about it!
answer to the question on building and landscaping for its own sake · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^In September 2010 a player asked in the release post's comments whether he could use the idea for his own game "like Minecraft did". Barth replied that he couldn't give permission "because there's no such thing. Go on and have a blast!"Dev blogBarth, "Infiniminer", 29 April 2009
How we know
I guess what I'm asking is if I can use this idea like Minecraft did?
comment by mirhagk, 25 September 2010, 7:00 am · archived copy ↗ I can't give you "permission" because there's no such thing. Go on and have a blast!
comment by Zach, 25 September 2010, 7:45 pm · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^On Minecraft's success Barth told Cascade PBS in 2015: "It was never my plan to have what happened, happen. You don't plan things in life."InterviewCascade PBS, Barth interview, 10 August 2015
How we know
It was never my plan to have what happened, happen. You don't plan things in life," Barth says.
section on Minecraft · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^Michal Kovařík (kovarex), Factorio's founder, wrote in 2014 that modded Minecraft, "mainly buildcraft/industrialcraft", was a huge inspiration to create Factorio, and that he had made private changes to those mods before he had the idea for a game of his own.Dev blogkovarex, Reddit, 1 August 2014
How we know
I never ever tried to hide the fact, that Modded minecraft, mainly buildcraft/industrialcraft, was huge inspiration to create Factorio. In fact, before even the idea to create my own game came to my mind, I started to make my own (private) changes to these minecraft mods.
kovarex's comment, 1 August 2014 · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
- ^The README of Perttu Ahola's Minetest-c55, as of November 2011, opens by calling it "An InfiniMiner/Minecraft inspired game".DeveloperMinetest-c55 README, 3 November 2011
How we know
1Minetest-c55 2--------------- 3An InfiniMiner/Minecraft inspired game.
README.txt lines 1–3 at 1469196 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.
Sources
Code
- Barth, Zach. 2009. “Infiniminer v1.5 source code.” Commit 639c16e. gibbed/Infiniminer @ 639c16e · archived · licence, all uses
- Ahola, Perttu. 2011. “Minetest-c55 README.” Commit 1469196. celeron55/minetest @ 1469196 · licence, all uses
Primary
- Barth, Zach. 2009. “Infiniminer — Zachtronics Industries.” Zachtronics Industries. original · archived · licence, all uses
- Nierenberg, Jacob and Zachary Barth. 2015. “The local origins of Minecraft: A conversation with indie gamer Zachary Barth.” Cascade PBS (Crosscut). original · archived · licence, all uses
- Smith, Quintin and Zach Barth. 2011. “My Chemical Romance: Zach Barth Interview.” Rock Paper Shotgun. original · archived · licence, all uses
- Barth, Zach. 2009. “Apparently I’m now in charge of an open source project.” Zachtronics Industries. original · archived · licence, all uses
- Barth, Zach. 2009. ““goodbye is only eybdoog backwards”.” Zachtronics Industries. original · archived · licence, all uses
- Persson, Markus. 2009. “The origins of Minecraft.” The Word of Notch (Tumblr). original · archived · licence, all uses
- Zachtronics. n.d. “Zachtronics | Infiniminer.” Zachtronics. original · archived · licence, all uses
- Kovařík, Michal. 2014. “kovarex on Factorio and modded Minecraft (Nerd³ video thread).” Reddit (r/nerdcubed). original · archived · licence, all uses
Secondary
- Minecraft Wiki contributors. n.d. “Infiniminer — Minecraft Wiki.” original · archived · licence, all uses
- Caldwell, Brendan. 2016. “Have You Played… Infiniminer?” Rock Paper Shotgun. original · archived · licence, all uses
- Smith, Graham. 2014. “Infinifactory: By The Maker Of SpaceChem And Infiniminer.” Rock Paper Shotgun. original · archived · licence, all uses
- Smith, Quintin. 2011. “Proto-MineCraft Abandoned Due To Epic Error.” Rock Paper Shotgun. original · archived · licence, all uses
- Minecraft Wiki contributors. n.d. “Breaking.” Minecraft Wiki. original · archived · licence, all uses
- Minecraft Wiki contributors. n.d. “Gameplay.” Minecraft Wiki. original · archived · licence, all uses