1 package com.irtimaled.bbor.client.interop;
3 import com.irtimaled.bbor.common.TypeHelper;
4 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
5 import com.irtimaled.bbor.mixin.client.access.IClientChunkManager;
6 import com.irtimaled.bbor.mixin.client.access.IClientChunkManagerClientChunkMap;
7 import net.minecraft.block.entity.BlockEntity;
8 import net.minecraft.client.MinecraftClient;
9 import net.minecraft.world.chunk.WorldChunk;
11 import java.util.Collection;
12 import java.util.HashSet;
14 import java.util.concurrent.atomic.AtomicReferenceArray;
15 import java.util.function.Function;
17 public class TileEntitiesHelper {
18 public static <T extends BlockEntity, S extends AbstractBoundingBox> Iterable<S> map(Class<T> clazz, Function<T, S> map) {
19 @SuppressWarnings("ConstantConditions") final AtomicReferenceArray<WorldChunk> chunks = ((IClientChunkManagerClientChunkMap) (Object) ((IClientChunkManager) MinecraftClient.getInstance().world.getChunkManager()).getChunks()).getChunks();
20 Collection<BlockEntity> tileEntities = new HashSet<>();
21 for (int i = 0; i < chunks.length(); i ++) {
22 final WorldChunk worldChunk = chunks.get(i);
23 if(worldChunk == null) continue;
24 tileEntities.addAll(worldChunk.getBlockEntities().values());
27 Set<S> results = new HashSet<>();
28 for (BlockEntity tileEntity : tileEntities) {
29 T typed = TypeHelper.as(tileEntity, clazz);
33 S result = map.apply(typed);