seedlookout
English

OVERWORLD · UNDERGROUND

Stronghold

Page updated

Underground stone-brick labyrinths with libraries, corridors, and an End portal room. Players track them down with eyes of ender to reach the End, and loot books, gear, and Eye armor trim templates on the way.

This guide follows vanilla Java 26.3. Historical changes retain their own edition and version. Bedrock generation and loot can differ. Screenshots and verified seeds below retain their own game versions.

Java 26.3 · Released · Reviewed

End portal frames and a silverfish spawner inside a stone-brick stronghold portal room
Stronghold at -393, -40, -1478Seed 28462718234064871 · Java 26.3 · overworldReference capture · Naturally generated structure, photographed in Minecraft Java 26.3.

Game data and source research

Where it generates in Java 26.3

The Java 26.3 eligibility tag contains the Overworld biome set. A separate preferred-biome list influences where ring candidates move; it is not the same as the allowed-biome list. [2][5]

Candidate positions and rarity

Java 26.3 uses concentric rings with 128 requested stronghold positions, rather than a random-spread spacing grid. [3][4]

The placement configuration requests 128 positions with distance 32 and initial spread 3. The ring algorithm changes the radius and number of positions by ring, then searches within 112 blocks for a preferred biome. These settings are not a uniform chunk spacing or a fixed distance between neighboring strongholds. [1][3][4][5]

What the starting position means

The Java piece generator retries its layout until it has a portal-room piece and a nonempty result, then moves the layout below sea level. This is an implementation guarantee about the generated piece graph, not a claim that every room remains unobstructed after all world generation. [1][4][5]

A branching underground route to the portal

Strongholds are assembled from corridors, turns, stairs, crossings, prison halls, libraries and a portal room. A corridor chest or a library is a useful landmark, but neither is a reliable arrow toward the portal. Keep track of junctions and changes of level. [6]

The Java generator retries the layout until its start piece has a portal-room reference. Libraries are optional selected pieces, with short and tall forms depending on available space. A limit of two library pieces in the selector is a maximum, not a promise of two libraries. [6]

A branching underground route to the portal
PartWhat to look for
Portal roomEnd-portal frames over lava, with a silverfish spawner on the approach. [6]
LibraryBookshelves and chest positions; the taller form includes an upper level. [6]
Crossings and stairsBranching routes make a marked return path useful. [6]

Silverfish and unfinished portals

The portal-room piece places a silverfish spawner. Some structural stone-brick selections also use infested blocks, so breaking through walls can expose a separate silverfish hazard. Removing the visible spawner does not remove infested blocks elsewhere. [6]

Portal-frame eyes are selected individually during room construction. Inspect the actual frame before planning how many eyes to bring; a room being part of the generated plan does not mean its portal is already active. [6]

Loot and rewards in Java 26.3

Stronghold corridor, crossing and library chests use separate tables. The library table guarantees an Eye armor trim template, while the corridor table gives its dedicated trim draw a one-in-ten chance. The crossing table contains no Eye trim entry. [7]

The library main pool has 2–10 selections and favors books and paper. An enchanted book is a separate weight 10 entry in total weight 52, modified at enchantment level 30. A chest with plain books should not be counted as a successful enchanted-book selection. [7]

The corridor table contains ender pearls rather than Eyes of Ender. Loot in a corridor chest therefore does not establish how many filled frames or spare eyes the portal room has. Portal activation is a different generation/gameplay rule. [7]

Compared directly with Java 1.20.1, the Java 26.3 tables differ. The inspected stronghold corridor table gains Copper horse armor, Leather and no longer lists Saddle; its first pool changes from total weight 100 to 101. Use the current weights rather than carrying older chest percentages forward. [7][9]

Loot and rewards in Java 26.3
ItemWhere the rule appliesWhat the data establishes
Eye armor trim templateOne library-table chestGuaranteed: one template in its own pool. [7][8]
Eye armor trim templateOne corridor-table chest10.0% from one template versus empty weight 9. [7]
Enchanted bookOne library-table chest67.8% chance of at least one dedicated enchanted-book selection. [7][8]
Ender pearlOne corridor-table chest22.8% chance of at least one pearl selection. [7][8]
DiamondOne corridor-table chest7.3% chance of at least one diamond selection; each supplies 1–3. [7][8]

Version history and release dates

These milestones retain their edition and exact build labels. Snapshot, beta and preview dates belong to those development builds; full releases and staggered Pocket platform releases are dated separately. Historical introduction claims come from the cited Wiki history. [10]

Version history and release dates
VersionReleasedWhat changed
Java Beta 1.8September 14, 2011Introduced strongholds, initially without functional End portals. [10][12]
Java 1.0.0November 18, 2011Added functional End portals and eye-of-ender navigation. [10][13]
Java 1.9February 29, 2016Expanded the world count from three strongholds to 128. [10][14]
Java 1.17June 8, 2021Covered ocean strongholds with seabed terrain. [10][15]
Java 1.19.3December 7, 2022Changed placement code, shifting stronghold positions for existing seeds. [10][16]
Java 1.20June 7, 2023Added Eye armor trim templates, guaranteed in library chests. [10][17]
Bedrock 1.20.70March 12, 2024Made an End portal room mandatory during stronghold generation. [10][18]
Java 1.21.4December 3, 2024Made stronghold eligibility in the Pale Garden available outside experiments. [10][19]
Java 1.21.6June 17, 2025Replaced saddle loot in altar chests with 1–5 leather. [10][20]
Java 1.21.9September 30, 2025Added copper horse armor to altar chest loot. [10][21]

SeedLookout in-game verification

Screenshots

End portal frame and stone-brick stairs in a stronghold portal room
Stronghold at -398, -38, -1477Seed 28462718234064871 · Java 26.3 · overworldReference capture · Naturally generated structure, photographed in Minecraft Java 26.3.

Our screenshots of naturally generated structures in Minecraft. Each caption gives the seed, coordinates and version. Select one to open it at full size.

Seeds with this stronghold

None of our verified seeds includes this structure yet. The guide cites game data, code analysis and other references; it does not verify a seed.

Sources

References identify the edition, version and evidence behind the guide. Game code and data describe generation rules; the seed table records locations checked in game. Research reviewed 2026-10-02.

  1. Mojang Java 26.3: structure configuration ↗Official game data · Java 26.3

    Inner archive META-INF/versions/26.3/server-26.3.jar: data/minecraft/worldgen/structure/stronghold.json

    Evidence details

    Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. SHA-256 by archive member: data/minecraft/worldgen/structure/stronghold.json = 2040ff702a3fd6efd075758bda74ecf8fdd51e6bf5b468c1ddbfa0078c18c812

  2. Mojang Java 26.3: resolved starting-biome tags ↗Official game data · Java 26.3

    Inner archive META-INF/versions/26.3/server-26.3.jar: data/minecraft/tags/worldgen/biome/has_structure/stronghold.json; data/minecraft/tags/worldgen/biome/is_overworld.json; data/minecraft/tags/worldgen/biome/stronghold_biased_to.json

    Evidence details

    Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. SHA-256 by archive member: data/minecraft/tags/worldgen/biome/has_structure/stronghold.json = 32585cc68dbf73fca70dd022de1177585adad75d0126e15820d7c21b47b98b89; data/minecraft/tags/worldgen/biome/is_overworld.json = 036ff207134fa4e3540a69537f7e53f7fd111ac4a401ea7f0b23b78c3a0a87b8; data/minecraft/tags/worldgen/biome/stronghold_biased_to.json = dc3aa440f6c6e2a2766be3df4770f4cc80c01f351adb8718720866d0786f0b10

  3. Mojang Java 26.3: candidate placement settings ↗Official game data · Java 26.3

    Inner archive META-INF/versions/26.3/server-26.3.jar: data/minecraft/worldgen/structure_set/strongholds.json

    Evidence details

    Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. SHA-256 by archive member: data/minecraft/worldgen/structure_set/strongholds.json = efac2e2976f903b89fe9532e7c8b297bd61aae3a16e92d9374b279b7f3109b95

  4. Mojang Java 26.3: candidate filtering and weighted retries ↗Decompiled game implementation · Java 26.3

    Inner archive META-INF/versions/26.3/server-26.3.jar: net/minecraft/world/level/chunk/ChunkGenerator.class; net/minecraft/world/level/levelgen/structure/placement/AbstractSpreadingStructurePlacement$ExclusionZone.class; net/minecraft/world/level/levelgen/structure/placement/AbstractSpreadingStructurePlacement$FrequencyReducer.class; net/minecraft/world/level/levelgen/structure/placement/AbstractSpreadingStructurePlacement$FrequencyReductionMethod.class; net/minecraft/world/level/levelgen/structure/placement/AbstractSpreadingStructurePlacement.class; net/minecraft/world/level/levelgen/structure/placement/RandomSpreadStructurePlacement.class. Methods: RandomSpreadStructurePlacement.getPotentialStructureChunk; AbstractSpreadingStructurePlacement.isStructureChunk; ChunkGenerator.createStructures / tryGenerateStructure

    Evidence details

    Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. Implementation inspected using CFR 0.152; reconstructed Java is not an original Mojang source publication. SHA-256 by archive member: net/minecraft/world/level/chunk/ChunkGenerator.class = 7e5145ec6e36cbc7af979e869d4947c85e4715b8d13105f1369f0a385c40851d; net/minecraft/world/level/levelgen/structure/placement/AbstractSpreadingStructurePlacement$ExclusionZone.class = eb0d49eb1ffb0714fbdb04abde954fbdbd50cfeafd411f593de8159a06488300; net/minecraft/world/level/levelgen/structure/placement/AbstractSpreadingStructurePlacement$FrequencyReducer.class = e2887ebf5f8937ca3b038d6e1c40bc1c77f983a97b5b7ed9bdcd78b59d103e82; net/minecraft/world/level/levelgen/structure/placement/AbstractSpreadingStructurePlacement$FrequencyReductionMethod.class = 3664480026b9e91c8235bdbf6d98fdbbb78586f8d0decee70f9ea788d3291a71; net/minecraft/world/level/levelgen/structure/placement/AbstractSpreadingStructurePlacement.class = 0775a5cd47242fafd7f9977a9cfb821a6fffe5d1defcbc3bf8cded7e2427a4a8; net/minecraft/world/level/levelgen/structure/placement/RandomSpreadStructurePlacement.class = 8fbeed7711f96285b9b39b2e8363ffaa6ea80dd03baea4c1e6fa98e90b7f8eb9

  5. Mojang Java 26.3: generation entry points ↗Decompiled game implementation · Java 26.3

    Inner archive META-INF/versions/26.3/server-26.3.jar: net/minecraft/world/level/chunk/ChunkGeneratorStructureState.class; net/minecraft/world/level/levelgen/structure/Structure$GenerationContext.class; net/minecraft/world/level/levelgen/structure/Structure$GenerationStub.class; net/minecraft/world/level/levelgen/structure/Structure$StructureSettings$Builder.class; net/minecraft/world/level/levelgen/structure/Structure$StructureSettings.class; net/minecraft/world/level/levelgen/structure/Structure.class; net/minecraft/world/level/levelgen/structure/pieces/StructurePiecesBuilder.class; net/minecraft/world/level/levelgen/structure/placement/ConcentricRingsStructurePlacement.class; net/minecraft/world/level/levelgen/structure/structures/StrongholdStructure.class. Methods: StrongholdStructure.findGenerationPoint; Structure.findValidGenerationPoint; Structure.GenerationContext.isValidBiome; generatePieces; ChunkGeneratorStructureState.generateRingPositions; StructurePiecesBuilder.moveBelowSeaLevel / moveInsideHeights

    Evidence details

    Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. Implementation inspected using CFR 0.152; reconstructed Java is not an original Mojang source publication. SHA-256 by archive member: net/minecraft/world/level/chunk/ChunkGeneratorStructureState.class = 1c5a2d924f5b40fe704e562a8b8710cd7a0bb0b0312e6225972c1692dea495ff; net/minecraft/world/level/levelgen/structure/Structure$GenerationContext.class = 0c4335baa022b0482299b5cc0a3d0492fd3160542640b2538a5b8934822cc12b; net/minecraft/world/level/levelgen/structure/Structure$GenerationStub.class = e7a25f7418cfbfafaa6ecc1558a4bacde160ab247be6997df4aef3288da76a52; net/minecraft/world/level/levelgen/structure/Structure$StructureSettings$Builder.class = e9b9a37f14f156749ceb686ab31f34954c3b65c0e9f1ff43cdebb508a72b1261; net/minecraft/world/level/levelgen/structure/Structure$StructureSettings.class = 5796d330ef7ea491ee64b34ccdfe6c08a62b71886441bd87cd327a2fc6188f80; net/minecraft/world/level/levelgen/structure/Structure.class = fa023ce735376b7042242948275a0869a7e22d30e5e4c5c6502b521578577188; net/minecraft/world/level/levelgen/structure/pieces/StructurePiecesBuilder.class = cd5a2c5d9d185a35017c843344d551b3953d3ea8774ecad76859eb0b45eb2e83; net/minecraft/world/level/levelgen/structure/placement/ConcentricRingsStructurePlacement.class = 15d8c9fc028f68ff303ce08a210913e62c133ee9f53fcbf87b4679a2cd1d5177; net/minecraft/world/level/levelgen/structure/structures/StrongholdStructure.class = d26deffd4f2150be586ab0df646975574080f5a5bcb7fefd72ba68a8880141fc

  6. Mojang Java 26.3: stronghold layout and encounter implementation ↗Decompiled game implementation · Java 26.3

    net.minecraft.world.level.levelgen.structure.structures.StrongholdPieces; net.minecraft.world.level.levelgen.structure.structures.StrongholdStructure; StrongholdStructure.generatePieces retry loop; StrongholdPieces.PortalRoom.postProcess, Library.createPiece, SmoothStoneSelector.next and piece-weight selector.

    Evidence details

    Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c; inner META-INF/versions/26.3/server-26.3.jar SHA-256 a362163eec5d1612d520772bc16e5b39c09e3b234fdc045f56bf544284ee8ae6. Official bytecode inspected through CFR 0.152; reconstructed implementation, not an original source checkout.

  7. Mojang Java 26.3: stronghold loot data ↗Official game data · Java 26.3

    Inner META-INF/versions/26.3/server-26.3.jar: data/minecraft/loot_table/chests/stronghold_corridor.json; data/minecraft/loot_table/chests/stronghold_crossing.json; data/minecraft/loot_table/chests/stronghold_library.json

    Evidence details

    Verified official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. File SHA-256s: stronghold_corridor.json: 56c3aa579210fb4e28dd7feb0bfae510d58f78efc2eeb4700120977cc56d9dff; stronghold_crossing.json: f04aa0184c19cad0e2d6c17adefd1e9bd94587f85a7e712550c99fd99bef4766; stronghold_library.json: a918999b56a6f8b71de0ab8fa8e0f9f6074b506866cf92873fbc3f948f48a86c. Table identity and conditional item rules are distinct from any particular generated container.

  8. Java 26.3 stronghold: calculated selection odds ↗Calculated from game data · Java 26.3

    Relevant /pools indices in the data reference; LootPool.addRandomItem/addRandomItems; UniformContainerBase.uniformFields; UniformGenerator.getIntUnsafe.

    Evidence details

    For direct unconditional weighted pools, chance of at least one selection is 1 minus the average of (1−weight/totalWeight)^n over inclusive uniform integer rolls. Values are theoretical table-invocation probabilities, not seed frequencies. Exact inputs: [{"itemId":"minecraft:eye_armor_trim_smithing_template","table":"data/minecraft/loot_table/chests/stronghold_library.json","pool":1,"chance":1.0,"fraction":"1","weight":1,"total":1,"rolls":[1]},{"itemId":"minecraft:enchanted_book","table":"data/minecraft/loot_table/chests/stronghold_library.json","pool":0,"chance":0.6782168579212768,"fraction":"95741904055905/141167095653376","weight":10,"total":52,"rolls":[2,3,4,5,6,7,8,9,10]},{"itemId":"minecraft:ender_pearl","table":"data/minecraft/loot_table/chests/stronghold_corridor.json","pool":0,"chance":0.22840412656107292,"fraction":"235325/1030301","weight":10,"total":101,"rolls":[2,3]},{"itemId":"minecraft:diamond","table":"data/minecraft/loot_table/chests/stronghold_corridor.json","pool":0,"chance":0.07250599582063882,"fraction":"74703/1030301","weight":3,"total":101,"rolls":[2,3]}]

  9. Mojang Java 1.20.1: inspected historical stronghold loot ↗Official game data · Java 1.20.1

    data/minecraft/loot_tables/chests/stronghold_corridor.json; data/minecraft/loot_tables/chests/stronghold_library.json

    Evidence details

    Limited comparison of the listed data files; no claim that all intermediate releases share either table. SHA-256s: stronghold_corridor.json: 6937f3ca3d91052c3e8fd2a516725aecfc735d990cfdce5677d13dfad030b8a9; stronghold_library.json: 9fde26670b980b52a15969fee9cba958c8f12ea61e75974bd3cd8ee15d0d9722

  10. Minecraft Wiki: Stronghold — pinned history ↗Minecraft Wiki · Java and Bedrock Revision 3808517

    History section, retaining edition, release grouping, development-version and experimental-toggle qualifiers.

    Evidence details

    Pinned article revision 3808517 from 2026-10-01T01:31:36Z. Historical claims only; not an audited game build or release-date source.

  11. Minecraft Wiki: Stronghold description ↗Minecraft Wiki · Java and Bedrock revision 3808517

    Opening description and History

    Evidence details

    Pinned article revision 3808517; retrieved October 1, 2026. Article history supports historical introductions; current generation and loot are audited separately from game data.

  12. Java Beta 1.8: release date ↗Official game data · Java Beta 1.8

    /id; /releaseTime

    Evidence details

    Release metadata establishes its date, not feature introduction. Original Wiki history must support introduction separately.

  13. Java 1.0.0: release date ↗Official documentation · Java 1.0.0

    2011: Minecraft 1.0 Released – and the First Port Arrives; November 18, 2011

    Evidence details

    Official Xbox retrospective establishes the public launch date. Mojang legacy metadata retains releaseTime 2011-11-17T22:00:00+00:00; its UTC calendar day is not the public launch date.

  14. Java 1.9: release date ↗Official game data · Java 1.9

    /id; /releaseTime

    Evidence details

    Release metadata establishes its date, not feature introduction. Original Wiki history must support introduction separately.

  15. Java 1.17: release date ↗Official game data · Java 1.17

    /id; /releaseTime

    Evidence details

    Release metadata establishes its date, not feature introduction. Original Wiki history must support introduction separately.

  16. Java 1.19.3: release date ↗Official game data · Java 1.19.3

    /id; /releaseTime

    Evidence details

    Date belongs to the exact 1.19.3 build. Snapshot and prerelease dates are separate from the later full release; metadata does not prove the feature introduction.

  17. Java 1.20: release date ↗Official documentation · Java 1.20

    Opening announcement: Trails & Tales Update will be coming to a device near you on June 7

    Evidence details

    Public release June 7, 2023. Mojang metadata retains releaseTime 2023-06-02T08:36:17+00:00; this earlier build timestamp must not be displayed as the public launch date.

  18. Bedrock 1.20.70: release date ↗Minecraft Wiki · Bedrock 1.20.70

    Version infobox release date

    Evidence details

    Pinned community version article date; snapshots, betas and previews have their own release dates, separately from the full version.

  19. Java 1.21.4: release date ↗Official game data · Java 1.21.4

    /id; /releaseTime

    Evidence details

    Date belongs to the exact 1.21.4 build. Snapshot and prerelease dates are separate from the later full release; metadata does not prove the feature introduction.

  20. Java 1.21.6: release date ↗Official game data · Java 1.21.6

    /id; /releaseTime

    Evidence details

    Date belongs to the exact 1.21.6 build. Snapshot and prerelease dates are separate from the later full release; metadata does not prove the feature introduction.

  21. Java 1.21.9: release date ↗Official game data · Java 1.21.9

    /id; /releaseTime

    Evidence details

    Date belongs to the exact 1.21.9 build. Snapshot and prerelease dates are separate from the later full release; metadata does not prove the feature introduction.

Item art uses vanilla Java 26.3 assets from the official client release. Icons retain their game version alongside the guide.

Descriptions adapted from the Minecraft Wiki retain its attribution under CC BY-NC-SA 3.0. Calculations and code analysis are SeedLookout research. Screenshot captions identify each capture. The seed table contains our published verified seeds; checking a location does not establish particular room contents or chest loot.