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