Skip to content

Commit 5b3f2e6

Browse files
committed
fix: region biomes
Previously, setBiomes failed when the start position values exceeded the end position values. However, fixing this revealed that the target chunk may not be loaded, resulting in a null Chunk and preventing setBiome from running.
1 parent dc3d03e commit 5b3f2e6

1 file changed

Lines changed: 15 additions & 6 deletions

File tree

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/SkyBlockGenericLoader.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
import java.lang.reflect.InvocationTargetException;
9696
import java.time.Duration;
9797
import java.util.*;
98+
import java.util.concurrent.CompletableFuture;
9899
import java.util.stream.Stream;
99100

100101
public record SkyBlockGenericLoader(HypixelTypeLoader typeLoader) {
@@ -303,7 +304,6 @@ public void initialize(MinecraftServer server) {
303304
.build());
304305
SkyBlockIsland.runVacantLoop(MinecraftServer.getSchedulerManager());
305306

306-
// Set region biomes
307307
SkyBlockRegion.getRegions().forEach(region -> {
308308
if (region.getServerType() != HypixelConst.getTypeLoader().getType()) return;
309309
SkyBlockBiomeConfiguration biomeConfig = region.getType().getBiomeHandler();
@@ -579,14 +579,23 @@ public static <T> Stream<T> loopThroughPackage(String packageName, Class<T> claz
579579
}
580580

581581
private void setBiome(int x, int y, int z, RegistryKey<Biome> biome) {
582-
Chunk chunk = HypixelConst.getInstanceContainer().getChunk(CoordConversion.globalToChunk(x), CoordConversion.globalToChunk(z));
583-
chunk.setBiome(x, y, z, biome);
582+
CompletableFuture<Chunk> chunk = HypixelConst.getInstanceContainer().loadChunk(CoordConversion.globalToChunk(x), CoordConversion.globalToChunk(z));
583+
chunk.thenAccept((c) -> c.setBiome(x, y, z, biome));
584584
}
585585

586586
private void setBiome(Pos start, Pos end, RegistryKey<Biome> biome) {
587-
for (int x = start.blockX(); x <= end.blockX(); x++) {
588-
for (int y = start.blockY(); y <= end.blockY(); y++) {
589-
for (int z = start.blockZ(); z <= end.blockZ(); z++) {
587+
int minX = Math.min(start.blockX(), end.blockX());
588+
int maxX = Math.max(start.blockX(), end.blockX());
589+
590+
int minY = Math.min(start.blockY(), end.blockY());
591+
int maxY = Math.max(start.blockY(), end.blockY());
592+
593+
int minZ = Math.min(start.blockZ(), end.blockZ());
594+
int maxZ = Math.max(start.blockZ(), end.blockZ());
595+
596+
for (int x = minX; x <= maxX; x++) {
597+
for (int y = minY; y <= maxY; y++) {
598+
for (int z = minZ; z <= maxZ; z++) {
590599
setBiome(x, y, z, biome);
591600
}
592601
}

0 commit comments

Comments
 (0)