Fix wrong block exception: AIR but with different id?

This commit is contained in:
Bixilon 2020-12-08 18:28:49 +01:00
parent 8b80ea6402
commit 93c6579cc9
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 21 additions and 12 deletions

View File

@ -13,9 +13,12 @@
package de.bixilon.minosoft.data.world.palette;
import de.bixilon.minosoft.config.StaticConfiguration;
import de.bixilon.minosoft.data.mappings.blocks.Block;
import de.bixilon.minosoft.data.mappings.versions.VersionMapping;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.protocol.InByteBuffer;
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import java.util.HashMap;
@ -31,7 +34,24 @@ public class IndirectPalette implements Palette {
@Override
public Block byId(int id) {
return mapping.getBlockById(map.getOrDefault(id, id));
int blockId = map.getOrDefault(id, id);
Block block = mapping.getBlockById(blockId);
if (StaticConfiguration.DEBUG_MODE) {
if (block == null) {
if (blockId == ProtocolDefinition.NULL_BLOCK_ID) {
return null;
}
String blockName;
if (versionId <= ProtocolDefinition.PRE_FLATTENING_VERSION_ID) {
blockName = String.format("%d:%d", blockId >> 4, blockId & 0xF);
} else {
blockName = String.valueOf(blockId);
}
Log.warn(String.format("Server sent unknown block: %s", blockName));
return null;
}
}
return block;
}
@Override

View File

@ -18,7 +18,6 @@ import de.bixilon.minosoft.data.world.Chunk;
import de.bixilon.minosoft.data.world.ChunkSection;
import de.bixilon.minosoft.data.world.InChunkSectionLocation;
import de.bixilon.minosoft.data.world.palette.Palette;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.protocol.InByteBuffer;
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
@ -177,16 +176,6 @@ public final class ChunkUtil {
Block block = palette.byId(blockId);
if (block == null) {
if (blockId == ProtocolDefinition.NULL_BLOCK_ID) {
continue;
}
String blockName;
if (buffer.getVersionId() <= ProtocolDefinition.FLATTING_VERSION_ID) {
blockName = String.format("%d:%d", blockId >> 4, blockId & 0xF);
} else {
blockName = String.valueOf(blockId);
}
Log.warn(String.format("Server sent unknown block: %s", blockName));
continue;
}
blockMap.put(new InChunkSectionLocation(nibbleX, nibbleY, nibbleZ), block);