]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/interop/BiomeBorderHelper.java
7cde22bbdc79702abb253550d9d21fa003cfd79f
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / interop / BiomeBorderHelper.java
1 package com.irtimaled.bbor.client.interop;
2
3 import com.irtimaled.bbor.common.models.Coords;
4 import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
5 import net.minecraft.client.MinecraftClient;
6 import net.minecraft.client.world.ClientWorld;
7 import net.minecraft.util.math.BlockPos;
8 import net.minecraft.util.math.ChunkPos;
9 import net.minecraft.util.registry.Registry;
10 import net.minecraft.world.biome.Biome;
11 import net.minecraft.world.biome.source.BiomeArray;
12 import net.minecraft.world.biome.source.BiomeCoords;
13 import net.minecraft.world.chunk.WorldChunk;
14
15 public class BiomeBorderHelper {
16
17     private static final Long2ObjectOpenHashMap<BiomeArray> biomeCache = new Long2ObjectOpenHashMap<>();
18
19     public static void onChunkLoaded(int chunkX, int chunkZ) {
20         assert MinecraftClient.getInstance().world != null;
21         final WorldChunk chunk = MinecraftClient.getInstance().world.getChunk(chunkX, chunkZ);
22         if (chunk == null) return;
23         biomeCache.put(ChunkPos.toLong(chunkX, chunkZ), chunk.getBiomeArray());
24     }
25
26     public static void onChunkUnload(int chunkX, int chunkZ) {
27         biomeCache.remove(ChunkPos.toLong(chunkX, chunkZ));
28     }
29
30     public static int getBiomeId(Coords coords) {
31         return getBiomeId(coords.getX(), coords.getY(), coords.getZ());
32     }
33
34     public static int getBiomeId(int x, int y, int z) {
35         BlockPos pos = new BlockPos(x, y, z);
36         final BiomeArray biomeArray = biomeCache.get(ChunkPos.toLong(pos));
37         final ClientWorld world = MinecraftClient.getInstance().world;
38         final Biome biome;
39         if (biomeArray != null) {
40             biome = biomeArray.getBiomeForNoiseGen(BiomeCoords.fromBlock(x & 15), y, BiomeCoords.fromBlock(z & 15));
41         } else {
42             assert world != null;
43             biome = world.getBiome(pos);
44         }
45         return world.getRegistryManager().get(Registry.BIOME_KEY).getRawId(biome);
46     }
47 }