]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/providers/CustomBoxProvider.java
b44e77a17a436a78d1aaa348847359e85fa599ac
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / providers / CustomBoxProvider.java
1 package com.irtimaled.bbor.client.providers;
2
3 import com.irtimaled.bbor.client.Player;
4 import com.irtimaled.bbor.common.BoundingBoxType;
5 import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
6 import com.irtimaled.bbor.common.models.Coords;
7
8 import java.util.HashMap;
9 import java.util.Map;
10 import java.util.concurrent.ConcurrentHashMap;
11
12 public class CustomBoxProvider implements IBoundingBoxProvider<BoundingBoxCuboid> {
13     private static final Map<Integer, Map<Integer, BoundingBoxCuboid>> dimensionCache = new HashMap<>();
14
15     private static int getHashKey(Coords minCoords, Coords maxCoords) {
16         return (31 + minCoords.hashCode()) * 31 + maxCoords.hashCode();
17     }
18
19     private static Map<Integer, BoundingBoxCuboid> getCache(int dimensionId) {
20         return dimensionCache.computeIfAbsent(dimensionId, i -> new ConcurrentHashMap<>());
21     }
22
23     public static void add(Coords minCoords, Coords maxCoords) {
24         int dimensionId = Player.getDimensionId();
25         int cacheKey = getHashKey(minCoords, maxCoords);
26         BoundingBoxCuboid cuboid = BoundingBoxCuboid.from(minCoords, maxCoords, BoundingBoxType.Custom);
27         getCache(dimensionId).put(cacheKey, cuboid);
28     }
29
30     public static boolean remove(Coords minCoords, Coords maxCoords) {
31         int dimensionId = Player.getDimensionId();
32         int cacheKey = getHashKey(minCoords, maxCoords);
33         return getCache(dimensionId).remove(cacheKey) != null;
34     }
35
36     public static void clear() {
37         dimensionCache.values().forEach(Map::clear);
38     }
39
40     public Iterable<BoundingBoxCuboid> get(int dimensionId) {
41         return getCache(dimensionId).values();
42     }
43 }