seedlookout
English

THE END · END STRUCTURES

End City

Page updated

Purpur towers on the outer End islands, with shulkers guarding enchanted gear. Some cities have a floating End ship carrying elytra and a dragon head.

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

Purpur towers and bridges of an End city with its floating ship nearby
End City at -213, 80, 1356Seed 28462718234064871 · Java 26.3 · endReference capture · Naturally generated structure, photographed in Minecraft Java 26.3.

Game data and source research

Where it generates in Java 26.3

The eligible starting biomes are End Highlands and End Midlands. The biome check and terrain test apply to the starting area, not to every block a branching city might reach. [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 starting anchor uses chunk-local X=7 and Z=7. The generator samples four terrain columns at five-block offsets and rejects a start whose lowest sampled height is below Y=60. This is a local support test, not a flat-ground test over the whole city. [1][3][4][5]

What the starting position means

The end-city candidate grid uses triangular spread. Position and terrain eligibility are determined before the separate city-piece generator builds the towers and branches; a valid candidate does not specify which branches it will contain. [1][4][5]

Towers, bridges and an optional ship

End cities grow through building, tower and bridge pieces. Bridges can reach further towers or an end ship, but a ship is optional. A tall or sprawling city is not proof that a ship is present. The recursive bridge decision is not a fixed per-city ship probability. [7]

The ship template is 13 × 24 × 29 blocks before rotation, including saved air. Its lower treasure area contains two chest positions and an Elytra marker; the bow carries a dragon head. These are ship features, not contents of every city. [6]

Towers, bridges and an optional ship
PartWhat to look for
TowersVertical routes and exposed openings make a protected return route useful. [7]
BridgesCheck their ends and branches before assuming the city is fully explored. [7]
ShipLook separately for the treasure room, brewing stand and dragon head. [6]

Shulkers and the Elytra frame

Sentry markers create shulkers when city pieces are placed. The ship contains three such markers. The Elytra marker creates an item frame containing Elytra, separate from the nearby chest loot rolls. [6][7]

City construction does not repeatedly replenish its original sentries. Shulkers do, however, have a separate duplication mechanic involving shulker-bullet damage and suitable teleport conditions. Treat claims that every city has a permanently fixed shulker supply with care. [7]

Loot and rewards in Java 26.3

End-city treasure chests make 2–6 selections from a main pool with total weight 89 in Java 26.3, then one separate Spire armor trim draw. The weapon, tool and player-armor entries use enchantment levels 20–39. These rolls describe a treasure-table chest, not a whole city or a guarantee of a ship. [8]

Elytra is not in the treasure chest loot table. In a generated End ship it is placed in an item frame by the Elytra template marker; the two nearby chest markers use the ordinary end-city treasure table. A ship is optional, so a city marker or chest cannot promise elytra. [8][11][12]

Shulker shells come from the entity loot table, separately from the chests. Its unenchanted shell chance is 0.5; the Looting condition explicitly lists a 0.5625 chance at the first level and adds 0.0625 for each level above it. Those mob-drop rules cannot be applied as chest probabilities. [8]

Compared directly with Java 1.20.1, the Java 26.3 tables differ. The inspected end city treasure table gains Copper horse armor, Diamond spear; its first pool changes from total weight 85 to 89. Use the current weights rather than carrying older chest percentages forward. [8][10]

Loot and rewards in Java 26.3
ItemWhere the rule appliesWhat the data establishes
Spire armor trim templateOne end-city treasure-table chest6.7% chance: template weight 1 against empty 14. [8][9]
DiamondOne end-city treasure-table chest20.4% chance of at least one diamond selection; each supplies 2–7. [8][9]
Diamond chestplateOne end-city treasure-table chest12.7% chance of at least one enchanted chestplate selection. [8][9]
ElytraA generated End shipFixed item-frame reward from the Elytra marker; not a random chest entry. [8][11]
Shulker shellOne shulker entity-loot invocation, no Looting50.0% base chance; Looting changes this conditional entity drop. [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. [13]

Version history and release dates
VersionReleasedWhat changed
Java 15w31aJuly 29, 2015End cities and ships entered development for Java 1.9. [13][15]
Java 15w32cAugust 7, 2015End ships gained a dragon head on their bow. [13][16]
Java 15w41aOctober 7, 2015Elytra replaced the ship's earlier placeholder treasure. [13][17]
Java 1.11November 14, 2016Cities became locatable by command and their equipment could carry curses. [13][18]
Pocket 1.0.0December 19, 2016Pocket Edition added End cities and ships. [13][19]
Java 1.19.4 (Update 1.20 experiment)March 14, 2023Spire armor trims entered End-city chest loot in the Update 1.20 experiment. [13][20]
Java 1.21.11December 9, 2025Diamond spears were added to End-city chest loot. [13][21]

SeedLookout in-game verification

Screenshots

Branched End city towers above an End island
End City at -213, 80, 1356Seed 28462718234064871 · Java 26.3 · endReference capture · Naturally generated structure, photographed in Minecraft Java 26.3.
Purpur tower and connecting platforms of an End city
End City at -213, 80, 1356Seed 28462718234064871 · Java 26.3 · endReference 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 end city

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/end_city.json

    Evidence details

    Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. SHA-256 by archive member: data/minecraft/worldgen/structure/end_city.json = 86965638efbe5fbc2ce276d8c843ceb4a946fd05ea8a41a57f75c7ef389a7ef4

  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/end_city.json

    Evidence details

    Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. SHA-256 by archive member: data/minecraft/tags/worldgen/biome/has_structure/end_city.json = 3d6dba2d57de3e7ff40f687832ca5f5e91b3276e93b67536434f54436e759d18

  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/end_cities.json

    Evidence details

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

  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/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/EndCityStructure.class. Methods: EndCityStructure.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/EndCityStructure.class = a218f15c290b464aaa1ed3c7d201bb01b9b14f155fc929b2bccf4cc9f9bbb3d5

  6. Mojang Java 26.3: end city templates and data ↗Official game data · Java 26.3

    data/minecraft/worldgen/structure/end_city.json; data/minecraft/structure/end_city/**/*.nbt

    Evidence details

    Official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c; inner META-INF/versions/26.3/server-26.3.jar SHA-256 a362163eec5d1612d520772bc16e5b39c09e3b234fdc045f56bf544284ee8ae6. NBT dimensions are unrotated saved template bounds (X × Y × Z), including air and connectors, not usable interior dimensions.

  7. Mojang Java 26.3: end city layout and encounter implementation ↗Decompiled game implementation · Java 26.3

    net.minecraft.world.level.levelgen.structure.structures.EndCityPieces; net.minecraft.world.entity.monster.Shulker; end_city/ship.nbt: Elytra marker (6,5,7), dragon_wall_head (6,8,0), brewing_stand (6,7,25); EndCityPieces.handleDataMarker and bridge generator; Shulker.hurtServer / duplication path.

    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.

  8. Mojang Java 26.3: end city loot data ↗Official game data · Java 26.3

    Inner META-INF/versions/26.3/server-26.3.jar: data/minecraft/loot_table/chests/end_city_treasure.json; data/minecraft/loot_table/entities/shulker.json

    Evidence details

    Verified official server SHA-1 33680f5f2ac32864d6d7cf5e56a705fdb3e05f4c. File SHA-256s: end_city_treasure.json: a783fd1ae488c9a21f049969543fbe4e56d26e79c0dcb6562a956a9142bf92e6; shulker.json: aea317f330bc540907dd88c71dc99f16046bbb3e32a804a8cf76eb3e436b6bdc. Table identity and conditional item rules are distinct from any particular generated container.

  9. Java 26.3 end city: 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:spire_armor_trim_smithing_template","table":"data/minecraft/loot_table/chests/end_city_treasure.json","pool":1,"chance":0.06666666666666667,"fraction":"1/15","weight":1,"total":15,"rolls":[1]},{"itemId":"minecraft:diamond","table":"data/minecraft/loot_table/chests/end_city_treasure.json","pool":0,"chance":0.20382605974788942,"fraction":"101297738305/496981290961","weight":5,"total":89,"rolls":[2,3,4,5,6]},{"itemId":"minecraft:diamond_chestplate","table":"data/minecraft/loot_table/chests/end_city_treasure.json","pool":0,"chance":0.12714065479530995,"fraction":"315932633769/2484906454805","weight":3,"total":89,"rolls":[2,3,4,5,6]}]

  10. Mojang Java 1.20.1: inspected historical end city loot ↗Official game data · Java 1.20.1

    data/minecraft/loot_tables/chests/end_city_treasure.json

    Evidence details

    Limited comparison of the listed data files; no claim that all intermediate releases share either table. SHA-256s: end_city_treasure.json: 21d494c874e1f883c3411562840ac432872748ce894643033c476bf62fa8ce9d

  11. Mojang Java 26.3: End ship fixed rewards ↗Decompiled game implementation · Java 26.3

    net.minecraft.world.level.levelgen.structure.structures.EndCityPieces.EndCityPiece.handleDataMarker: Elytra and Chest markers.

    Evidence details

    Ship NBT SHA-256 30d9b10e4471bde7b4535ef7ddbf22f615280afed9a903380c13a95081aa7e5d; marker-handler class SHA-256 5cf3e537ab9e3974ffa31b335181fd62575a1d3686fa312e2be6c6cfbe45c026. Elytra marker local(6,5,7) creates an elytra item frame; chest markers are local(5,5,7) and(7,5,7). The ship is optional.

  12. Mojang Java 26.3: End ship template ↗Official game data · Java 26.3

    data/minecraft/structure/end_city/ship.nbt: Elytra marker (6,5,7); Chest markers (5,5,7), (7,5,7).

    Evidence details

    SHA-256 30d9b10e4471bde7b4535ef7ddbf22f615280afed9a903380c13a95081aa7e5d. Template marker location and marker execution are distinct evidence.

  13. Minecraft Wiki: End City — pinned history ↗Minecraft Wiki · Java and Bedrock Revision 3803461

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

    Evidence details

    Pinned article revision 3803461 from 2026-09-29T13:54:58Z. Historical claims only; not an audited game build or release-date source.

  14. Minecraft Wiki: End City description ↗Minecraft Wiki · Java and Bedrock revision 3803461

    Opening description and History

    Evidence details

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

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

    /id; /releaseTime

    Evidence details

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

  16. Java 15w32c: release date ↗Official game data · Java 15w32c

    /id; /releaseTime

    Evidence details

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

  17. Java 15w41a: release date ↗Official game data · Java 15w41a

    /id; /releaseTime

    Evidence details

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

  18. Java 1.11: release date ↗Official game data · Java 1.11

    /releaseTime

    Evidence details

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

  19. Pocket 1.0.0: release date ↗Minecraft Wiki · Bedrock 1.0.0

    Version infobox release date

    Evidence details

    Platform releases were staggered: December 19, 2016<ref name="MCSiteArticle">{{Mcnet|ender-update-finally-here|The Ender Update is finally here|December 19, 2016}}</ref>. These dates describe full Pocket releases, separately from earlier betas.

  20. Java 1.19.4 (Update 1.20 experiment): release date ↗Official game data · Java 1.19.4 (Update 1.20 experiment)

    /id; /releaseTime

    Evidence details

    Full 1.19.4 release date; Update 1.20 experimental features required their separate toggle. Feature introduction is independently sourced to the structure history.

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

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

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.