Skip to content

Commit 2ec04e0

Browse files
committed
Use correct headerLocation for regionfile initialisation
If the regionfile cannot be recalculated (i.e entity/poi type), then attempts to remove the invalid entry would blow up
1 parent 2121aed commit 2ec04e0

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

patches/server/0751-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ index c8298a597818227de33a4afce4698ec0666cf758..6baceb6ce9021c489be6e79d338a9704
8787
this.used.set(start, start + size);
8888
}
8989
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java
90-
index 293cce2c80fbdc18480977f5f6b24d6b4fa8dcf3..834fa7048e3affb4fcc734d56526b9fba5fa69ca 100644
90+
index 293cce2c80fbdc18480977f5f6b24d6b4fa8dcf3..950efcc80455f73ec8ca4e991fcf9a5b2b7fa22e 100644
9191
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java
9292
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java
9393
@@ -52,6 +52,355 @@ public class RegionFile implements AutoCloseable {
@@ -160,7 +160,7 @@ index 293cce2c80fbdc18480977f5f6b24d6b4fa8dcf3..834fa7048e3affb4fcc734d56526b9fb
160160
+ try {
161161
+ this.file.force(true);
162162
+ LOGGER.warn("Backing up regionfile \"" + this.regionFile.toAbsolutePath() + "\" to " + to.toAbsolutePath());
163-
+ java.nio.file.Files.copy(this.regionFile, to);
163+
+ java.nio.file.Files.copy(this.regionFile, to, java.nio.file.StandardCopyOption.COPY_ATTRIBUTES);
164164
+ LOGGER.warn("Backed up the regionfile to " + to.toAbsolutePath());
165165
+ } catch (IOException ex) {
166166
+ LOGGER.error("Failed to backup to " + to.toAbsolutePath(), ex);
@@ -473,11 +473,12 @@ index 293cce2c80fbdc18480977f5f6b24d6b4fa8dcf3..834fa7048e3affb4fcc734d56526b9fb
473473
- long j = Files.size(file);
474474
+ final long j = Files.size(file); final long regionFileSize = j; // Paper - recalculate header on header corruption
475475

476+
- for (int k = 0; k < 1024; ++k) {
477+
- int l = this.offsets.get(k);
476478
+ boolean needsHeaderRecalc = false; // Paper - recalculate header on header corruption
477479
+ boolean hasBackedUp = false; // Paper - recalculate header on header corruption
478-
for (int k = 0; k < 1024; ++k) {
479-
- int l = this.offsets.get(k);
480-
+ final int l = this.offsets.get(k); final int headerLocation = l; // Paper - we expect this to be the header location
480+
+ for (int k = 0; k < 1024; ++k) { final int headerLocation = k; // Paper - we expect this to be the header location
481+
+ final int l = this.offsets.get(k);
481482

482483
if (l != 0) {
483484
- int i1 = RegionFile.getSectorNumber(l);
@@ -684,7 +685,7 @@ index 293cce2c80fbdc18480977f5f6b24d6b4fa8dcf3..834fa7048e3affb4fcc734d56526b9fb
684685
return bytebuffer;
685686
}
686687
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
687-
index 7b4f3c30cfc4bf68cc872598726f7f7eab5f9830..2dde10324e515bd58fc6ba7e93156ae783492cc2 100644
688+
index 089e8414c7bdc102ba0d914af576df1a05af7519..9f6c1de59ca011bd1203499f325fdfa305e215ce 100644
688689
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
689690
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
690691
@@ -26,7 +26,15 @@ public class RegionFileStorage implements AutoCloseable {

0 commit comments

Comments
 (0)