Detecting the dimension where a player is

I want to check a player's current dimension using a scoreboard. For example, if a player is in the overworld, scoreboard would be set to 1. Nether would be 2. And the End would be 3.

I have tried execute if entity @a in minecraft:the_nether but that actually changes the coordinate's dimension.

Do you know any way to detect a player's current dimension?


It's saved in NBT. Quote from the Minecraft wiki (archive):

Dimension: The dimension the player is in. -1 is the Nether, 0 is the Overworld, 1 is the End.


Alternatively, you could still use /execute in, but also check for a radius of 0 or more (which sounds useless, but can be used as a dimension check):

/execute in the_nether if entity @a[distance=0..] run …

This executes if there is a player in the Nether.


There is also an advancement trigger called "changed_dimension" (archive) that can be used to detect a change to a specified dimension and trigger something at that moment. Alternatively you could use the dimension field in the location trigger (archive).


execute store result score @s dimension run data get entity @s Dimension

This will set the scoreboard value based on the length of the entity's dimension string.

20 - "minecraft:the_nether", 19 - "minecraft:overworld", 17 - "minecraft:the_end"

You can either have your functions handling dimensions instead with these numbers, or you can convert them.