diff --git a/anvil-loader/build.gradle b/anvil-loader/build.gradle index 790d415..2328060 100644 --- a/anvil-loader/build.gradle +++ b/anvil-loader/build.gradle @@ -4,4 +4,6 @@ version '1.0-SNAPSHOT' dependencies { /* Core */ compile_excludeCopy project(':core') + + compile (group: 'net.sf.trove4j', name: 'trove4j', version: '3.0.3') } \ No newline at end of file diff --git a/anvil-loader/src/main/java/mc/world/anvil/RegionFile.java b/anvil-loader/src/main/java/mc/world/anvil/RegionFile.java index e9e8198..a2bd8c7 100644 --- a/anvil-loader/src/main/java/mc/world/anvil/RegionFile.java +++ b/anvil-loader/src/main/java/mc/world/anvil/RegionFile.java @@ -2,6 +2,8 @@ package mc.world.anvil; import com.flowpowered.nbt.Tag; import com.flowpowered.nbt.stream.NBTInputStream; +import gnu.trove.list.TByteList; +import gnu.trove.list.array.TByteArrayList; import lombok.extern.slf4j.Slf4j; import mc.core.world.chunk.Chunk; @@ -13,19 +15,22 @@ import java.util.zip.InflaterInputStream; @Slf4j public class RegionFile implements Closeable { + private static final byte BYTE_TRUE = 1, + BYTE_FALSE = 0; + private RandomAccessFile file; - private List sectorFree; //TODO заменить на Trove TByteList + private TByteList sectorFree; private final int[] offsets = new int[1024]; public RegionFile(File file) throws IOException { this.file = new RandomAccessFile(file, "rw"); int sizeOfSectorFree = (int)this.file.length() / 4096; - sectorFree = new ArrayList<>(sizeOfSectorFree); - sectorFree.add(false); - sectorFree.add(false); + sectorFree = new TByteArrayList(sizeOfSectorFree); + sectorFree.add(BYTE_FALSE); + sectorFree.add(BYTE_FALSE); for (int i = 0; i < sizeOfSectorFree-2; i++) { - sectorFree.add(true); + sectorFree.add(BYTE_TRUE); } for (int i = 0; i < offsets.length; ++i) { @@ -34,7 +39,7 @@ public class RegionFile implements Closeable { if (read != 0 && (read >> 8) + (read & 255) <= this.sectorFree.size()) { for (int j = 0; j < (read & 255); ++j) { - this.sectorFree.set((read >> 8) + j, false); + this.sectorFree.set((read >> 8) + j, BYTE_FALSE); } } }