Handle pre-1.16 chunks in forge 1.16+

This commit is contained in:
Mike Primm 2020-08-15 19:29:29 -05:00
parent decc95d35e
commit eadb82b680
2 changed files with 67 additions and 4 deletions

View file

@ -4,6 +4,7 @@ import java.util.Arrays;
import org.dynmap.Log;
import org.dynmap.renderer.DynmapBlockState;
import org.dynmap.utils.DataBitsPacked;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
@ -178,16 +179,25 @@ public class ChunkSnapshot
palette[pi] = DynmapBlockState.AIR;
}
}
int bitsperblock = (statelist.length * 64) / 4096;
BitArray db = new BitArray(bitsperblock, 4096, statelist);
int recsperblock = (4096 + statelist.length - 1) / statelist.length;
int bitsperblock = 64 / recsperblock;
BitArray db = null;
DataBitsPacked dbp = null;
try {
db = new BitArray(bitsperblock, 4096, statelist);
} catch (Exception x) { // Handle legacy encoded
bitsperblock = (statelist.length * 64) / 4096;
dbp = new DataBitsPacked(bitsperblock, 4096, statelist);
}
if (bitsperblock > 8) { // Not palette
for (int j = 0; j < 4096; j++) {
states[j] = DynmapBlockState.getStateByGlobalIndex(db.getAt(j));
int v = (dbp != null) ? dbp.getAt(j) : db.getAt(j);
states[j] = DynmapBlockState.getStateByGlobalIndex(v);
}
}
else {
for (int j = 0; j < 4096; j++) {
int v = db.getAt(j);
int v = (dbp != null) ? dbp.getAt(j) : db.getAt(j);
states[j] = (v < palette.length) ? palette[v] : DynmapBlockState.AIR;
}
}