aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0510-MC-183249-Don-t-generate-Carving-Masks-BitSet-unless.patch
blob: 613fea34fe75b7bf0cc32fd599d2b1eea721d353 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 9 May 2020 12:11:47 -0400
Subject: [PATCH] MC-183249: Don't generate Carving Masks BitSet unless needed

This was using SIGNIFICANT amounts of memory allocating many
long[]'s for BitSets for every ProtoChunk in the cache that had
been unloaded and reloaded.

This will result in a nice memory reduction.

diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
index fa893b14bcef9bab6891dea2c4375b09d74ac038..e625842e524f18e469f7695b27d52d4d04892266 100644
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
@@ -472,7 +472,12 @@ public class ChunkRegionLoader {
             for (int l = 0; l < k; ++l) {
                 WorldGenStage.Features worldgenstage_features = aworldgenstage_features[l];
 
-                nbttagcompound3.setByteArray(worldgenstage_features.toString(), ichunkaccess.a(worldgenstage_features).toByteArray());
+                // Paper start - don't create carving mask bitsets if not even at that chunk status yet
+                BitSet mask = protochunk.getCarvingMaskIfSet(worldgenstage_features);
+                if (mask != null) {
+                    nbttagcompound3.setByteArray(worldgenstage_features.toString(), mask.toByteArray());
+                }
+                // Paper end
             }
 
             nbttagcompound1.set("CarvingMasks", nbttagcompound3);
diff --git a/src/main/java/net/minecraft/server/ProtoChunk.java b/src/main/java/net/minecraft/server/ProtoChunk.java
index a78b240621e0407fff67b018224c39fc4f97f4e5..2eb14bbf888f5e5601441743cb7642da6ee1249c 100644
--- a/src/main/java/net/minecraft/server/ProtoChunk.java
+++ b/src/main/java/net/minecraft/server/ProtoChunk.java
@@ -43,7 +43,8 @@ public class ProtoChunk implements IChunkAccess {
     private final ProtoChunkTickList<Block> q;
     private final ProtoChunkTickList<FluidType> r;
     private long s;
-    private final Map<WorldGenStage.Features, BitSet> t;
+    private final Map<WorldGenStage.Features, BitSet> t;public BitSet getCarvingMaskIfSet(WorldGenStage.Features worldgenstage_features) { return this.t.get(worldgenstage_features); } // Paper
+    // Paper end
     private volatile boolean u;
     private final World world; // Paper - Anti-Xray - Add world