Skip to content

Commit 7cb7c72

Browse files
committed
Refactor ChunkMetadataTable into ChunkMetadata
1 parent 8a4c73f commit 7cb7c72

5 files changed

Lines changed: 33 additions & 60 deletions

File tree

src/main/java/org/glavo/nbt/chunk/ChunkRegion.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.glavo.nbt.NBTElement;
2020
import org.glavo.nbt.NBTParent;
2121
import org.glavo.nbt.internal.ChunkMetadata;
22-
import org.glavo.nbt.internal.ChunkMetadataTable;
2322
import org.glavo.nbt.internal.ChunkUtils;
2423
import org.glavo.nbt.internal.input.DataReader;
2524
import org.glavo.nbt.internal.input.RawDataReader;
@@ -29,7 +28,6 @@
2928
import org.glavo.nbt.tag.Tag;
3029

3130
import java.io.IOException;
32-
import java.util.List;
3331
import java.util.Objects;
3432

3533
/// @see <a href="https://minecraft.wiki/w/Region_file_format">Region file format - Minecraft Wiki</a>
@@ -57,14 +55,10 @@ static ChunkRegion readRegion(RawDataReader rawReader) throws IOException {
5755
}
5856
}
5957

60-
var table = new ChunkMetadataTable(List.of(metadata));
61-
62-
List<ChunkMetadata> sortedBySectorOffset = table.getSortedBySectorOffset();
63-
6458
var region = new ChunkRegion();
6559

6660
long contentStart = rawReader.position();
67-
for (ChunkMetadata chunkMetadata : sortedBySectorOffset) {
61+
for (ChunkMetadata chunkMetadata : ChunkMetadata.sortedByOffset(metadata)) {
6862
long sectorStart = contentStart + (long) chunkMetadata.sectorOffset() * ChunkUtils.SECTOR_BYTES;
6963
long position = rawReader.position();
7064
if (position != sectorStart) {

src/main/java/org/glavo/nbt/internal/ChunkMetadata.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,16 @@
1515
*/
1616
package org.glavo.nbt.internal;
1717

18+
import java.util.Comparator;
19+
1820
public record ChunkMetadata(int localIndex, int sectorOffset, int sectorLength, int timestamp) {
21+
private static final Comparator<ChunkMetadata> BY_OFFSET = Comparator.comparingInt(ChunkMetadata::sectorOffset).thenComparingInt(ChunkMetadata::localIndex);
22+
23+
public static ChunkMetadata[] sortedByOffset(ChunkMetadata[] metadata) {
24+
ChunkMetadata[] copy = metadata.clone();
25+
java.util.Arrays.sort(copy, BY_OFFSET);
26+
return copy;
27+
}
1928

2029
public ChunkMetadata {
2130
assert localIndex >= 0 && localIndex < ChunkUtils.CHUNKS_PRE_REGION : "Invalid local index: " + localIndex;

src/main/java/org/glavo/nbt/internal/ChunkMetadataTable.java

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright 2026 Glavo
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.glavo.nbt.internal.input;
17+
18+
public final class NBTInput {
19+
private NBTInput() {
20+
}
21+
}

src/main/java/org/glavo/nbt/tag/Tag.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.glavo.nbt.internal.input.RawDataReader;
2323
import org.glavo.nbt.internal.input.InputSource;
2424
import org.glavo.nbt.internal.output.NBTWriter;
25+
import org.jetbrains.annotations.ApiStatus;
2526
import org.jetbrains.annotations.Contract;
2627
import org.jetbrains.annotations.Nullable;
2728

@@ -35,6 +36,7 @@
3536
public sealed abstract class Tag implements NBTElement
3637
permits ValueTag, ArrayTag, ParentTag {
3738

39+
@ApiStatus.Internal
3840
public static @Nullable Tag readTag(DataReader reader) throws IOException {
3941
byte tagByte = reader.readByte();
4042
if (tagByte == 0) {

0 commit comments

Comments
 (0)