Time for another Minecraft tutorial using command blocks to do something pretty neat using the vanilla version of the game (no plugins necessary). I used Minecraft version 1.7.9.
In this mini tutorial, I'm showing off how I created a "Limbo Dimension" that players are sent to after death, where they must remain for 60 minutes before being respawned in the overworld again.
There's a popular Minecraft server on Reddit called Flatcore, and they have a Limbo that works as I described. Their server runs lots of custom plugins, so this is my attempt at creating Limbo in vanilla Minecraft.
Their Limbo technically exists within the End Dimension. When you die in the overworld, you spawn in Limbo where you must remain for 60 minutes. You can log off and come back an hour later and skip Limbo entirely, or you can stick around and play mini games or try your luck at a parkour course--if you get to the end in parkour, you can leave Limbo early. Dying while inside Limbo respawns you in Limbo, but your 60 minute timer is not reset.
In my version of Limbo, I didn't want to build it in the End Dimension for various reasons: you can't set a player's respawn point to the End Dimension (in vanilla Minecraft), I didn't wanna have to drop the player into the End Portal on their death in the overworld/nether, and the only way to exit The End cleanly is to go through the Exit Portal, which triggers the credits sequence and that's annoying. ;)
First, a high-level overview of how my Limbo works:
I have a couple of scoreboard teams set up: Limbo
and LimboExit
, and a scoreboard objective respawnCounter
which holds the number of minutes remaining until respawn.
A rapid command block clock constantly uses /spawnpoint
to set the respawn point of all players without teams to the Limbo Entrance Holding Cell
Limbo
team, their spawn point is set to the Limbo Building instead. This way if they die inside Limbo, they reappear in Limbo, without their counter getting reset.Upon spawning in the Limbo Entrance Holding Cell, the player falls on a pressure plate which runs a series of command blocks:
Limbo
teamAdventure
A slow clock that pulses once every minute subtracts 1 from the respawnCounter
for all players on the Limbo
team. It also re-assigns players whose counter has reached 0 to the LimboExit
team.
The same rapid clock that sets the spawn points of players, also teleports players on the LimboExit
team into the Limbo Exit Holding Cell
The Limbo Exit Holding Cell is just like the Entrance one, but the pressure plate does the opposite:
Survival
respawnCounter
scoreboard.So, I created a superflat world in which the world height was set pretty high (above 100 blocks up), with a ton of void beneath the bedrock, so I could build out Limbo beneath the overworld.
The preset I used was:
2;100x0,10x7,2x3,1x2;3;decoration,lake,lava_lake
The surface of the world is at Y=113
. The first thing I did upon logging in was teleport to 0,113,0
and ran /setworldspawn
to move the spawn point here. This made it easy to line everything up.
Here's the view from the world spawn point (taken after some snowfall had settled):
Click that and any other screenshots for a slightly larger version.
I marked the actual world spawn point with a gold block (well, 4 gold blocks here, but one of them is on 0,0
).
Next, I set up the scoreboard teams and objectives:
/scoreboard teams add Limbo
/scoreboard teams option Limbo color light_purple
/scoreboard teams add LimboExit
/scoreboard objectives add respawnCounter dummy
/scoreboard objectives setdisplay respawnCounter list
This adds the Limbo and LimboExit teams. I made the Limbo team have a light purple color, so their names on the Tab menu will show up as light purple. It's an optional step.
I also set the respawnCounter
objective to show up in the user list when you hold Tab. This way players stuck in Limbo can see their remaining time. You could also stick it to be belowName
if you want.
Going down further, just below the bedrock floor is my rapid clock:
This is a simple hopper clock. The hoppers connect to each other and I placed one item inside, so as the item is passed back and forth, a redstone pulse comes out. There's a comparator and a repeater to boost the signal. The signal passes over three command blocks. From left to right:
/spawnpoint @a[team=] 0 89 0
/spawnpoint @a[team=Limbo] 0 62 0
/tp @a[team=LimboExit] 0 79 0
The first command sets the spawn point of all players without a team into the Limbo Entrance Holding Cell. The second command sets the spawn point of Limbo players into the lobby of the Limbo Building.
The last command block is behind another repeater to add a slight delay, and it teleports LimboExit
team members into the Limbo Exit Holding Cell.
To the right of the rapid spawnpoint setting platform, I have my minute clock:
I found the layout for this clock on this page, so check that for reference. The hoppers contain 86 items that get passed back and forth (one stack of 64 plus 22). This generates a pulse about once every minute.
The command blocks that get executed from left to right:
/scoreboard players remove @a[team=Limbo] respawnCounter 1
/scoreboard teams join LimboExit @a[team=Limbo,score_respawnCounter=0]
The first one subtracts one point from the respawnCounter
for all players on team Limbo
. The second one checks for players on Limbo
whose counter has reached 0, and transfers them to the LimboExit
team. This should theoretically work even if the player is offline (untested).
Going further down the rabbit hole...
Beneath the clocks is the Limbo Entrance Holding Cell. Here, I've replaced two of the walls with glass blocks so you can see inside.
Players on the surface have their spawn points set so they'll land on the Golden Pressure Plate inside the cell. The signal from the pressure plate works its way to the top of the cell where it triggers a series of command blocks. In the order of the redstone signal (from right to left):
/scoreboard teams join Limbo @a[r=6]
/scoreboard players set @a[r=6] respawnCounter 60
/gamemode 2 @a[r=6]
/clear @a[r=6]
/tp @a[r=6] 0 62 0
This adds the player to the Limbo
team, sets their respawnCounter
to 60 (minutes), switches them to Adventure Mode, clears their inventory (this was mostly for testing; if they freshly died they probably don't have any inventory), and then finally teleports them into the lobby of the Limbo Building.
In Minecraft 1.7 and older, Adventure Mode only prohibits the player from destroying blocks that need a tool to destroy, unless the player uses that tool. Blocks that can be destroyed with bare hands (such as glass, ice, torches, flowers, etc.) can still be broken by the player. When Minecraft 1.8 is released, this won't be an issue: Adventure Mode players in 1.8 can't break anything without having a specially created tool that has NBT tags explicitly permitting it to break specific blocks. Your "Limbo Dimension" will be even safer in Minecraft 1.8!
Beneath the Limbo Entrance Holding Cell is the Exit Holding Cell, it looks and acts the same way except it runs these commands:
/gamemode 0 @a[r=6]
/scoreboard players reset @a[r=6] respawnCounter
/scoreboard teams leave @a[r=6]
/tp @a[r=12] 0 113 0
So it switches them back to Survival Mode, resets their respawnCounter
objective, removes them from their team, and then teleports them back to the surface of the overworld.
So, after dying, respawning inside the Entrance Holding Cell, being enrolled into Team Limbo, the player is finally teleported into the Limbo Building.
I didn't flesh out Limbo on this map as it was more of a proof of concept. Holding down Tab shows the player list, those in Limbo show up in light purple, and have the number of minutes remaining on their sentence.
Every minute that passes subtracts one from that score, and when it reaches zero, the player is teleported into the Limbo Exit Holding Cell where they're reinserted into the Matrix. ;)
World download: minecraft-limbo-poc.tar.gz (847KB)
There are 2 comments on this page. Add yours.
That's really neat. I might use that on my vanilla server. Have to talk to the crew first though. Thanks! :)
Looks great. Also helps with my compact machine concept.
0.0103s
.