63 lines
2.4 KiB
Java
63 lines
2.4 KiB
Java
package com.hypixel.hytale.builtin.hytalegenerator.newsystem;
|
|
|
|
import com.hypixel.hytale.builtin.hytalegenerator.LoggerUtil;
|
|
import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
|
|
import com.hypixel.hytale.math.util.ChunkUtil;
|
|
import com.hypixel.hytale.server.core.command.system.CommandSender;
|
|
import com.hypixel.hytale.server.core.universe.world.World;
|
|
import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
|
|
import it.unimi.dsi.fastutil.longs.LongArraySet;
|
|
import it.unimi.dsi.fastutil.longs.LongIterator;
|
|
import it.unimi.dsi.fastutil.longs.LongSet;
|
|
import java.util.concurrent.CompletableFuture;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class NViewport {
|
|
@Nonnull
|
|
private final World world;
|
|
@Nonnull
|
|
private final CommandSender sender;
|
|
@Nonnull
|
|
private final LongSet affectedChunkIndices;
|
|
|
|
public NViewport(@Nonnull Bounds3i viewportBounds_voxelGrid, @Nonnull World world, @Nonnull CommandSender sender) {
|
|
this.world = world;
|
|
this.sender = sender;
|
|
int minCX = ChunkUtil.chunkCoordinate(viewportBounds_voxelGrid.min.x);
|
|
int minCZ = ChunkUtil.chunkCoordinate(viewportBounds_voxelGrid.min.z);
|
|
int maxCX = ChunkUtil.chunkCoordinate(viewportBounds_voxelGrid.max.x);
|
|
int maxCZ = ChunkUtil.chunkCoordinate(viewportBounds_voxelGrid.max.z);
|
|
this.affectedChunkIndices = new LongArraySet();
|
|
|
|
for (int x = minCX; x <= maxCX; x++) {
|
|
for (int z = minCZ; z <= maxCZ; z++) {
|
|
long chunkIndex = ChunkUtil.indexChunk(x, z);
|
|
this.affectedChunkIndices.add(chunkIndex);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void refresh() {
|
|
LoggerUtil.getLogger().info("Refreshing viewport...");
|
|
CompletableFuture<?>[] futures = new CompletableFuture[this.affectedChunkIndices.size()];
|
|
int i = 0;
|
|
LongIterator var3 = this.affectedChunkIndices.iterator();
|
|
|
|
while (var3.hasNext()) {
|
|
long chunkIndex = (Long)var3.next();
|
|
ChunkStore chunkStore = this.world.getChunkStore();
|
|
CompletableFuture<?> future = chunkStore.getChunkReferenceAsync(chunkIndex, 9);
|
|
futures[i++] = future;
|
|
}
|
|
|
|
CompletableFuture.allOf(futures).handle((r, e) -> {
|
|
if (e == null) {
|
|
return (Void)r;
|
|
} else {
|
|
LoggerUtil.logException("viewport refresh", e);
|
|
return null;
|
|
}
|
|
}).thenRun(() -> LoggerUtil.getLogger().info("Viewport refresh complete."));
|
|
}
|
|
}
|