OVERWORLD · OCEAN
Ocean Ruins
Page updated
Ruined buildings on the ocean floor, sometimes gathered in clusters. Their chests can hold treasure maps; brushing suspicious blocks can uncover pottery sherds, and warm ruins can also yield sniffer eggs.
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.

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
Warm ruins allow Warm Ocean, Lukewarm Ocean and Deep Lukewarm Ocean. Cold ruins allow Ocean, Deep Ocean, Cold Ocean, Deep Cold Ocean, Frozen Ocean and Deep Frozen Ocean. [2][5]
Candidate positions and rarity
Java 26.3 selects one potential starting chunk per 20×20-chunk region (320 blocks on each side). Candidate selection happens before successful structure generation; this is not a measured density or an average travel distance. [3][4]
The generation entry point samples the ocean-floor heightmap, then hands the start to the ocean-ruin piece generator. A candidate coordinate identifies the start area rather than the position of every building in a possible cluster. [1][3][4][5]
What the starting position means
Warm and cold entries share a 20×20-chunk candidate grid. Equal entry weights are filtered by biome eligibility and retried after failure; they do not make warm and cold ruins equally likely in the same ocean biome. [1][4][5]
Warm sandstone and cold stone ruins
Warm and cold ocean ruins use different template families, with small and large pieces. A large ruin can be accompanied by smaller ruins nearby. Search around the main outline before concluding that the site is one isolated building. [6]
Cold ruins can combine brick, cracked and mossy layers; the repeated template names are material layers, not three separate treasure buildings. Warm ruins use their own sandstone designs. Placement adjusts the pieces to the ocean floor and removes some blocks to create their broken appearance. [6]
Placed drowned and underwater hazards
Drowned data markers create persistent drowned as the ruin is placed. A marked drowned is an initial resident, not a spawner block. Ordinary drowned spawning elsewhere in suitable water is a separate process. [6]
Warm and cold ruins also use archaeology processors. Search the rubble as well as the chest location, but keep an exit to breathable space: broken walls can hide both an approach route and an enemy. [6]
Loot and rewards in Java 26.3
Large and small ocean ruins have different chest tables, while warm and cold ruins have different archaeology tables. A chest roll and a successfully brushed block are separate reward attempts. [7]
The warm archaeology table has total weight 15. Sniffer egg, Angler, Shelter and Snort sherds each weigh 1. The cold table also totals 15, with Blade, Explorer, Mourner and Plenty sherds weighing 1 each; it does not include the sniffer egg. [7]
The large-chest special pool has a buried-treasure map entry of weight 10 in total 23; the small counterpart has weight 5 in total 12. Both run exploration_map and then a map_id filter with on_fail discard. Those weights describe map-entry selection, not an unconditional chance of a usable map. Both chest sizes have a separate nautilus-armor draw with empty 148 and armor weights 20, 10, 5 and 2. [7]
Compared directly with Java 1.20.1, the Java 26.3 tables differ. The inspected underwater ruin big table gains Buried treasure map, Copper nautilus armor, Diamond nautilus armor, Golden nautilus armor, Iron nautilus armor, Stone spear and no longer lists Map; its first pool changes from total weight 31 to 33. The inspected underwater ruin small table gains Buried treasure map, Copper nautilus armor, Diamond nautilus armor, Golden nautilus armor, Iron nautilus armor, Stone spear and no longer lists Map; its first pool changes from total weight 28 to 30. Use the current weights rather than carrying older chest percentages forward. The older minecraft:map entry with an exploration_map modifier is replaced by a dedicated minecraft:buried_treasure_map entry; treasure maps already existed in Java 1.20.1. [7][9]
| Item | Where the rule applies | What the data establishes |
|---|---|---|
| One successful warm-ruin-table brush | 6.7% chance; absent from the compared cold archaeology table. [7][8] | |
| One successful warm-ruin-table brush | 6.7% chance; the two other warm sherds have the same weight. [7][8] | |
| One successful cold-ruin-table brush | 6.7% chance; the other three cold sherds have the same weight. [7][8] | |
| Special chest pool, separately for big/small tables | Selection weights are 10/23 and 5/12 respectively; failed map creation is discarded. [7] | |
| One ruin-table chest, either size | 1.1% chance; a separate pool with diamond weight 2 of total 185. [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][11]
| Version | Released | What changed |
|---|---|---|
| Java 1.13 (18w09a) | March 1, 2018 | Introduced cold and warm underwater ruins. [10][11][12] |
| Java 1.13 (18w10a) | March 6, 2018 | Added buried treasure maps to ruin chests. [10][11][13] |
| Java 1.13 (18w16a) | April 19, 2018 | Added drowned during ruin generation. [10][11][14] |
| Bedrock 1.4.0 | May 16, 2018 | Introduced underwater ruins in the Update Aquatic. [10][11][15] |
| Java 1.16 | June 23, 2020 | Reduced the frequency of ocean ruins. [10][11][16] |
| Java 1.20 | June 7, 2023 | Cold ruins gained suspicious gravel and warm ruins gained suspicious sand. [10][11][17] |
| Java 1.21.11 | December 9, 2025 | Ruin chests gained stone spears and nautilus armor, and zombie nautiluses were added as possible ruin spawns. [10][11][18] |
| Bedrock 1.21.130 | December 9, 2025 | Zombie nautiluses were added as possible ruin spawns. [10][11][19] |
| Java 26.3 | September 15, 2026 | Added abandoned-camp explorer maps leading to warm ocean ruins. [11][20] |
| Bedrock 26.50 | September 15, 2026 | Added abandoned camp explorer maps that can lead to warm ocean ruins. [11][21] |
SeedLookout in-game verification
Screenshots

28462718234064871 · Java 26.3 · overworldReference capture · Naturally generated structure, photographed in Minecraft Java 26.3.
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 ocean ruins
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.
- Mojang Java 26.3: structure configuration ↗
Inner archive META-INF/versions/26.3/server-26.3.jar: data/minecraft/worldgen/structure/ocean_ruin_cold.json; data/minecraft/worldgen/structure/ocean_ruin_warm.json
Evidence details
Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. SHA-256 by archive member: data/minecraft/worldgen/structure/ocean_ruin_cold.json = a30893dd35a7c93439f67644a94d591a6608bdddf283ed7dadb62dcc7eeeca4f; data/minecraft/worldgen/structure/ocean_ruin_warm.json = 60d139b7c4b6ef999b429b048fc930ca7a34c7f6ffcad657848abc8f2b079c34
- Mojang Java 26.3: resolved starting-biome tags ↗
Inner archive META-INF/versions/26.3/server-26.3.jar: data/minecraft/tags/worldgen/biome/has_structure/ocean_ruin_cold.json; data/minecraft/tags/worldgen/biome/has_structure/ocean_ruin_warm.json
Evidence details
Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. SHA-256 by archive member: data/minecraft/tags/worldgen/biome/has_structure/ocean_ruin_cold.json = 2a830ddda1101ca486aac396259c4e7f02d8c87575b1ab48c1b4ccf3c542100c; data/minecraft/tags/worldgen/biome/has_structure/ocean_ruin_warm.json = 778bc665994e47192a2987130f62326c2e4e3b22d50846910c262429a096a80e
- Mojang Java 26.3: candidate placement settings ↗
Inner archive META-INF/versions/26.3/server-26.3.jar: data/minecraft/worldgen/structure_set/ocean_ruins.json
Evidence details
Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. SHA-256 by archive member: data/minecraft/worldgen/structure_set/ocean_ruins.json = 4cf598f0f3a380fd334402518be8f43d9832d5985cf56e6046493f25edbf76cd
- Mojang Java 26.3: candidate filtering and weighted retries ↗
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
- Mojang Java 26.3: generation entry points ↗
Inner archive META-INF/versions/26.3/server-26.3.jar: 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/structures/OceanRuinStructure$Type.class; net/minecraft/world/level/levelgen/structure/structures/OceanRuinStructure.class. Methods: OceanRuinStructure.findGenerationPoint; Structure.findValidGenerationPoint; Structure.GenerationContext.isValidBiome
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/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/structures/OceanRuinStructure$Type.class = cd85eaa72b9f5060a6cde0cb5c35a42a816dfc09917c53d3079d75c9a07927a1; net/minecraft/world/level/levelgen/structure/structures/OceanRuinStructure.class = 9426288f7b94e8241bdab766a990df9917f7d4a0df8ae3ec7f971958f4a35fc6
- Mojang Java 26.3: ocean ruins layout and encounter implementation ↗
net.minecraft.world.level.levelgen.structure.structures.OceanRuinPieces; OceanRuinPieces.addPieces, addClusterRuins, addPiece, OceanRuinPiece.handleDataMarker / postProcess; OceanRuinPiece.makeSettings; OceanRuinPieces.WARM_SUSPICIOUS_BLOCK_PROCESSOR / COLD_SUSPICIOUS_BLOCK_PROCESSOR.
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.
- Mojang Java 26.3: ocean ruins loot data ↗
Inner META-INF/versions/26.3/server-26.3.jar: data/minecraft/loot_table/chests/underwater_ruin_big.json; data/minecraft/loot_table/chests/underwater_ruin_small.json; data/minecraft/loot_table/archaeology/ocean_ruin_warm.json; data/minecraft/loot_table/archaeology/ocean_ruin_cold.json
Evidence details
Verified official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. File SHA-256s: underwater_ruin_big.json: b4f792544678c925eec6c1adf53c2a132706567bdca068d1afd804053db3c168; underwater_ruin_small.json: c3979027a2051e91244c89710fbd8b216fb25a9ce2947202e19d2d278ffd9cf3; ocean_ruin_warm.json: b1cde868aba247016a09a541194f3f73c22dbc532fd19be5207ce01e9a650742; ocean_ruin_cold.json: 631807140b18a147c14860f220b140693b3596f1d53e9692581c6b20804150eb. Table identity and conditional item rules are distinct from any particular generated container.
- Java 26.3 ocean ruins: calculated selection odds ↗
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:sniffer_egg","table":"data/minecraft/loot_table/archaeology/ocean_ruin_warm.json","pool":0,"fraction":"1/15","chance":0.06666666666666667,"weight":1,"total":15,"rolls":[1]},{"itemId":"minecraft:snort_pottery_sherd","table":"data/minecraft/loot_table/archaeology/ocean_ruin_warm.json","pool":0,"fraction":"1/15","chance":0.06666666666666667,"weight":1,"total":15,"rolls":[1]},{"itemId":"minecraft:mourner_pottery_sherd","table":"data/minecraft/loot_table/archaeology/ocean_ruin_cold.json","pool":0,"fraction":"1/15","chance":0.06666666666666667,"weight":1,"total":15,"rolls":[1]},{"itemId":"minecraft:diamond_nautilus_armor","table":"data/minecraft/loot_table/chests/underwater_ruin_big.json","pool":2,"fraction":"2/185","chance":0.010810810810810811,"weight":2,"total":185,"rolls":[1]}]
- Mojang Java 1.20.1: inspected historical ocean ruins loot ↗
data/minecraft/loot_tables/chests/underwater_ruin_big.json; data/minecraft/loot_tables/chests/underwater_ruin_small.json
Evidence details
Limited comparison of the listed data files; no claim that all intermediate releases share either table. SHA-256s: underwater_ruin_big.json: 819d36fc83b1794f09b5d0e79913bcefb4195f3638fbb8336448889ac9108b4e; underwater_ruin_small.json: 40a121404f2b45897b6ca0a8f1704ca70c4ece690e6e731a6b9beaafdefcc2c9
- Minecraft Wiki: Cold Ocean Ruins — pinned history ↗
History section, retaining edition, release grouping, development-version and experimental-toggle qualifiers.
Evidence details
Pinned article revision 3779312 from 2026-09-16T01:28:28Z. Historical claims only; not an audited game build or release-date source.
- Minecraft Wiki: Warm Ocean Ruins — pinned history ↗
History section, retaining edition, release grouping, development-version and experimental-toggle qualifiers.
Evidence details
Pinned article revision 3791557 from 2026-09-24T10:57:08Z. Historical claims only; not an audited game build or release-date source.
- Java 1.13 (18w09a): release date ↗
/id; /releaseTime
Evidence details
Date belongs to the exact 18w09a build. Snapshot and prerelease dates are separate from the later full release; metadata does not prove the feature introduction.
- Java 1.13 (18w10a): release date ↗
/id; /releaseTime
Evidence details
Date belongs to the exact 18w10a build. Snapshot and prerelease dates are separate from the later full release; metadata does not prove the feature introduction.
- Java 1.13 (18w16a): release date ↗
/id; /releaseTime
Evidence details
Date belongs to the exact 18w16a build. Snapshot and prerelease dates are separate from the later full release; metadata does not prove the feature introduction.
- Bedrock 1.4.0: release date ↗
Version infobox release date
Evidence details
Platform releases were staggered: May 16, 2018<ref name=OutNow>{{Mcnet|update-aquatic-phase-one-out-now|Update Aquatic Phase One is out now!|May 16, 2018|Tom Stone}}</ref>. These dates describe full Pocket releases, separately from earlier betas.
- Java 1.16: release date ↗
/id; /releaseTime
Evidence details
Release metadata establishes its date, not feature introduction. Original Wiki history must support introduction separately.
- Java 1.20: release date ↗
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.
- Java 1.21.11: release date ↗
/id; /releaseTime
Evidence details
Date belongs to the exact 1.21.11 build. Snapshot and prerelease dates are separate from the later full release; metadata does not prove the feature introduction.
- Bedrock 1.21.130: release date ↗
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.
- Java 26.3: release date ↗
Published 9/15/26; Minecraft Java 26.3 Released
Evidence details
Release metadata establishes its date, not feature introduction. Original Wiki history must support introduction separately.
- Bedrock 26.50: release date ↗
Posted: 15 September 2026; opening paragraph says Wilderness Bound is out now
Evidence details
Historical date from the pinned Minecraft Wiki version article; introduction is separately attributed to each structure article history.
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.