]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/providers/ConduitProvider.java
c74deb3a10586bfeb9b907eaa61ceecb8c3dd765
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / providers / ConduitProvider.java
1 package com.irtimaled.bbor.client.providers;
2
3 import com.irtimaled.bbor.ReflectionHelper;
4 import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
5 import com.irtimaled.bbor.client.interop.TileEntitiesHelper;
6 import com.irtimaled.bbor.client.models.BoundingBoxConduit;
7 import com.irtimaled.bbor.common.BoundingBoxType;
8 import com.irtimaled.bbor.common.models.Coords;
9 import net.minecraft.tileentity.TileEntityConduit;
10 import net.minecraft.util.math.BlockPos;
11
12 import java.util.List;
13 import java.util.function.Function;
14
15 public class ConduitProvider implements IBoundingBoxProvider<BoundingBoxConduit> {
16     private static final Function<TileEntityConduit, List<BlockPos>> blocksFetcher =
17             ReflectionHelper.getPrivateFieldGetter(TileEntityConduit.class, List.class, BlockPos.class);
18
19     @Override
20     public boolean canProvide(int dimensionId) {
21         return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.Conduit);
22     }
23
24     @Override
25     public Iterable<BoundingBoxConduit> get(int dimensionId) {
26         return TileEntitiesHelper.map(TileEntityConduit.class, conduit -> {
27             List<BlockPos> blocks = blocksFetcher.apply(conduit);
28             if (blocks == null) return null;
29
30             Coords coords = new Coords(conduit.getPos());
31             return BoundingBoxConduit.from(coords, conduit.isActive() ? blocks.size() / 7 : 0);
32         });
33     }
34 }