]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/providers/SpawnableBlocksProvider.java
462bf6ef29b96d40a000809ce6290aaba4113ea3
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / providers / SpawnableBlocksProvider.java
1 package com.irtimaled.bbor.client.providers;
2
3 import com.irtimaled.bbor.client.Player;
4 import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
5 import com.irtimaled.bbor.client.config.ConfigManager;
6 import com.irtimaled.bbor.client.interop.SpawnableBlocksHelper;
7 import com.irtimaled.bbor.client.models.BoundingBoxSpawnableBlocks;
8 import com.irtimaled.bbor.common.BoundingBoxType;
9 import com.irtimaled.bbor.common.MathHelper;
10 import com.irtimaled.bbor.common.models.DimensionId;
11 import net.minecraft.client.Minecraft;
12
13 import java.util.HashSet;
14 import java.util.Set;
15
16 public class SpawnableBlocksProvider implements IBoundingBoxProvider<BoundingBoxSpawnableBlocks>, ICachingProvider {
17     public static final Minecraft minecraft = Minecraft.getInstance();
18     private static Long lastGameTime = null;
19
20     private static Set<BoundingBoxSpawnableBlocks> lastBoundingBox = null;
21
22     public void clearCache() {
23         lastGameTime = null;
24         lastBoundingBox = null;
25     }
26
27     private boolean isWithinActiveSpawningSphere() {
28         return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.AFKSphere) &&
29                 ConfigManager.renderAFKSpawnableBlocks.get() &&
30                 SpawningSphereProvider.playerInsideSphere();
31     }
32
33     @Override
34     public boolean canProvide(DimensionId dimensionId) {
35         return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.SpawnableBlocks) &&
36                 !isWithinActiveSpawningSphere();
37     }
38
39     @Override
40     public Iterable<BoundingBoxSpawnableBlocks> get(DimensionId dimensionId) {
41         long gameTime = minecraft.world.getGameTime();
42         if (lastBoundingBox == null || (!((Long) gameTime).equals(lastGameTime) && gameTime % 2L == 0L)) {
43             lastGameTime = gameTime;
44             lastBoundingBox = getSpawnableBlocks();
45         }
46         return lastBoundingBox;
47     }
48
49     private Set<BoundingBoxSpawnableBlocks> getSpawnableBlocks() {
50         BoundingBoxSpawnableBlocks boundingBox = new BoundingBoxSpawnableBlocks();
51
52         int width = MathHelper.floor(Math.pow(2, 1 + ConfigManager.spawnableBlocksRenderWidth.get()));
53         int height = MathHelper.floor(Math.pow(2, ConfigManager.spawnableBlocksRenderHeight.get()));
54
55         SpawnableBlocksHelper.findSpawnableBlocks(Player.getCoords(), width, height, boundingBox.getBlocks()::add);
56
57         Set<BoundingBoxSpawnableBlocks> boundingBoxes = new HashSet<>();
58         boundingBoxes.add(boundingBox);
59         return boundingBoxes;
60     }
61 }