]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/common/models/DimensionId.java
Setup for 1.16.3 Fabric
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / common / models / DimensionId.java
1 package com.irtimaled.bbor.common.models;
2
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;
8
9 import java.util.HashMap;
10 import java.util.Map;
11 import java.util.Optional;
12 import java.util.function.Function;
13
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<>();
19
20     public static DimensionId from(RegistryKey<World> registryKey) {
21         Identifier value = registryKey.getValue();
22         typeMap.put(value, registryKey);
23         return from(value);
24     }
25
26     public static DimensionId from(Identifier value) {
27         return dimensionIdMap.computeIfAbsent(value, DimensionId::new);
28     }
29
30     public static DimensionId OVERWORLD = DimensionId.from(World.OVERWORLD);
31     public static DimensionId NETHER = DimensionId.from(World.NETHER);
32
33     private final Identifier value;
34
35     public DimensionId(Identifier value) {
36         this.value = value;
37     }
38
39     public Identifier getValue() {
40         return value;
41     }
42
43     public RegistryKey<World> getDimensionType() {
44         return typeMap.get(value);
45     }
46
47     @Override
48     public String toString() {
49         return value.toString();
50     }
51 }