1 package com.irtimaled.bbor.client.interop;
3 import com.irtimaled.bbor.common.models.Coords;
4 import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap;
5 import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
6 import net.minecraft.client.MinecraftClient;
7 import net.minecraft.client.world.ClientWorld;
8 import net.minecraft.util.math.BlockPos;
9 import net.minecraft.util.math.ChunkPos;
10 import net.minecraft.util.registry.Registry;
12 public class BiomeBorderHelper {
14 private static final Long2ObjectOpenHashMap<Long2IntOpenHashMap> biomeCache = new Long2ObjectOpenHashMap<>();
16 public static void onChunkLoaded(int chunkX, int chunkZ) {
20 public static void onChunkUnload(int chunkX, int chunkZ) {
21 biomeCache.remove(ChunkPos.toLong(chunkX, chunkZ));
24 public static void onDisconnect() {
28 public static int getBiomeId(Coords coords) {
29 return getBiomeId(coords.getX(), coords.getY(), coords.getZ());
32 public static int getBiomeId(int x, int y, int z) {
33 BlockPos pos = new BlockPos(x, y, z);
34 final Long2IntOpenHashMap biomeArray = biomeCache.computeIfAbsent(ChunkPos.toLong(pos), key -> createNewMap());
35 final ClientWorld world = MinecraftClient.getInstance().world;
36 return biomeArray.computeIfAbsent(pos.asLong(), key -> {
38 return world.getRegistryManager().get(Registry.BIOME_KEY).getRawId(world.getBiome(pos).value());
42 private static Long2IntOpenHashMap createNewMap() {
43 final Long2IntOpenHashMap long2IntOpenHashMap = new Long2IntOpenHashMap();
44 long2IntOpenHashMap.defaultReturnValue(-1);
45 return long2IntOpenHashMap;