|
10 | 10 | import net.minecraftforge.common.util.LazyOptional; |
11 | 11 |
|
12 | 12 | public class RoomChunkCapabilities implements IRoomCapabilities { |
13 | | - private final HashMap<TunnelDefinition, HashSet<Direction>> capabilities; |
14 | | - private final HashMap<TunnelDefinition, HashMap<Direction, LazyOptional<?>>> sidedCache; |
| 13 | + private final HashMap<TunnelDefinition, HashSet<Direction>> placedTunnels; |
| 14 | + // private final HashMap<TunnelDefinition, HashMap<T, TunnelSideCache<T>>> sidedCache; |
15 | 15 |
|
16 | 16 | public RoomChunkCapabilities(LevelChunk chunk) { |
17 | | - this.capabilities = new HashMap<>(); |
18 | | - this.sidedCache = new HashMap<>(); |
| 17 | + this.placedTunnels = new HashMap<>(); |
| 18 | + // this.sidedCache = new HashMap<>(); |
19 | 19 | } |
20 | 20 |
|
21 | 21 | @Override |
22 | 22 | public <CapType, TunnType extends TunnelDefinition> void addCapability(TunnType tunnel, Capability<CapType> capability, CapType instance, Direction side) { |
23 | | - capabilities.putIfAbsent(tunnel, new HashSet<>()); |
24 | | - sidedCache.putIfAbsent(tunnel, new HashMap<>()); |
| 23 | + placedTunnels.putIfAbsent(tunnel, new HashSet<>()); |
25 | 24 |
|
26 | | - var sides = capabilities.get(tunnel); |
| 25 | + var sides = placedTunnels.get(tunnel); |
27 | 26 | if (!sides.isEmpty() && sides.contains(side)) |
28 | 27 | return; |
29 | 28 |
|
30 | 29 | sides.add(side); |
31 | | - var cache = sidedCache.get(tunnel); |
32 | | - cache.put(side, LazyOptional.of(() -> instance)); |
33 | 30 | } |
34 | 31 |
|
35 | 32 | @Override |
36 | 33 | public <CapType, TunnType extends TunnelDefinition> void removeCapability(TunnType tunnel, Capability<CapType> capability, Direction side) { |
37 | | - if (!capabilities.containsKey(tunnel)) |
| 34 | + if (!placedTunnels.containsKey(tunnel)) |
38 | 35 | return; |
39 | 36 |
|
40 | | - var sides = capabilities.get(tunnel); |
41 | | - if (sides.contains(side)) { |
42 | | - sides.remove(side); |
43 | | - if (sidedCache.containsKey(tunnel)) { |
44 | | - var cache = sidedCache.get(tunnel); |
45 | | - if (cache.containsKey(side)) { |
46 | | - cache.get(side).invalidate(); |
47 | | - cache.remove(side); |
48 | | - } |
49 | | - } |
50 | | - } |
| 37 | + var sides = placedTunnels.get(tunnel); |
| 38 | + sides.remove(side); |
51 | 39 | } |
52 | 40 |
|
53 | 41 | @Override |
54 | 42 | public <CapType, TunnType extends TunnelDefinition> LazyOptional<CapType> getCapability(TunnType tunnel, Capability<CapType> capability, Direction side) { |
55 | 43 | if (side == null) |
56 | 44 | return LazyOptional.empty(); |
57 | 45 |
|
58 | | - if (capabilities.containsKey(tunnel)) { |
59 | | - // get sides tunnel applied to |
60 | | - var c = capabilities.get(tunnel); |
61 | | - if (c.contains(side) && sidedCache.containsKey(tunnel)) |
62 | | - return sidedCache.get(tunnel).get(side).cast(); |
| 46 | + if (placedTunnels.containsKey(tunnel) && placedTunnels.get(tunnel).contains(side)) { |
| 47 | + // TODO: delegate capability lookup back to tunnel definition, with storage |
63 | 48 | } |
64 | 49 |
|
65 | 50 | return LazyOptional.empty(); |
|
0 commit comments