1 package com.irtimaled.bbor.client.providers;
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;
13 import java.util.HashSet;
16 public class SpawnableBlocksProvider implements IBoundingBoxProvider<BoundingBoxSpawnableBlocks>, ICachingProvider {
17 public static final Minecraft minecraft = Minecraft.getInstance();
18 private static Long lastGameTime = null;
20 private static Set<BoundingBoxSpawnableBlocks> lastBoundingBox = null;
22 public void clearCache() {
24 lastBoundingBox = null;
27 private boolean isWithinActiveSpawningSphere() {
28 return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.AFKSphere) &&
29 ConfigManager.renderAFKSpawnableBlocks.get() &&
30 SpawningSphereProvider.playerInsideSphere();
34 public boolean canProvide(DimensionId dimensionId) {
35 return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.SpawnableBlocks) &&
36 !isWithinActiveSpawningSphere();
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();
46 return lastBoundingBox;
49 private Set<BoundingBoxSpawnableBlocks> getSpawnableBlocks() {
50 BoundingBoxSpawnableBlocks boundingBox = new BoundingBoxSpawnableBlocks();
52 int width = MathHelper.floor(Math.pow(2, 1 + ConfigManager.spawnableBlocksRenderWidth.get()));
53 int height = MathHelper.floor(Math.pow(2, ConfigManager.spawnableBlocksRenderHeight.get()));
55 SpawnableBlocksHelper.findSpawnableBlocks(Player.getCoords(), width, height, boundingBox.getBlocks()::add);
57 Set<BoundingBoxSpawnableBlocks> boundingBoxes = new HashSet<>();
58 boundingBoxes.add(boundingBox);