1 package com.irtimaled.bbor.client.providers;
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;
13 import java.util.List;
14 import java.util.function.Function;
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);
21 public boolean canProvide(DimensionId dimensionId) {
22 return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.Conduit);
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;
31 Coords coords = new Coords(conduit.getPos());
32 return BoundingBoxConduit.from(coords, conduit.isActive() ? blocks.size() / 7 : 0);