mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-01 17:01:56 +01:00
72d0717d5d
A recent commit has been made that caused patches to be out of order, rebuilding
39 lines
No EOL
1.8 KiB
Diff
39 lines
No EOL
1.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Sat, 11 Aug 2018 00:49:20 -0400
|
|
Subject: [PATCH] Detect and repair corrupt Region Files
|
|
|
|
If the file has partial data written but not the full 8192 bytes,
|
|
then the server will be unable to load that region file...
|
|
|
|
I don't know why mojang only checks for 4096, when anything less than 8192 is a crash.
|
|
|
|
But to be safe, it will attempt to back up the file.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java
|
|
index cba237312..070392233 100644
|
|
--- a/src/main/java/net/minecraft/server/RegionFile.java
|
|
+++ b/src/main/java/net/minecraft/server/RegionFile.java
|
|
@@ -0,0 +0,0 @@ public class RegionFile {
|
|
}
|
|
|
|
this.c = new RandomAccessFile(file, "rw");
|
|
- if (this.c.length() < 4096L) {
|
|
+ // Paper start - detect and fix incomplete headers
|
|
+ long length = this.c.length();
|
|
+ if (length < 8192 && length > 0) {
|
|
+ File corrupt = new File(file.getParentFile(), file.getName() + ".bak");
|
|
+ org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger();
|
|
+ logger.error("Region file " + file + " was incomplete. Backing up to " + corrupt + " and repairing");
|
|
+ try {
|
|
+ java.nio.file.Files.copy(file.toPath(), corrupt.toPath());
|
|
+ } catch (IOException e) {
|
|
+ logger.error("Error backing up corrupt file", e);
|
|
+ }
|
|
+ }
|
|
+ if (length < 8192L) {
|
|
+ // Paper end
|
|
this.c.write(RegionFile.a);
|
|
this.c.write(RegionFile.a);
|
|
this.g += 8192;
|
|
--
|