import com.irtimaled.bbor.client.interop.BlockProcessor;
import com.irtimaled.bbor.client.interop.SpawningSphereHelper;
import com.irtimaled.bbor.client.models.BoundingBoxSpawningSphere;
+import com.irtimaled.bbor.client.models.Point;
import com.irtimaled.bbor.common.BoundingBoxType;
import com.irtimaled.bbor.common.MathHelper;
-import com.irtimaled.bbor.common.models.Point;
-import net.minecraft.client.Minecraft;
+import com.irtimaled.bbor.common.models.DimensionId;
+import net.minecraft.client.MinecraftClient;
import java.util.HashSet;
import java.util.Set;
-public class SpawningSphereProvider implements IBoundingBoxProvider<BoundingBoxSpawningSphere> {
- public static final Minecraft minecraft = Minecraft.getInstance();
+public class SpawningSphereProvider implements IBoundingBoxProvider<BoundingBoxSpawningSphere>, ICachingProvider {
+ public static final MinecraftClient minecraft = MinecraftClient.getInstance();
private static Long lastGameTime = null;
private static Set<BoundingBoxSpawningSphere> lastBoundingBox = null;
private static BoundingBoxSpawningSphere spawningSphere;
- private static Integer dimensionId;
-
- public static void setSphere(double x, double y, double z) {
- Point point = new Point(snapToNearestHalf(x), y, snapToNearestHalf(z));
+ private static DimensionId dimensionId;
+ public static void setSphere(Point point) {
if (spawningSphere != null && spawningSphere.getPoint().equals(point)) return;
- clear();
dimensionId = Player.getDimensionId();
spawningSphere = new BoundingBoxSpawningSphere(point);
lastBoundingBox = null;
}
- private static double snapToNearestHalf(double value) {
- int floor = MathHelper.floor(value);
- int fraction = MathHelper.floor((value - floor) * 4.0);
- if (fraction % 2 == 1) fraction++;
- return floor + (fraction / 4.0);
- }
-
- public static boolean clear() {
+ public static boolean clearSphere() {
if (spawningSphere != null) {
lastBoundingBox = null;
spawningSphere = null;
return false;
}
+ public void clearCache() {
+ clearSphere();
+ }
+
public static void calculateSpawnableSpacesCount(BlockProcessor blockProcessor) {
if (spawningSphere != null) {
Point sphereCenter = spawningSphere.getPoint();
return hasSpawningSphereInDimension(Player.getDimensionId()) && spawningSphere.isWithinSphere(Player.getPoint());
}
- public static boolean hasSpawningSphereInDimension(int dimensionId) {
+ public static boolean hasSpawningSphereInDimension(DimensionId dimensionId) {
return spawningSphere != null && SpawningSphereProvider.dimensionId == dimensionId;
}
}
@Override
- public boolean canProvide(int dimensionId) {
+ public boolean canProvide(DimensionId dimensionId) {
return hasSpawningSphereInDimension(dimensionId) && BoundingBoxTypeHelper.shouldRender(BoundingBoxType.AFKSphere);
}
@Override
- public Iterable<BoundingBoxSpawningSphere> get(int dimensionId) {
- long gameTime = minecraft.world.getGameTime();
+ public Iterable<BoundingBoxSpawningSphere> get(DimensionId dimensionId) {
+ long gameTime = minecraft.world.getTime();
if (lastBoundingBox == null || (!((Long) gameTime).equals(lastGameTime) && gameTime % 2L == 0L)) {
lastGameTime = gameTime;
lastBoundingBox = getSpawningSphere();