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