xBigEllx Posted April 8, 2021 Posted April 8, 2021 (edited) Hello. I'm creating a mod that needs to access all registered Vanilla and mod dimension Ids. In 1.15, it was possible to use the following: for (DimensionType type : DimensionType.getAll()) {} From there, I could access each of their dimension Ids. This seems to have changed in 1.16 and I can't figure out another way to access these dimensions. I have tried accessing the "WORLD_TYPES" Forge registry by using the following: for (ForgeWorldType type : ForgeRegistries.WORLD_TYPES.getValues()) {} Unfortunately, it appears that this is also not the correct way to do it as there are no values in here. Any help is appreciated. Edited April 8, 2021 by xBigEllx Quote
ChampionAsh5357 Posted April 8, 2021 Posted April 8, 2021 DimensionTypes are dynamic since they are now data driven. This means that the associated data can only be accessed whenever a world is loaded. You can get access to this through MinecraftServer#registryAccess which gives you an instance of DynamicRegistries. There is a convenient method there for grabbing the registry called DynamicRegistries#dimensionTypes. Registry is an instance of Iterable on the value. 1 Quote
xBigEllx Posted April 8, 2021 Author Posted April 8, 2021 Thank you, that's just what I needed. However, I needed to change the names of some of the methods I was calling, as it seems they were obfuscated (I think that's the correct term). Here is the code I used to access all dimension types: for (DimensionType type : world.getServer().func_244267_aX().func_230520_a_()) {} Here is the code I used to access all dimension Ids: for (ResourceLocation location : world.getServer().func_244267_aX().func_230520_a_().keySet()) {} Quote
balex25 Posted October 13, 2023 Posted October 13, 2023 // Get all dimensions MinecraftServer server = ... Registry<DimensionType> dimensionRegistry = server.registryAccess().registryOrThrow(Registries.DIMENSION_TYPE); for (Map.Entry<ResourceKey<DimensionType>, DimensionType> dimensionEntry : dimensionRegistry.entrySet()) { ResourceKey<DimensionType> dimensionKey = dimensionEntry.getKey(); DimensionType dimension = dimensionEntry.getValue(); } Working on 1.20.1, if someone is still interested in the latest version of Minecraft. Quote
NinaKunze Posted October 18, 2023 Posted October 18, 2023 (edited) On 4/8/2021 at 12:33 AM, xBigEllx said: Hello. I'm creating a mod that needs to access all registered Vanilla and mod dimension Ids. In 1.15, it was possible to use the following: for (DimensionType type : DimensionType.getAll()) {} From there, I could access each of their dimension Ids. This seems to have changed in 1.16 and I can't figure out another way to access these dimensions. I have tried accessing the "WORLD_TYPES" Forge registry by using the following: for (ForgeWorldType type : ForgeRegistries.WORLD_TYPES.getValues()) {} Unfortunately, it appears that this is also not the correct way to do it as there are no values in here. Any help is appreciated. Expand In Minecraft 1.16+, use `DimensionManager` to access dimension IDs. Iterate through registered dimensions with `DimensionManager.getRegistry().keySet()`, enabling access to both vanilla and mod-added dimensions. Edit: All good? Edited November 17, 2023 by NinaKunze Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.