]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/providers/CustomBeaconProvider.java
6033ac7943ec937206d8b9e4c563876eb0a96bf0
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / providers / CustomBeaconProvider.java
1 package com.irtimaled.bbor.client.providers;
2
3 import com.irtimaled.bbor.client.Player;
4 import com.irtimaled.bbor.client.models.BoundingBoxBeacon;
5 import com.irtimaled.bbor.common.BoundingBoxType;
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 CustomBeaconProvider implements IBoundingBoxProvider<BoundingBoxBeacon> {
13     private static final Map<Integer, Map<Coords, BoundingBoxBeacon>> dimensionsCache = new HashMap<>();
14
15     private static Map<Coords, BoundingBoxBeacon> getCache(int dimensionId) {
16         return dimensionsCache.computeIfAbsent(dimensionId, i -> new ConcurrentHashMap<>());
17     }
18
19     public static void add(Coords coords, int level) {
20         int dimensionId = Player.getDimensionId();
21         BoundingBoxBeacon beacon = BoundingBoxBeacon.from(coords, level, BoundingBoxType.Custom);
22         getCache(dimensionId).put(coords, beacon);
23     }
24
25     public static boolean remove(Coords coords) {
26         int dimensionId = Player.getDimensionId();
27         return getCache(dimensionId).remove(coords) != null;
28     }
29
30     public static void clear() {
31         dimensionsCache.values().forEach(Map::clear);
32     }
33
34     @Override
35     public Iterable<BoundingBoxBeacon> get(int dimensionId) {
36         return getCache(dimensionId).values();
37     }
38 }