From 5b3f2e6ceaae749f1dadd4c3b9f4712958b422f6 Mon Sep 17 00:00:00 2001 From: ArikSquad <75741608+ArikSquad@users.noreply.github.com> Date: Tue, 30 Dec 2025 00:56:16 +0200 Subject: [PATCH] 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. --- .../SkyBlockGenericLoader.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/SkyBlockGenericLoader.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/SkyBlockGenericLoader.java index 69e45e07a..1b67eb18f 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/SkyBlockGenericLoader.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/SkyBlockGenericLoader.java @@ -95,6 +95,7 @@ import java.lang.reflect.InvocationTargetException; import java.time.Duration; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; public record SkyBlockGenericLoader(HypixelTypeLoader typeLoader) { @@ -303,7 +304,6 @@ public void initialize(MinecraftServer server) { .build()); SkyBlockIsland.runVacantLoop(MinecraftServer.getSchedulerManager()); - // Set region biomes SkyBlockRegion.getRegions().forEach(region -> { if (region.getServerType() != HypixelConst.getTypeLoader().getType()) return; SkyBlockBiomeConfiguration biomeConfig = region.getType().getBiomeHandler(); @@ -579,14 +579,23 @@ public static Stream loopThroughPackage(String packageName, Class claz } private void setBiome(int x, int y, int z, RegistryKey biome) { - Chunk chunk = HypixelConst.getInstanceContainer().getChunk(CoordConversion.globalToChunk(x), CoordConversion.globalToChunk(z)); - chunk.setBiome(x, y, z, biome); + CompletableFuture chunk = HypixelConst.getInstanceContainer().loadChunk(CoordConversion.globalToChunk(x), CoordConversion.globalToChunk(z)); + chunk.thenAccept((c) -> c.setBiome(x, y, z, biome)); } private void setBiome(Pos start, Pos end, RegistryKey biome) { - for (int x = start.blockX(); x <= end.blockX(); x++) { - for (int y = start.blockY(); y <= end.blockY(); y++) { - for (int z = start.blockZ(); z <= end.blockZ(); z++) { + int minX = Math.min(start.blockX(), end.blockX()); + int maxX = Math.max(start.blockX(), end.blockX()); + + int minY = Math.min(start.blockY(), end.blockY()); + int maxY = Math.max(start.blockY(), end.blockY()); + + int minZ = Math.min(start.blockZ(), end.blockZ()); + int maxZ = Math.max(start.blockZ(), end.blockZ()); + + for (int x = minX; x <= maxX; x++) { + for (int y = minY; y <= maxY; y++) { + for (int z = minZ; z <= maxZ; z++) { setBiome(x, y, z, biome); } }