diff --git a/pom.xml b/pom.xml index 674d4eb..7a006d7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,18 +3,16 @@ 4.0.0 com.wimbli.WorldBorder WorldBorder - 2.0.5 + 2.0.6 WorldBorder https://github.com/PryPurity/WorldBorder GitHub https://github.com/PryPurity/WorldBorder/issues - UTF-8 - spigot-repo @@ -51,6 +49,12 @@ 1.0.4 compile + + com.destroystokyo.paper + paper-api + 1.16.1-R0.1-SNAPSHOT + provided + diff --git a/src/main/java/com/wimbli/WorldBorder/WorldFileData.java b/src/main/java/com/wimbli/WorldBorder/WorldFileData.java index cb8319a..cdff555 100644 --- a/src/main/java/com/wimbli/WorldBorder/WorldFileData.java +++ b/src/main/java/com/wimbli/WorldBorder/WorldFileData.java @@ -6,9 +6,9 @@ import org.bukkit.entity.Player; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; -import java.io.File; -import java.io.FileFilter; -import java.io.IOException; +import java.io.*; +import java.nio.ByteBuffer; +import java.nio.IntBuffer; import java.util.List; import java.util.*; @@ -155,46 +155,46 @@ public class WorldFileData { data.add(Boolean.FALSE); } - //for (int i = 0; i < regionFiles.length; i++) { - // CoordXZ coord = regionFileCoordinates(i); - // // is this region file the one we're looking for? - // if (!coord.equals(region)) - // continue; + for (int i = 0; i < regionFiles.length; i++) { + CoordXZ coord = regionFileCoordinates(i); + // is this region file the one we're looking for? + if (!coord.equals(region)) + continue; // - // try { - // RandomAccessFile regionData = new RandomAccessFile(this.regionFile(i), "r"); + try { + RandomAccessFile regionData = new RandomAccessFile(this.regionFile(i), "r"); // - // // Use of ByteBuffer+IntBuffer for reading file headers to improve performance, as suggested by aikar, reference: - // // https://github.com/PaperMC/Paper/blob/b62dfa0bf95ac27ba0fbb3fae18c064e4bb61d50/Spigot-Server-Patches/0086-Reduce-IO-ops-opening-a-new-region-file.patch - // ByteBuffer header = ByteBuffer.allocate(8192); - // while (header.hasRemaining()) { - // if (regionData.getChannel().read(header) == -1) - // throw new EOFException(); - // } - // header.clear(); - // IntBuffer headerAsInts = header.asIntBuffer(); + // Use of ByteBuffer+IntBuffer for reading file headers to improve performance, as suggested by aikar, reference: + // https://github.com/PaperMC/Paper/blob/b62dfa0bf95ac27ba0fbb3fae18c064e4bb61d50/Spigot-Server-Patches/0086-Reduce-IO-ops-opening-a-new-region-file.patch + ByteBuffer header = ByteBuffer.allocate(8192); + while (header.hasRemaining()) { + if (regionData.getChannel().read(header) == -1) + throw new EOFException(); + } + header.clear(); + IntBuffer headerAsInts = header.asIntBuffer(); // - // // first 4096 bytes of region file consists of 4-byte int pointers to chunk data in the file (32*32 chunks = 1024; 1024 chunks * 4 bytes each = 4096) - // for (int j = 0; j < 1024; j++) { - // // if chunk pointer data is 0, chunk doesn't exist yet; otherwise, it does - // if (headerAsInts.get() != 0) - // data.set(j, true); - // } - // // Read timestamps - // for (int j = 0; j < 1024; j++) { - // // if timestamp is zero, it is protochunk (ignore it) - // if ((headerAsInts.get() == 0) && data.get(j)) - // data.set(j, false); - // } - // regionData.close(); - // } catch (FileNotFoundException ex) { - // sendMessage("Error! Could not open region file to find generated chunks: " + this.regionFile(i).getName()); - // } catch (IOException ex) { - // sendMessage("Error! Could not read region file to find generated chunks: " + this.regionFile(i).getName()); - // } - //} + // first 4096 bytes of region file consists of 4-byte int pointers to chunk data in the file (32*32 chunks = 1024; 1024 chunks * 4 bytes each = 4096) + for (int j = 0; j < 1024; j++) { + // if chunk pointer data is 0, chunk doesn't exist yet; otherwise, it does + if (headerAsInts.get() != 0) + data.set(j, true); + } + // Read timestamps + for (int j = 0; j < 1024; j++) { + // if timestamp is zero, it is protochunk (ignore it) + if ((headerAsInts.get() == 0) && data.get(j)) + data.set(j, false); + } + regionData.close(); + } catch (FileNotFoundException ex) { + sendMessage("Error! Could not open region file to find generated chunks: " + this.regionFile(i).getName()); + } catch (IOException ex) { + sendMessage("Error! Could not read region file to find generated chunks: " + this.regionFile(i).getName()); + } + } regionChunkExistence.put(region, data); -// testImage(region, data); + testImage(region, data); return data; } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 9f1d42a..6721470 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: WorldBorder authors: [Brettflan, PryPurity] description: Efficient, feature-rich plugin for limiting the size of your worlds. -version: 2.0.5 +version: 2.0.6 api-version: 1.13 main: com.wimbli.WorldBorder.WorldBorder softdepend: