Skip to content

Commit 1aa7055

Browse files
committed
Fix infinite loop when processing packets
If the packet processor becomes closed during processing, we would spin as hasPackets() would be true (if there were packets queued) but executing packets would fail as it is closed.
1 parent 3cf908f commit 1aa7055

File tree

2 files changed

+33
-37
lines changed

2 files changed

+33
-37
lines changed

folia-server/minecraft-patches/features/0001-Region-Threading-Base.patch

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8074,7 +8074,7 @@ index 42d2f82b24ae48471bfc091667f8e84c5b0d62a8..ab80a66646a7ebe2862221ac342b06c1
80748074
}
80758075
}
80768076
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
8077-
index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503dbf2b984f 100644
8077+
index 4dd4cd13d8650b60332cff9c2677ec217affc60d..7a6dab62a76b70183441c44b654109fb759e2e72 100644
80788078
--- a/net/minecraft/server/MinecraftServer.java
80798079
+++ b/net/minecraft/server/MinecraftServer.java
80808080
@@ -196,7 +196,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -8469,7 +8469,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
84698469
if (this.playerList.getPlayerCount() == 0 && !this.tickRateManager.isSprinting() && this.pluginsBlockingSleep.isEmpty()) { // Paper - API to allow/disallow tick sleeping
84708470
this.emptyTicks++;
84718471
} else {
8472-
@@ -1599,24 +1688,53 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8472+
@@ -1599,24 +1688,51 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
84738473
level.getChunkSource().tick(() -> true, false);
84748474
}
84758475
// Paper end - avoid issues with certain tasks not processing during sleep
@@ -8501,9 +8501,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
85018501
+ // run all player packets
85028502
+ for (ServerPlayer player : new java.util.ArrayList<>(region.world.getCurrentWorldData().getLocalPlayers())) {
85038503
+ PacketProcessor packetProcessor = ((org.bukkit.craftbukkit.entity.CraftPlayer)player.getBukkitEntity()).packetProcessor;
8504-
+ while (packetProcessor.hasPackets() && ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(player)) {
8505-
+ packetProcessor.executeSinglePacket();
8506-
+ }
8504+
+ while (ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(player) && packetProcessor.executeSinglePacket());
85078505
+ }
85088506
+ ((io.papermc.paper.threadedregions.scheduler.FoliaRegionScheduler)org.bukkit.Bukkit.getRegionScheduler()).tick();
85098507
+ // now run all the entity schedulers
@@ -8530,7 +8528,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
85308528
// Paper start - Incremental chunk and player saving
85318529
final ProfilerFiller profiler = Profiler.get();
85328530
int playerSaveInterval = io.papermc.paper.configuration.GlobalConfiguration.get().playerAutoSave.rate;
8533-
@@ -1624,15 +1742,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8531+
@@ -1624,15 +1740,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
85348532
playerSaveInterval = autosavePeriod;
85358533
}
85368534
profiler.push("save");
@@ -8549,7 +8547,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
85498547
}
85508548
}
85518549
} finally {
8552-
@@ -1642,22 +1760,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8550+
@@ -1642,22 +1758,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
85538551
// Paper end - Incremental chunk and player saving
85548552

85558553
ProfilerFiller profilerFiller = Profiler.get();
@@ -8577,7 +8575,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
85778575
}
85788576

85798577
protected void processPacketsAndTick(boolean sprinting) {
8580-
@@ -1666,7 +1776,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8578+
@@ -1666,7 +1774,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
85818579
this.tickFrame.start();
85828580
// Paper - improve tick loop - moved into runAllTasksAtTickStart
85838581
this.runAllTasksAtTickStart(); // Paper - improve tick loop
@@ -8586,7 +8584,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
85868584
// Paper start - rewrite chunk system
85878585
final Throwable crash = this.chunkSystemCrash;
85888586
if (crash != null) {
8589-
@@ -1680,7 +1790,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8587+
@@ -1680,7 +1788,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
85908588
}
85918589

85928590
private void autoSave() {
@@ -8595,7 +8593,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
85958593
LOGGER.debug("Autosave started");
85968594
ProfilerFiller profilerFiller = Profiler.get();
85978595
profilerFiller.push("save");
8598-
@@ -1695,30 +1805,22 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8596+
@@ -1695,30 +1803,22 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
85998597
}
86008598
}
86018599

@@ -8634,7 +8632,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
86348632
private ServerStatus buildServerStatus() {
86358633
ServerStatus.Players players = this.buildPlayerStatus();
86368634
return new ServerStatus(
8637-
@@ -1731,7 +1833,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8635+
@@ -1731,7 +1831,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
86388636
}
86398637

86408638
private ServerStatus.Players buildPlayerStatus() {
@@ -8643,7 +8641,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
86438641
int maxPlayers = this.getMaxPlayers();
86448642
if (this.hidesOnlinePlayers()) {
86458643
return new ServerStatus.Players(maxPlayers, players.size(), List.of());
8646-
@@ -1750,44 +1852,36 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8644+
@@ -1750,44 +1850,36 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
86478645
}
86488646
}
86498647

@@ -8701,7 +8699,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
87018699
continue;
87028700
}
87038701
ServerPlayer entityplayer = (ServerPlayer) entityhuman;
8704-
@@ -1800,12 +1894,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8702+
@@ -1800,12 +1892,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
87058703
}
87068704
}
87078705

@@ -8717,7 +8715,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
87178715
profilerFiller.push(() -> serverLevel + " " + serverLevel.dimension().identifier());
87188716
/* Drop global time updates
87198717
if (this.tickCount % 20 == 0) {
8720-
@@ -1818,7 +1909,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8718+
@@ -1818,7 +1907,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
87218719
profilerFiller.push("tick");
87228720

87238721
try {
@@ -8726,7 +8724,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
87268724
} catch (Throwable var7) {
87278725
CrashReport crashReport = CrashReport.forThrowable(var7, "Exception ticking world");
87288726
serverLevel.fillReportDetails(crashReport);
8729-
@@ -1827,14 +1918,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8727+
@@ -1827,14 +1916,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
87308728

87318729
profilerFiller.pop();
87328730
profilerFiller.pop();
@@ -8745,7 +8743,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
87458743
profilerFiller.popPush("debugSubscribers");
87468744
this.debugSubscribers.tick();
87478745
if (this.tickRateManager.runsNormally()) {
8748-
@@ -1844,13 +1935,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8746+
@@ -1844,13 +1933,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
87498747

87508748
profilerFiller.popPush("server gui refresh");
87518749

@@ -8761,7 +8759,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
87618759
serverPlayer.connection.chunkSender.sendNextChunks(serverPlayer);
87628760
serverPlayer.connection.resumeFlushing();
87638761
}
8764-
@@ -2150,11 +2241,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8762+
@@ -2150,11 +2239,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
87658763
int i = 0;
87668764

87678765
for (ServerPlayer serverPlayer : this.getPlayerList().getPlayers()) {
@@ -8777,7 +8775,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
87778775
i++;
87788776
// Paper end - Expand PlayerGameModeChangeEvent
87798777
}
8780-
@@ -2176,7 +2269,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8778+
@@ -2176,7 +2267,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
87818779
}
87828780

87838781
public int getTickCount() {
@@ -8786,7 +8784,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
87868784
}
87878785

87888786
public boolean isUnderSpawnProtection(ServerLevel level, BlockPos pos, Player player) {
8789-
@@ -2212,6 +2305,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8787+
@@ -2212,6 +2303,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
87908788
}
87918789

87928790
public void invalidateStatus() {
@@ -8802,15 +8800,15 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
88028800
this.lastServerStatus = 0L;
88038801
}
88048802

8805-
@@ -2226,6 +2328,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8803+
@@ -2226,6 +2326,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
88068804

88078805
@Override
88088806
public void executeIfPossible(Runnable task) {
88098807
+ if (true) throw new UnsupportedOperationException(); // Folia - region threading
88108808
if (this.isStopped()) {
88118809
throw new io.papermc.paper.util.ServerStopRejectedExecutionException("Server already shutting down"); // Paper - do not prematurely disconnect players on stop
88128810
} else {
8813-
@@ -2568,7 +2671,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8811+
@@ -2568,7 +2669,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
88148812
}
88158813

88168814
public long getAverageTickTimeNanos() {
@@ -8824,7 +8822,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
88248822
}
88258823

88268824
public long[] getTickTimesNanos() {
8827-
@@ -2812,13 +2920,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8825+
@@ -2812,13 +2918,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
88288826
}
88298827

88308828
public ProfileResults stopTimeProfiler() {
@@ -8839,7 +8837,7 @@ index 4dd4cd13d8650b60332cff9c2677ec217affc60d..5692dee91321ce54a0100dc09475503d
88398837
}
88408838

88418839
public int getMaxChainedNeighborUpdates() {
8842-
@@ -3070,24 +3172,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
8840+
@@ -3070,24 +3170,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
88438841

88448842
// Paper start - API to check if the server is sleeping
88458843
public boolean isTickPaused() {

folia-server/minecraft-patches/features/0007-Region-profiler.patch

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,7 +1461,7 @@ index f9300b9f8d15843dae8fd73ff066e4be99b60451..e07e5eced7e32d1c3a0ac14e8639c1f1
14611461
if (var3 instanceof ReportedException reportedException && reportedException.getCause() instanceof OutOfMemoryError) {
14621462
throw PacketUtils.makeReportedException(var3, this.packet, this.listener);
14631463
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
1464-
index aa2c7732749400ffaf6c0e3ff17b698959bfd5f4..9464cf735cedbf662355d9e86c37bb2851680fd6 100644
1464+
index 7a6dab62a76b70183441c44b654109fb759e2e72..97842c57f5d2ec4b9ea002695fafd614a10b806a 100644
14651465
--- a/net/minecraft/server/MinecraftServer.java
14661466
+++ b/net/minecraft/server/MinecraftServer.java
14671467
@@ -1658,6 +1658,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1480,7 +1480,7 @@ index aa2c7732749400ffaf6c0e3ff17b698959bfd5f4..9464cf735cedbf662355d9e86c37bb28
14801480
// Folia start - region threading
14811481
region.world.getCurrentWorldData().updateTickData();
14821482
BooleanSupplier hasTimeLeft = () -> {
1483-
@@ -1706,7 +1708,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1483+
@@ -1706,22 +1708,33 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
14841484
new com.destroystokyo.paper.event.server.ServerTickStartEvent((int)region.getCurrentTick()).callEvent(); // Paper - Server Tick Events // Folia - region threading
14851485
// Folia start - region threading
14861486
if (region != null) {
@@ -1491,9 +1491,7 @@ index aa2c7732749400ffaf6c0e3ff17b698959bfd5f4..9464cf735cedbf662355d9e86c37bb28
14911491
// run all player packets
14921492
for (ServerPlayer player : new java.util.ArrayList<>(region.world.getCurrentWorldData().getLocalPlayers())) {
14931493
PacketProcessor packetProcessor = ((org.bukkit.craftbukkit.entity.CraftPlayer)player.getBukkitEntity()).packetProcessor;
1494-
@@ -1714,16 +1719,24 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1495-
packetProcessor.executeSinglePacket();
1496-
}
1494+
while (ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(player) && packetProcessor.executeSinglePacket());
14971495
}
14981496
+ } finally { foliaProfiler.stopTimer(ca.spottedleaf.leafprofiler.LProfilerRegistry.PLAYER_PACKET_PROCESSING); } // Folia - profiler
14991497
+ foliaProfiler.startTimer(ca.spottedleaf.leafprofiler.LProfilerRegistry.PLUGIN_TICK_TASKS); try { // Folia - profiler
@@ -1516,31 +1514,31 @@ index aa2c7732749400ffaf6c0e3ff17b698959bfd5f4..9464cf735cedbf662355d9e86c37bb28
15161514
}
15171515
// Folia end - region threading
15181516
//this.tickCount++; // Folia - region threading
1519-
@@ -1743,6 +1756,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1517+
@@ -1741,6 +1754,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
15201518
}
15211519
profiler.push("save");
15221520
final boolean fullSave = autosavePeriod > 0 && io.papermc.paper.threadedregions.RegionizedServer.getCurrentTick() % autosavePeriod == 0; // Folia - region threading
15231521
+ foliaProfiler.startTimer(ca.spottedleaf.leafprofiler.LProfilerRegistry.AUTOSAVE); try { // Folia - profiler
15241522
try {
15251523
this.isSaving = true;
15261524
if (playerSaveInterval > 0) {
1527-
@@ -1756,6 +1770,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1525+
@@ -1754,6 +1768,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
15281526
} finally {
15291527
this.isSaving = false;
15301528
}
15311529
+ } finally { foliaProfiler.stopTimer(ca.spottedleaf.leafprofiler.LProfilerRegistry.AUTOSAVE); } // Folia - profiler
15321530
profiler.pop();
15331531
// Paper end - Incremental chunk and player saving
15341532

1535-
@@ -1855,6 +1870,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1533+
@@ -1853,6 +1868,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
15361534
// Folia - region threading - moved to regionised data
15371535

15381536
protected void tickChildren(BooleanSupplier hasTimeLeft, io.papermc.paper.threadedregions.TickRegions.TickRegionData region) { // Folia - region threading
15391537
+ final ca.spottedleaf.leafprofiler.RegionizedProfiler.Handle profiler = io.papermc.paper.threadedregions.TickRegionScheduler.getProfiler(); // Folia - profiler
15401538
final io.papermc.paper.threadedregions.RegionizedWorldData regionizedWorldData = io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegionizedWorldData(); // Folia - regionised ticking
15411539
ProfilerFiller profilerFiller = Profiler.get();
15421540
//this.getPlayerList().getPlayers().forEach(serverPlayer1 -> serverPlayer1.connection.suspendFlushing()); // Folia - region threading
1543-
@@ -1909,7 +1925,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1541+
@@ -1907,7 +1923,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
15441542
profilerFiller.push("tick");
15451543

15461544
try {
@@ -1550,7 +1548,7 @@ index aa2c7732749400ffaf6c0e3ff17b698959bfd5f4..9464cf735cedbf662355d9e86c37bb28
15501548
} catch (Throwable var7) {
15511549
CrashReport crashReport = CrashReport.forThrowable(var7, "Exception ticking world");
15521550
serverLevel.fillReportDetails(crashReport);
1553-
@@ -1923,7 +1941,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
1551+
@@ -1921,7 +1939,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
15541552
//this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked // Folia - region threading
15551553

15561554
profilerFiller.popPush("connection");
@@ -1739,7 +1737,7 @@ index 79bc7b4f112f390592694e2d5c358f1c98e6c310..7400be75c5dae2b24cc327d23b703bf6
17391737

17401738
profiler.pop();
17411739
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
1742-
index dd140762829f7311e04263e3ebf29e68192b8b28..455e4f95efc0c27e09d41d4a4deff5ab913433ee 100644
1740+
index 0ed0935cf963ecd34ea720d12939204fca99bb0d..7aa9a76f1063dbfef5f4c02746e0a679caac3cb5 100644
17431741
--- a/net/minecraft/server/level/ServerLevel.java
17441742
+++ b/net/minecraft/server/level/ServerLevel.java
17451743
@@ -761,6 +761,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1872,7 +1870,7 @@ index dd140762829f7311e04263e3ebf29e68192b8b28..455e4f95efc0c27e09d41d4a4deff5ab
18721870
}
18731871

18741872
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
1875-
index 791cd313abcd2d98c8cf356211e539a714e951ad..9eff0ae2bc1024ecddb646faf767d969bb8950e8 100644
1873+
index 63af5268e2fade40478e270116a888c06d736900..8274afe0d07c50ece420b1d3cb20165ed0162acb 100644
18761874
--- a/net/minecraft/server/players/PlayerList.java
18771875
+++ b/net/minecraft/server/players/PlayerList.java
18781876
@@ -1024,6 +1024,7 @@ public abstract class PlayerList {
@@ -1938,7 +1936,7 @@ index abccad13c2bb3a33e98ad8eb6d7f08c0ef021811..0590d5723854a03a59fe9471710802f4
19381936
}
19391937
}
19401938
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
1941-
index 38a7af35f2e77b36d6b32ed40d0aaf7cd79440f2..dd66bd2d10b4ed98ed72112f3d0505d66539c831 100644
1939+
index 1a815a6e89fd2924f59c0fcad061d61cae29aca1..937f7f51e047d6f71ce89db0c8697ea558334bbc 100644
19421940
--- a/net/minecraft/world/level/Level.java
19431941
+++ b/net/minecraft/world/level/Level.java
19441942
@@ -194,6 +194,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
@@ -2007,7 +2005,7 @@ index 8b392c168d9cfefa972aa7f1e9b68711f9683024..6a9d23d25a79c73d5792011faf0e5a1c
20072005
this.validBlocks = validBlocks;
20082006
}
20092007
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
2010-
index b5fafd0a5d84ed3dd3f852c232a438b8b1b6869d..160c111e7d990dd981fb7b369bbe73e73d7f7994 100644
2008+
index 62c3804afc86d7699bd0833bb6806901032d722e..dfc3d047f25499820f84d858ccc29c90f2fe3fbc 100644
20112009
--- a/net/minecraft/world/level/chunk/LevelChunk.java
20122010
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
20132011
@@ -962,9 +962,12 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot

0 commit comments

Comments
 (0)