1 package com.irtimaled.bbor.common.models;
3 import com.irtimaled.bbor.common.ReflectionHelper;
4 import net.minecraft.util.Identifier;
5 import net.minecraft.util.registry.RegistryKey;
6 import net.minecraft.world.World;
7 import net.minecraft.world.dimension.DimensionType;
9 import java.util.HashMap;
11 import java.util.Optional;
12 import java.util.function.Function;
14 public class DimensionId {
15 private static final Function<DimensionType, Optional<RegistryKey<DimensionType>>> getRegistryKey =
16 ReflectionHelper.getPrivateFieldGetter(DimensionType.class, Optional.class);
17 private static final Map<Identifier, RegistryKey<World>> typeMap = new HashMap<>();
18 private static final Map<Identifier, DimensionId> dimensionIdMap = new HashMap<>();
20 public static DimensionId from(RegistryKey<World> registryKey) {
21 Identifier value = registryKey.getValue();
22 typeMap.put(value, registryKey);
26 public static DimensionId from(Identifier value) {
27 return dimensionIdMap.computeIfAbsent(value, DimensionId::new);
30 public static DimensionId OVERWORLD = DimensionId.from(World.OVERWORLD);
31 public static DimensionId NETHER = DimensionId.from(World.NETHER);
33 private final Identifier value;
35 public DimensionId(Identifier value) {
39 public Identifier getValue() {
43 public RegistryKey<World> getDimensionType() {
44 return typeMap.get(value);
48 public String toString() {
49 return value.toString();