]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blobdiff - src/main/java/com/irtimaled/bbor/client/interop/TileEntitiesHelper.java
Update to 1.17.1 (#124)
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / interop / TileEntitiesHelper.java
index 75d7fc0f9b1b1fae8a8ac8f4b3b10b9534841b71..1119146640125bed6e534a6eac87d6f7e038b0a4 100644 (file)
@@ -2,20 +2,30 @@ package com.irtimaled.bbor.client.interop;
 
 import com.irtimaled.bbor.common.TypeHelper;
 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
-import net.minecraft.client.Minecraft;
-import net.minecraft.tileentity.TileEntity;
+import com.irtimaled.bbor.mixin.client.access.IClientChunkManager;
+import com.irtimaled.bbor.mixin.client.access.IClientChunkManagerClientChunkMap;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.world.chunk.WorldChunk;
 
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicReferenceArray;
 import java.util.function.Function;
 
 public class TileEntitiesHelper {
-    public static <T extends TileEntity, S extends AbstractBoundingBox> Iterable<S> map(Class<T> clazz, Function<T, S> map) {
-        Collection<TileEntity> tileEntities = Minecraft.getInstance().world.loadedTileEntityList;
+    public static <T extends BlockEntity, S extends AbstractBoundingBox> Iterable<S> map(Class<T> clazz, Function<T, S> map) {
+        @SuppressWarnings("ConstantConditions") final AtomicReferenceArray<WorldChunk> chunks = ((IClientChunkManagerClientChunkMap) (Object) ((IClientChunkManager) MinecraftClient.getInstance().world.getChunkManager()).getChunks()).getChunks();
+        Collection<BlockEntity> tileEntities = new HashSet<>();
+        for (int i = 0; i < chunks.length(); i ++) {
+            final WorldChunk worldChunk = chunks.get(i);
+            if(worldChunk == null) continue;
+            tileEntities.addAll(worldChunk.getBlockEntities().values());
+        }
 
         Set<S> results = new HashSet<>();
-        for (TileEntity tileEntity : tileEntities) {
+        for (BlockEntity tileEntity : tileEntities) {
             T typed = TypeHelper.as(tileEntity, clazz);
             if (typed == null) {
                 continue;