OneBlock: a world made of one block

Data packs

Create a one-block world with a data packLearn more

Create your 'One Block' map for Minecraft 1.21.9 — 26.3: choose phases, their length, chests, and mobs — and download the data pack. Break a block — a new one appears instantly in its place.

My Game select version

Save your preferences in this browser and apply them to supported tools. Settings in a shared link take priority. Wiki version labels are not affected.

Phases.

Phases go in game order, after the last one they restart from the first.

Length of the phase

How many blocks you need to break to advance to the next phase.

Chests and mobs.

Chest with loot instead of block

Mobs on the new block

Your OneBlock

Data pack · 1.21.9–26.3
Phases.
9
Blocks in phase.
100
Full circle
900 blocks
  1. Plains 1–100
  2. Dungeon 101–200
  3. Snow 201–300
  4. Ocean 301–400
  5. Jungle 401–500
  6. Desert 501–600
  7. Depths 601–700
  8. Nether 701–800
  9. The End 801–900
Download the data pack
What's inside the archive - 28 files

data/minecraft/tags/function/load.json

The load tag lists functions that run when the world loads and after /reload.

{
  "values": [
    "oneblock:load"
  ]
}

data/minecraft/tags/function/tick.json

The tick tag lists functions that run every game tick, normally 20 times per second.

{
  "values": [
    "oneblock:tick"
  ]
}

data/minecraft/dimension/overworld.json

An empty Overworld. Minecraft reads this file only when the world is first created.

{
  "type": "minecraft:overworld",
  "generator": {
    "type": "minecraft:flat",
    "settings": {
      "biome": "minecraft:the_void",
      "features": false,
      "lakes": false,
      "layers": [
        {
          "block": "minecraft:air",
          "height": 1
        }
      ],
      "structure_overrides": []
    }
  }
}

data/oneblock/function/load.mcfunction

On world load: score, phase length, and first block if it doesn't exist yet.

scoreboard objectives add oneblock dummy
setworldspawn 0 65 0
scoreboard players set #length oneblock 100
scoreboard players set #count oneblock 9
execute unless score #built oneblock matches 1 run function oneblock:start

data/oneblock/function/start.mcfunction

The first block is grass, with a chest containing saplings, a bucket of water, and bread.

forceload add 0 0
setblock 0 64 0 minecraft:grass_block
setblock 0 64 1 minecraft:chest[facing=north]{Items:[{Slot:0b,id:"minecraft:oak_sapling",count:2},{Slot:1b,id:"minecraft:water_bucket",count:1},{Slot:2b,id:"minecraft:bread",count:4}]}
setblock 0 63 0 minecraft:barrier
scoreboard players set #blocks oneblock 0
scoreboard players set #built oneblock 1
schedule function oneblock:release 5s

data/oneblock/function/release.mcfunction

After construction, the chunk is released starting from 5: the player then loads it, just like any other chunk.

forceload remove 0 0

data/oneblock/function/join.mcfunction

On first join: teleport the player to the starting point and set their respawn point there.

tp @s 0.5 65 0.5
spawnpoint @s 0 65 0
tag @s add oneblock_joined

data/oneblock/function/tick.mcfunction

Each tick: a new player stands on a block, and a broken block is replaced by the next one.

execute as @a[tag=!oneblock_joined] run function oneblock:join
execute if block 0 64 0 #minecraft:replaceable run function oneblock:next

data/oneblock/function/next.mcfunction

The block is broken: count, phase, throw — and a new block appears in the same place

scoreboard players add #blocks oneblock 1
scoreboard players operation #phase oneblock = #blocks oneblock
scoreboard players operation #phase oneblock /= #length oneblock
scoreboard players operation #phase oneblock %= #count oneblock
scoreboard players operation #in oneblock = #blocks oneblock
scoreboard players operation #in oneblock %= #length oneblock
execute store result score #roll oneblock run random value 1..1000
execute if score #phase oneblock matches 0 run function oneblock:phase/plains
execute if score #phase oneblock matches 1 run function oneblock:phase/underground
execute if score #phase oneblock matches 2 run function oneblock:phase/snow
execute if score #phase oneblock matches 3 run function oneblock:phase/ocean
execute if score #phase oneblock matches 4 run function oneblock:phase/jungle
execute if score #phase oneblock matches 5 run function oneblock:phase/desert
execute if score #phase oneblock matches 6 run function oneblock:phase/deep
execute if score #phase oneblock matches 7 run function oneblock:phase/nether
execute if score #phase oneblock matches 8 run function oneblock:phase/end
execute as @a[x=0,y=64,z=0,dx=0,dy=0,dz=0] at @s run tp @s ~ 65 ~
execute store result score #mob oneblock run random value 1..1000
execute if score #phase oneblock matches 0 if score #mob oneblock matches 1..50 run function oneblock:mob/plains
execute if score #phase oneblock matches 1 if score #mob oneblock matches 1..50 run function oneblock:mob/underground
execute if score #phase oneblock matches 2 if score #mob oneblock matches 1..50 run function oneblock:mob/snow
execute if score #phase oneblock matches 3 if score #mob oneblock matches 1..50 run function oneblock:mob/ocean
execute if score #phase oneblock matches 4 if score #mob oneblock matches 1..50 run function oneblock:mob/jungle
execute if score #phase oneblock matches 5 if score #mob oneblock matches 1..50 run function oneblock:mob/desert
execute if score #phase oneblock matches 6 if score #mob oneblock matches 1..50 run function oneblock:mob/deep
execute if score #phase oneblock matches 7 if score #mob oneblock matches 1..50 run function oneblock:mob/nether
execute if score #phase oneblock matches 8 if score #mob oneblock matches 1..50 run function oneblock:mob/end
title @a actionbar ["",{"text":"Блок "},{"score":{"name":"#blocks","objective":"oneblock"}}]

data/oneblock/function/phase/plains.mcfunction

Plains phase: which block appears.

execute if score #in oneblock matches 0 run title @a title {"text":"Равнина"}
execute if score #roll oneblock matches 971..1000 run return run setblock 0 64 0 minecraft:chest{LootTable:"minecraft:chests/village/village_plains_house"}
execute if score #roll oneblock matches 1..233 run return run setblock 0 64 0 minecraft:grass_block
execute if score #roll oneblock matches 234..408 run return run setblock 0 64 0 minecraft:dirt
execute if score #roll oneblock matches 409..621 run return run setblock 0 64 0 minecraft:oak_log
execute if score #roll oneblock matches 622..679 run return run setblock 0 64 0 minecraft:oak_leaves[persistent=true]
execute if score #roll oneblock matches 680..757 run return run setblock 0 64 0 minecraft:stone
execute if score #roll oneblock matches 758..805 run return run setblock 0 64 0 minecraft:sand
execute if score #roll oneblock matches 806..853 run return run setblock 0 64 0 minecraft:gravel
execute if score #roll oneblock matches 854..892 run return run setblock 0 64 0 minecraft:clay
execute if score #roll oneblock matches 893..921 run return run setblock 0 64 0 minecraft:pumpkin
execute if score #roll oneblock matches 922..950 run return run setblock 0 64 0 minecraft:melon
execute if score #roll oneblock matches 951..970 run return run setblock 0 64 0 minecraft:coarse_dirt

data/oneblock/function/mob/plains.mcfunction

Mob phase 'Plains' — on the new block.

execute store result score #which oneblock run random value 1..4
execute if score #which oneblock matches 1 run summon minecraft:cow 0.5 65 0.5
execute if score #which oneblock matches 2 run summon minecraft:sheep 0.5 65 0.5
execute if score #which oneblock matches 3 run summon minecraft:pig 0.5 65 0.5
execute if score #which oneblock matches 4 run summon minecraft:chicken 0.5 65 0.5

data/oneblock/function/phase/underground.mcfunction

Cave phase: which block appears.

execute if score #in oneblock matches 0 run title @a title {"text":"Подземелье"}
execute if score #roll oneblock matches 971..1000 run return run setblock 0 64 0 minecraft:chest{LootTable:"minecraft:chests/simple_dungeon"}
execute if score #roll oneblock matches 1..291 run return run setblock 0 64 0 minecraft:stone
execute if score #roll oneblock matches 292..407 run return run setblock 0 64 0 minecraft:cobblestone
execute if score #roll oneblock matches 408..485 run return run setblock 0 64 0 minecraft:andesite
execute if score #roll oneblock matches 486..563 run return run setblock 0 64 0 minecraft:diorite
execute if score #roll oneblock matches 564..641 run return run setblock 0 64 0 minecraft:granite
execute if score #roll oneblock matches 642..689 run return run setblock 0 64 0 minecraft:tuff
execute if score #roll oneblock matches 690..747 run return run setblock 0 64 0 minecraft:gravel
execute if score #roll oneblock matches 748..844 run return run setblock 0 64 0 minecraft:coal_ore
execute if score #roll oneblock matches 845..922 run return run setblock 0 64 0 minecraft:iron_ore
execute if score #roll oneblock matches 923..970 run return run setblock 0 64 0 minecraft:copper_ore

data/oneblock/function/mob/underground.mcfunction

Mob phase 'Cave' — on the new block.

execute store result score #which oneblock run random value 1..4
execute if score #which oneblock matches 1 run summon minecraft:bat 0.5 65 0.5
execute if score #which oneblock matches 2 run summon minecraft:zombie 0.5 65 0.5
execute if score #which oneblock matches 3 run summon minecraft:skeleton 0.5 65 0.5
execute if score #which oneblock matches 4 run summon minecraft:spider 0.5 65 0.5

data/oneblock/function/phase/snow.mcfunction

Snow phase: which block appears.

execute if score #in oneblock matches 0 run title @a title {"text":"Снега"}
execute if score #roll oneblock matches 971..1000 run return run setblock 0 64 0 minecraft:chest{LootTable:"minecraft:chests/igloo_chest"}
execute if score #roll oneblock matches 1..252 run return run setblock 0 64 0 minecraft:snow_block
execute if score #roll oneblock matches 253..388 run return run setblock 0 64 0 minecraft:ice
execute if score #roll oneblock matches 389..466 run return run setblock 0 64 0 minecraft:packed_ice
execute if score #roll oneblock matches 467..660 run return run setblock 0 64 0 minecraft:spruce_log
execute if score #roll oneblock matches 661..718 run return run setblock 0 64 0 minecraft:spruce_leaves[persistent=true]
execute if score #roll oneblock matches 719..854 run return run setblock 0 64 0 minecraft:stone
execute if score #roll oneblock matches 855..912 run return run setblock 0 64 0 minecraft:iron_ore
execute if score #roll oneblock matches 913..970 run return run setblock 0 64 0 minecraft:coal_ore

data/oneblock/function/mob/snow.mcfunction

Mob phase 'Snow' — on the new block.

execute store result score #which oneblock run random value 1..4
execute if score #which oneblock matches 1 run summon minecraft:wolf 0.5 65 0.5
execute if score #which oneblock matches 2 run summon minecraft:fox 0.5 65 0.5
execute if score #which oneblock matches 3 run summon minecraft:rabbit 0.5 65 0.5
execute if score #which oneblock matches 4 run summon minecraft:stray 0.5 65 0.5

data/oneblock/function/phase/ocean.mcfunction

Ocean phase: which block appears.

execute if score #in oneblock matches 0 run title @a title {"text":"Океан"}
execute if score #roll oneblock matches 971..1000 run return run setblock 0 64 0 minecraft:chest{LootTable:"minecraft:chests/buried_treasure"}
execute if score #roll oneblock matches 1..272 run return run setblock 0 64 0 minecraft:sand
execute if score #roll oneblock matches 273..427 run return run setblock 0 64 0 minecraft:gravel
execute if score #roll oneblock matches 428..563 run return run setblock 0 64 0 minecraft:clay
execute if score #roll oneblock matches 564..699 run return run setblock 0 64 0 minecraft:prismarine
execute if score #roll oneblock matches 700..757 run return run setblock 0 64 0 minecraft:dark_prismarine
execute if score #roll oneblock matches 758..815 run return run setblock 0 64 0 minecraft:sea_lantern
execute if score #roll oneblock matches 816..834 run return run setblock 0 64 0 minecraft:wet_sponge
execute if score #roll oneblock matches 835..970 run return run setblock 0 64 0 minecraft:sandstone

data/oneblock/function/mob/ocean.mcfunction

Mob phase 'Ocean' — on the new block.

execute store result score #which oneblock run random value 1..2
execute if score #which oneblock matches 1 run summon minecraft:turtle 0.5 65 0.5
execute if score #which oneblock matches 2 run summon minecraft:drowned 0.5 65 0.5

data/oneblock/function/phase/jungle.mcfunction

Jungle phase: which block appears.

execute if score #in oneblock matches 0 run title @a title {"text":"Джунгли"}
execute if score #roll oneblock matches 971..1000 run return run setblock 0 64 0 minecraft:chest{LootTable:"minecraft:chests/jungle_temple"}
execute if score #roll oneblock matches 1..252 run return run setblock 0 64 0 minecraft:jungle_log
execute if score #roll oneblock matches 253..349 run return run setblock 0 64 0 minecraft:jungle_leaves[persistent=true]
execute if score #roll oneblock matches 350..485 run return run setblock 0 64 0 minecraft:moss_block
execute if score #roll oneblock matches 486..601 run return run setblock 0 64 0 minecraft:mossy_cobblestone
execute if score #roll oneblock matches 602..698 run return run setblock 0 64 0 minecraft:melon
execute if score #roll oneblock matches 699..853 run return run setblock 0 64 0 minecraft:grass_block
execute if score #roll oneblock matches 854..970 run return run setblock 0 64 0 minecraft:mud

data/oneblock/function/mob/jungle.mcfunction

Mob phase 'Jungle' — on the new block.

execute store result score #which oneblock run random value 1..4
execute if score #which oneblock matches 1 run summon minecraft:parrot 0.5 65 0.5
execute if score #which oneblock matches 2 run summon minecraft:ocelot 0.5 65 0.5
execute if score #which oneblock matches 3 run summon minecraft:panda 0.5 65 0.5
execute if score #which oneblock matches 4 run summon minecraft:zombie 0.5 65 0.5

data/oneblock/function/phase/desert.mcfunction

Desert phase: which block appears.

execute if score #in oneblock matches 0 run title @a title {"text":"Пустыня"}
execute if score #roll oneblock matches 971..1000 run return run setblock 0 64 0 minecraft:chest{LootTable:"minecraft:chests/desert_pyramid"}
execute if score #roll oneblock matches 1..291 run return run setblock 0 64 0 minecraft:sand
execute if score #roll oneblock matches 292..485 run return run setblock 0 64 0 minecraft:sandstone
execute if score #roll oneblock matches 486..601 run return run setblock 0 64 0 minecraft:red_sand
execute if score #roll oneblock matches 602..717 run return run setblock 0 64 0 minecraft:terracotta
execute if score #roll oneblock matches 718..795 run return run setblock 0 64 0 minecraft:gold_ore
execute if score #roll oneblock matches 796..873 run return run setblock 0 64 0 minecraft:smooth_sandstone
execute if score #roll oneblock matches 874..970 run return run setblock 0 64 0 minecraft:orange_terracotta

data/oneblock/function/mob/desert.mcfunction

Mob phase 'Desert' — on the new block.

execute store result score #which oneblock run random value 1..3
execute if score #which oneblock matches 1 run summon minecraft:camel 0.5 65 0.5
execute if score #which oneblock matches 2 run summon minecraft:rabbit 0.5 65 0.5
execute if score #which oneblock matches 3 run summon minecraft:husk 0.5 65 0.5

data/oneblock/function/phase/deep.mcfunction

Depth phase: which block appears.

execute if score #in oneblock matches 0 run title @a title {"text":"Глубины"}
execute if score #roll oneblock matches 971..1000 run return run setblock 0 64 0 minecraft:chest{LootTable:"minecraft:chests/ancient_city"}
execute if score #roll oneblock matches 1..291 run return run setblock 0 64 0 minecraft:deepslate
execute if score #roll oneblock matches 292..427 run return run setblock 0 64 0 minecraft:cobbled_deepslate
execute if score #roll oneblock matches 428..475 run return run setblock 0 64 0 minecraft:deepslate_diamond_ore
execute if score #roll oneblock matches 476..543 run return run setblock 0 64 0 minecraft:deepslate_gold_ore
execute if score #roll oneblock matches 544..621 run return run setblock 0 64 0 minecraft:deepslate_redstone_ore
execute if score #roll oneblock matches 622..689 run return run setblock 0 64 0 minecraft:deepslate_lapis_ore
execute if score #roll oneblock matches 690..708 run return run setblock 0 64 0 minecraft:deepslate_emerald_ore
execute if score #roll oneblock matches 709..805 run return run setblock 0 64 0 minecraft:obsidian
execute if score #roll oneblock matches 806..873 run return run setblock 0 64 0 minecraft:amethyst_block
execute if score #roll oneblock matches 874..970 run return run setblock 0 64 0 minecraft:sculk

data/oneblock/function/mob/deep.mcfunction

Mob phase 'Nether' — on the new block.

execute store result score #which oneblock run random value 1..4
execute if score #which oneblock matches 1 run summon minecraft:bat 0.5 65 0.5
execute if score #which oneblock matches 2 run summon minecraft:zombie 0.5 65 0.5
execute if score #which oneblock matches 3 run summon minecraft:skeleton 0.5 65 0.5
execute if score #which oneblock matches 4 run summon minecraft:creeper 0.5 65 0.5

data/oneblock/function/phase/nether.mcfunction

Nether phase: which block appears.

execute if score #in oneblock matches 0 run title @a title {"text":"Незер"}
execute if score #roll oneblock matches 971..1000 run return run setblock 0 64 0 minecraft:chest{LootTable:"minecraft:chests/nether_bridge"}
execute if score #roll oneblock matches 1..288 run return run setblock 0 64 0 minecraft:netherrack
execute if score #roll oneblock matches 289..384 run return run setblock 0 64 0 minecraft:soul_sand
execute if score #roll oneblock matches 385..442 run return run setblock 0 64 0 minecraft:soul_soil
execute if score #roll oneblock matches 443..538 run return run setblock 0 64 0 minecraft:nether_quartz_ore
execute if score #roll oneblock matches 539..615 run return run setblock 0 64 0 minecraft:nether_gold_ore
execute if score #roll oneblock matches 616..692 run return run setblock 0 64 0 minecraft:glowstone
execute if score #roll oneblock matches 693..750 run return run setblock 0 64 0 minecraft:magma_block
execute if score #roll oneblock matches 751..808 run return run setblock 0 64 0 minecraft:crimson_stem
execute if score #roll oneblock matches 809..866 run return run setblock 0 64 0 minecraft:warped_stem
execute if score #roll oneblock matches 867..924 run return run setblock 0 64 0 minecraft:blackstone
execute if score #roll oneblock matches 925..962 run return run setblock 0 64 0 minecraft:basalt
execute if score #roll oneblock matches 963..970 run return run setblock 0 64 0 minecraft:ancient_debris

data/oneblock/function/mob/nether.mcfunction

Mob phase 'Nether' — on the new block.

execute store result score #which oneblock run random value 1..5
execute if score #which oneblock matches 1 run summon minecraft:strider 0.5 65 0.5
execute if score #which oneblock matches 2 run summon minecraft:blaze 0.5 65 0.5
execute if score #which oneblock matches 3 run summon minecraft:piglin 0.5 65 0.5
execute if score #which oneblock matches 4 run summon minecraft:zombified_piglin 0.5 65 0.5
execute if score #which oneblock matches 5 run summon minecraft:magma_cube 0.5 65 0.5

data/oneblock/function/phase/end.mcfunction

End phase: which block appears.

execute if score #in oneblock matches 0 run title @a title {"text":"Энд"}
execute if score #in oneblock matches 0 unless score #portal oneblock matches 1 run function oneblock:portal
execute if score #roll oneblock matches 971..1000 run return run setblock 0 64 0 minecraft:chest{LootTable:"minecraft:chests/end_city_treasure"}
execute if score #roll oneblock matches 1..485 run return run setblock 0 64 0 minecraft:end_stone
execute if score #roll oneblock matches 486..621 run return run setblock 0 64 0 minecraft:end_stone_bricks
execute if score #roll oneblock matches 622..757 run return run setblock 0 64 0 minecraft:purpur_block
execute if score #roll oneblock matches 758..970 run return run setblock 0 64 0 minecraft:obsidian

data/oneblock/function/mob/end.mcfunction

Mob phase 'End' — on the new block.

execute store result score #which oneblock run random value 1..2
execute if score #which oneblock matches 1 run summon minecraft:enderman 0.5 65 0.5
execute if score #which oneblock matches 2 run summon minecraft:endermite 0.5 65 0.5

data/oneblock/function/portal.mcfunction

Portal frame in the End, 6 blocks south — without eyes. Built once: on the second phase cycle, inserted eyes do not disappear.

fill -2 64 4 2 64 8 minecraft:end_stone
setblock -1 65 4 minecraft:end_portal_frame[facing=south]
setblock 0 65 4 minecraft:end_portal_frame[facing=south]
setblock 1 65 4 minecraft:end_portal_frame[facing=south]
setblock -1 65 8 minecraft:end_portal_frame[facing=north]
setblock 0 65 8 minecraft:end_portal_frame[facing=north]
setblock 1 65 8 minecraft:end_portal_frame[facing=north]
setblock -2 65 5 minecraft:end_portal_frame[facing=east]
setblock -2 65 6 minecraft:end_portal_frame[facing=east]
setblock -2 65 7 minecraft:end_portal_frame[facing=east]
setblock 2 65 5 minecraft:end_portal_frame[facing=west]
setblock 2 65 6 minecraft:end_portal_frame[facing=west]
setblock 2 65 7 minecraft:end_portal_frame[facing=west]
scoreboard players set #portal oneblock 1

What drops in each phase.

Chance — per broken block. Instead of a block with a 3% chance, a chest with loot from the phase's structure appears. A mob appears on the new block with a 5% chance.

How to get started

  1. Download the datapack

    Leave the ZIP file as it is: Minecraft can load it without extraction.

  2. Create a new world

    "Create World" → "More" tab → "Data Packs" — drag the archive into the window and enable it. On the server — place it in world/datapacks before the first launch.

  3. Confirm warning

    The game will say that world settings are experimental: this is how it labels any world with its own generator. Click 'Continue'.

  4. Break

    You stand on grass in the middle of emptiness. Break it — the block reappears, and above the hotbar, a block counter shows.

What to know

  • Void generation only applies to newly created worlds. The pack replaces Overworld generation with a void, which must be selected when the world is created. Adding it to an existing world does not remove the surrounding terrain.
  • Under a block — barrier. Sand and gravel do not fall into void; dropped items do not fly away, and the block broken below reactivates on a barrier.
  • Starting chest next to the block: Oak sapling ×2, water bucket ×1, bread ×4 — for the first tree and farm.
  • The End portal is built automatically. When the End phase begins, an empty End portal frame appears six blocks south. Get blaze rods from blazes in the Nether phase and ender pearls from endermen in the End phase.
  • Nether: normal Empty pack only generates the overworld: an obsidian portal from the 'Deepslate' phase leads to the real Nether.

Classic island instead of one block — Skyblock. What OneBlock and other server modes are — in the wiki, and servers with OneBlock — in the server list.

Frequently asked questions

How to make OneBlock in Minecraft without mods?

Using a data pack: create a new world and add the archive to 'Data Packs'. The world will be empty, and each block under your feet will reappear after being broken — phase by phase, until the End.

Why is the world around a block normal instead of empty?

The world generator sets the void, and the game only reads it when a new world is created. Add a data pack to the world creation screen, not to an existing world.

How to enter the End in OneBlock?

At the start of the End phase, a portal frame appears six blocks south. Fill it with 12 eyes of ender, using blaze rods from the Nether phase and ender pearls from endermen.