1 package com.irtimaled.bbor.client.providers;
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 import com.irtimaled.bbor.common.models.DimensionId;
9 import java.util.HashMap;
11 import java.util.concurrent.ConcurrentHashMap;
13 public class CustomBeaconProvider implements IBoundingBoxProvider<BoundingBoxBeacon>, ICachingProvider {
14 private static final Map<DimensionId, Map<Coords, BoundingBoxBeacon>> dimensionsCache = new HashMap<>();
16 private static Map<Coords, BoundingBoxBeacon> getCache(DimensionId dimensionId) {
17 return dimensionsCache.computeIfAbsent(dimensionId, i -> new ConcurrentHashMap<>());
20 public static void add(Coords coords, int level) {
21 DimensionId dimensionId = Player.getDimensionId();
22 BoundingBoxBeacon beacon = BoundingBoxBeacon.from(coords, level, BoundingBoxType.Custom);
23 getCache(dimensionId).put(coords, beacon);
26 public static boolean remove(Coords coords) {
27 DimensionId dimensionId = Player.getDimensionId();
28 return getCache(dimensionId).remove(coords) != null;
31 public static void clear() {
32 dimensionsCache.values().forEach(Map::clear);
35 public void clearCache() {
40 public Iterable<BoundingBoxBeacon> get(DimensionId dimensionId) {
41 return getCache(dimensionId).values();