File tree Expand file tree Collapse file tree 4 files changed +37
-1
lines changed
c2me-rewrites-chunk-serializer/src/main/java/com/ishland/c2me/rewrites/chunk_serializer Expand file tree Collapse file tree 4 files changed +37
-1
lines changed Original file line number Diff line number Diff line change 44import com .ishland .c2me .base .common .registry .SerializerAccess ;
55import com .ishland .c2me .rewrites .chunk_serializer .common .ChunkDataSerializer ;
66import com .ishland .c2me .rewrites .chunk_serializer .common .NbtWriter ;
7+ import com .ishland .c2me .rewrites .chunk_serializer .common .utils .ValidationUtils ;
78import net .minecraft .nbt .NbtElement ;
89
910public class TheMod implements net .fabricmc .api .ModInitializer {
@@ -17,6 +18,7 @@ public void onInitialize() {
1718 nbtWriter .finishCompound ();
1819 final byte [] data = nbtWriter .toByteArray ();
1920 nbtWriter .release ();
21+ ValidationUtils .validateNbt (data );
2022 return Either .right (data );
2123 });
2224 }
Original file line number Diff line number Diff line change 1+ package com .ishland .c2me .rewrites .chunk_serializer .common .utils ;
2+
3+ import net .minecraft .nbt .NbtCompound ;
4+ import net .minecraft .nbt .NbtIo ;
5+
6+ import java .io .ByteArrayInputStream ;
7+ import java .io .DataInputStream ;
8+
9+ public class ValidationUtils {
10+
11+ private static final boolean VALIDATION_ENABLED = Boolean .getBoolean ("c2me.gcFreeChunkSerializer.validateNbt" );
12+
13+ static {
14+ if (VALIDATION_ENABLED ) {
15+ System .out .println ("NBT validation for gcFreeChunkSerializer is enabled. This *will* impact performance." );
16+ }
17+ }
18+
19+ public static void validateNbt (byte [] bytes ) {
20+ if (!VALIDATION_ENABLED ) {
21+ return ;
22+ }
23+ try (final var in = new DataInputStream (new ByteArrayInputStream (bytes ))) {
24+ NbtCompound read = NbtIo .readCompound (in );
25+ } catch (Throwable e ) {
26+ throw new RuntimeException (e );
27+ }
28+ }
29+
30+ }
Original file line number Diff line number Diff line change 66import com .ishland .c2me .base .mixin .access .IVersionedChunkStorage ;
77import com .ishland .c2me .rewrites .chunk_serializer .common .ChunkDataSerializer ;
88import com .ishland .c2me .rewrites .chunk_serializer .common .NbtWriter ;
9+ import com .ishland .c2me .rewrites .chunk_serializer .common .utils .ValidationUtils ;
910import com .mojang .datafixers .DataFixer ;
1011import net .minecraft .nbt .NbtElement ;
1112import net .minecraft .server .world .ChunkHolder ;
@@ -100,7 +101,9 @@ private boolean save(Chunk chunk) {
100101 nbtWriter .start (NbtElement .COMPOUND_TYPE );
101102 ChunkDataSerializer .write (chunkSerializer , nbtWriter );
102103 nbtWriter .finishCompound ();
103- return nbtWriter .toByteArray ();
104+ byte [] byteArray = nbtWriter .toByteArray ();
105+ ValidationUtils .validateNbt (byteArray );
106+ return byteArray ;
104107 } finally {
105108 nbtWriter .release ();
106109 }
Original file line number Diff line number Diff line change 1313 " -Dc2me.base.config.override.ioSystem.gcFreeChunkSerializer=true" ,
1414 " -Dc2me.base.config.override.vanillaWorldGenOptimizations.useDensityFunctionCompiler=true" ,
1515 " -Dc2me.base.config.override.vanillaWorldGenOptimizations.nativeAcceleration.enabled=true" ,
16+ " -Dc2me.gcFreeChunkSerializer.validateNbt=true" ,
1617 " -Dcom.ishland.c2me.mixin.doAudit=true"
1718 if (System . getenv(" GITHUB_WORKFLOW" ) != null ) {
1819 if (System . getenv(" RUNNER_OS" ). equals(" macOS" )) {
You can’t perform that action at this time.
0 commit comments