]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/providers/CustomLineProvider.java
Several fixes
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / providers / CustomLineProvider.java
1 package com.irtimaled.bbor.client.providers;
2
3 import com.irtimaled.bbor.client.Player;
4 import com.irtimaled.bbor.client.models.BoundingBoxLine;
5 import com.irtimaled.bbor.client.models.Point;
6 import com.irtimaled.bbor.common.BoundingBoxType;
7 import com.irtimaled.bbor.common.models.DimensionId;
8
9 import java.util.HashMap;
10 import java.util.Map;
11 import java.util.concurrent.ConcurrentHashMap;
12
13 public class CustomLineProvider implements IBoundingBoxProvider<BoundingBoxLine>, ICachingProvider {
14     private static final Map<DimensionId, Map<Integer, BoundingBoxLine>> dimensionCache = new HashMap<>();
15
16     private static int getHashKey(Point minPoint, Point maxPoint) {
17         return (31 + minPoint.hashCode()) * 31 + maxPoint.hashCode();
18     }
19
20     private static Map<Integer, BoundingBoxLine> getCache(DimensionId dimensionId) {
21         return dimensionCache.computeIfAbsent(dimensionId, i -> new ConcurrentHashMap<>());
22     }
23
24     public static void add(Point minPoint, Point maxPoint, Double width) {
25         DimensionId dimensionId = Player.getDimensionId();
26         int cacheKey = getHashKey(minPoint, maxPoint);
27         BoundingBoxLine line = BoundingBoxLine.from(minPoint, maxPoint, width, BoundingBoxType.Custom);
28         getCache(dimensionId).put(cacheKey, line);
29     }
30
31     public static boolean remove(Point min, Point max) {
32         DimensionId dimensionId = Player.getDimensionId();
33         int cacheKey = getHashKey(min, max);
34         return getCache(dimensionId).remove(cacheKey) != null;
35     }
36
37     public static void clear() {
38         dimensionCache.values().forEach(Map::clear);
39     }
40
41     public void clearCache() {
42         clear();
43     }
44
45     @Override
46     public Iterable<BoundingBoxLine> get(DimensionId dimensionId) {
47         return getCache(dimensionId).values();
48     }
49 }