On this page
  1. How it plays
  2. In Minecraft’s lineage
  3. Footnotes
  4. Related
  5. Mechanics
  6. References
  7. Sources

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

  1. An ore block gives 20 ore. Gold is worth $100 a block and a diamond $1,00025. ↩

  2. 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. ↩

  3. $10,000 unless the server sets another figure2. ↩

  4. Solid block or road 10 ore; translucent, ladder, or jump 25; bank, beacon, or shock 50; explosive 10029. ↩

Mechanics

MechanicKindHow
Destructible terrainBreakable tilesthe pickaxe digs dirt, ore, gold, and diamonds out a block at a time; rock gives way only to a Sapper's explosives
Resource harvestingCarried loadsplayers carry ore to their team's bank, and gold and diamonds up to the surface, where they become the team's cash
ConstructionPay up fronta block's whole price in ore leaves the builder's pocket the moment it's placed
Inventory capacityQuantityeach 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)
generalZach 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 blog
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 blog
Cascade PBS's 2015 profile says Infiniminer was released as a free download in the spring of 2009.Interview
Infiniminer is Barth's game, released under his studio name, Zachtronics Industries. Chris Gengler helped with the art.Dev blog
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.Interview
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.Interview
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.Wiki
Barth 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.Interview
On 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 blog
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 blog
Rock 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.Web
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.Wiki
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.Interview
Markus 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 blog
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.Web
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!"Interview
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 blog
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."Interview
The README of Perttu Ahola's Minetest-c55, as of November 2011, opens by calling it "An InfiniMiner/Minecraft inspired game".Developer
Rock 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.Web
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".Publisher
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.Publisher
Infiniminer v1.5 has two teams, Red and Blue, and four classes: Prospector, Miner, Engineer, and Sapper.Code
In 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.Code
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.Code
In 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.Code
In Infiniminer v1.5 a player who dies, or respawns, drops to no ore, no cash, and no loot.Code
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.Code
In 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.Code
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.Wiki
ConstructionIn 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.Code
In 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.Code
Destructible terrainIn 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.Code
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.Code
Inventory capacityIn 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.Code
Resource harvestingIn 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.Code
In 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.Code
In 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.Code

References

  1. ^ 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.

    In the claim ledger

  2. ^ 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.

    In the claim ledger

  3. ^ 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.

    In the claim ledger

  4. ^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.

    In the claim ledger

  5. ^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.

    In the claim ledger

  6. ^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.

    In the claim ledger

  7. ^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.

    In the claim ledger

  8. ^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.

    In the claim ledger

  9. ^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.

    In the claim ledger

  10. ^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.

    In the claim ledger

  11. ^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.

    In the claim ledger

  12. ^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.

    In the claim ledger

  13. ^ 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.

    In the claim ledger

  14. ^ 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 the claim ledger

  15. ^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.

    In the claim ledger

  16. ^ 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.

    In the claim ledger

  17. ^ 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.

    In the claim ledger

  18. ^ 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.

    In the claim ledger

  19. ^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.

    In the claim ledger

  20. ^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.

    In the claim ledger

  21. ^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.

    In the claim ledger

  22. ^ 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.

    In the claim ledger

  23. ^ 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 the claim ledger

  24. ^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.

    In the claim ledger

  25. ^ 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.

    In the claim ledger

  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 the claim ledger

  27. ^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.

    In the claim ledger

  28. ^ 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.

    In the claim ledger

  29. ^ 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.

    In the claim ledger

  30. ^ 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.

    In the claim ledger

  31. ^ 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.

    In the claim ledger

  32. ^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.

    In the claim ledger

  33. ^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.

    In the claim ledger

  34. ^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.

    In the claim ledger

  35. ^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.

    In the claim ledger

  36. ^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 the claim ledger

  37. ^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.

    In the claim ledger

  38. ^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.

    In the claim ledger

  39. ^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.

    In the claim ledger

  40. ^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.

    In the claim ledger

Sources

Code

Primary

Secondary