From 8384b9f88b38a491ab3880f8d93210744f332bda Mon Sep 17 00:00:00 2001 From: mcrcortex <18544518+MCRcortex@users.noreply.github.com> Date: Tue, 2 Sep 2025 11:19:11 +1000 Subject: [PATCH] Report invalid block bake errors and dont crash (will probably cause an insane amount of spam) --- .../voxy/client/core/model/ModelBakerySubsystem.java | 9 ++++++++- .../java/me/cortex/voxy/common/world/other/Mapper.java | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/cortex/voxy/client/core/model/ModelBakerySubsystem.java b/src/main/java/me/cortex/voxy/client/core/model/ModelBakerySubsystem.java index 67e7dac9..261520f7 100644 --- a/src/main/java/me/cortex/voxy/client/core/model/ModelBakerySubsystem.java +++ b/src/main/java/me/cortex/voxy/client/core/model/ModelBakerySubsystem.java @@ -2,6 +2,7 @@ package me.cortex.voxy.client.core.model; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import me.cortex.voxy.common.Logger; import me.cortex.voxy.common.world.other.Mapper; import net.minecraft.client.MinecraftClient; import net.minecraft.registry.RegistryKeys; @@ -23,11 +24,13 @@ public class ModelBakerySubsystem { private final ModelStore storage = new ModelStore(); public final ModelFactory factory; + private final Mapper mapper; private final AtomicInteger blockIdCount = new AtomicInteger(); private final ConcurrentLinkedDeque blockIdQueue = new ConcurrentLinkedDeque<>();//TODO: replace with custom DS private final ConcurrentLinkedDeque biomeQueue = new ConcurrentLinkedDeque<>(); public ModelBakerySubsystem(Mapper mapper) { + this.mapper = mapper; this.factory = new ModelFactory(mapper, this.storage); } @@ -102,8 +105,12 @@ public class ModelBakerySubsystem { //This is on this side only and done like this as only worker threads call this code private final ReentrantLock seenIdsLock = new ReentrantLock(); - private final IntOpenHashSet seenIds = new IntOpenHashSet(6000); + private final IntOpenHashSet seenIds = new IntOpenHashSet(6000);//TODO: move to a lock free concurrent hashmap public void requestBlockBake(int blockId) { + if (this.mapper.getBlockStateCount() < blockId) { + Logger.error("Error, got bakeing request for out of range state id. StateId: " + blockId + " max id: " + this.mapper.getBlockStateCount(), new Exception()); + return; + } this.seenIdsLock.lock(); if (!this.seenIds.add(blockId)) { this.seenIdsLock.unlock(); diff --git a/src/main/java/me/cortex/voxy/common/world/other/Mapper.java b/src/main/java/me/cortex/voxy/common/world/other/Mapper.java index 122235b1..113554d6 100644 --- a/src/main/java/me/cortex/voxy/common/world/other/Mapper.java +++ b/src/main/java/me/cortex/voxy/common/world/other/Mapper.java @@ -158,6 +158,10 @@ public class Mapper { } + public final int getBlockStateCount() { + return this.blockId2stateEntry.size(); + } + private StateEntry registerNewBlockState(BlockState state) { this.blockLock.lock(); var entry = this.block2stateEntry.get(state);