Skip to content

Commit 46eb8e3

Browse files
committed
升级到 26.2,并同步上游提交 bbeb1d15391828113cda419c32bea568f0985784。
主要结果: - mcVersion、apiVersion、项目版本均更新为 26.2:gradle.properties:2 - 修复 26.2 的依赖、NMS 补丁及假人 API 变化。 - 新增 26.2 假人兼容补丁:DeerFoliaPlus-server/minecraft-patches/features/0008-Update-fake-player-internals-for-26.2.patch - applyAllPatches、Java 25 编译、服务端测试、Paperclip 构建全部成功。 - 当前分支工作区干净,与 origin/ver/26.2 同步,当前提交为 d390342
1 parent 5ae3293 commit 46eb8e3

12 files changed

Lines changed: 127 additions & 97 deletions

DeerFoliaPlus-server/build.gradle.kts.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
dependencies {
4545
- implementation(project(":DeerFolia-api"))
4646
+ implementation(project(":DeerFoliaPlus-api"))
47-
implementation("ca.spottedleaf:concurrentutil:0.0.10")
47+
implementation("ca.spottedleaf:leafpile:1.0.0")
4848
implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+
4949
implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21
5050
@@ -220,14 +238,14 @@

DeerFoliaPlus-server/minecraft-patches/features/0001-Rebranding.patch

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Subject: [PATCH] Rebranding
55

66

77
diff --git a/net/minecraft/CrashReport.java b/net/minecraft/CrashReport.java
8-
index d0d5d08dbc09c436f2ac6eccc331465238946d67..a40efd06c0c1a4fd9d157fcd90280356d00b985e 100644
8+
index 50dbea31a28f765589d22f64208e1d818095dec6..adb04ccf5c6081dbee4da340e53192c45a37efc7 100644
99
--- a/net/minecraft/CrashReport.java
1010
+++ b/net/minecraft/CrashReport.java
1111
@@ -30,7 +30,7 @@ public class CrashReport {
@@ -18,15 +18,15 @@ index d0d5d08dbc09c436f2ac6eccc331465238946d67..a40efd06c0c1a4fd9d157fcd90280356
1818
public CrashReport(final String title, final Throwable t) {
1919
this.title = title;
2020
diff --git a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
21-
index 3e220a5d13ac0740ceabd7af13a64b825787861e..5ddad04b35f1e280850743e676894cc4fa8d168d 100644
21+
index 3313b79a0387bbf030f90668ec66647e93e80c1d..fe4d15a73fef2ff4f2112f322c1597fe276ea38a 100644
2222
--- a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
2323
+++ b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
2424
@@ -309,7 +309,7 @@ public class RegionFileStorage implements AutoCloseable, ca.spottedleaf.moonrise
2525

2626
// Paper start
2727
private static void printOversizedLog(String msg, Path file, int x, int z) {
28-
- org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO DEERFOLIA - You may ask for help on Discord, but do not file an issue. These error messages can not be removed."); // DeerFolia - Rebrand
29-
+ org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO DEERFOLIAPLUS - You may ask for help on Discord, but do not file an issue. These error messages can not be removed."); // DeerFoliaPlus - Rebrand
28+
- LOGGER.error("{} ({} - {},{}) Go clean it up to remove this message. /minecraft:tp {} 128 {} - DO NOT REPORT THIS TO DEERFOLIA - You may ask for help on Discord, but do not file an issue. These error messages can not be removed.", msg, file.toString().replaceAll(".+[\\\\/]", ""), x, z, x << 4, z << 4); // DeerFolia - Rebrand
29+
+ LOGGER.error("{} ({} - {},{}) Go clean it up to remove this message. /minecraft:tp {} 128 {} - DO NOT REPORT THIS TO DEERFOLIAPLUS - You may ask for help on Discord, but do not file an issue. These error messages can not be removed.", msg, file.toString().replaceAll(".+[\\\\/]", ""), x, z, x << 4, z << 4); // DeerFoliaPlus - Rebrand
3030
}
3131

3232
private static CompoundTag readOversizedChunk(RegionFile regionfile, ChunkPos chunkCoordinate) throws IOException {

DeerFoliaPlus-server/minecraft-patches/features/0002-DeerFoliaPlus-configuration.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ Subject: [PATCH] DeerFoliaPlus configuration
55

66

77
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
8-
index 7b4153041411dbb46f69e82667262644bf5e4a20..b379b4b089a73c74e963799caac80d2c060ab23e 100644
8+
index 527aa58ca531b2eec6b762b1f24ed7783179efc9..3da8e9f9b0cc5c8e677322d12d1371689640f413 100644
99
--- a/net/minecraft/server/dedicated/DedicatedServer.java
1010
+++ b/net/minecraft/server/dedicated/DedicatedServer.java
11-
@@ -285,6 +285,9 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
11+
@@ -241,6 +241,9 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
1212
// DeerFolia start - initialize config
1313
cn.lunadeer.mc.deerfolia.DeerFoliaConfiguration.load();
1414
// DeerFolia end - initialize config

DeerFoliaPlus-server/minecraft-patches/features/0003-Leaves-fake-player.patch

Lines changed: 65 additions & 65 deletions
Large diffs are not rendered by default.

DeerFoliaPlus-server/minecraft-patches/features/0004-Bedrock-style-stronghold-generation.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Subject: [PATCH] Bedrock-style stronghold generation
55

66

77
diff --git a/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java b/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java
8-
index d43105cf0c29cb86a5e3c7c59dc5e02d2ab8e53f..8cc89b120dc6c0fc55946f069a5e620f0484c1e8 100644
8+
index 8b4ea2b16da45bcefe743990866e43c94e121825..d39e3814f7c03d3c1e13b984c9a8f5005668fbdd 100644
99
--- a/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java
1010
+++ b/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java
1111
@@ -73,6 +73,21 @@ public class ChunkGeneratorStructureState {

DeerFoliaPlus-server/minecraft-patches/features/0005-Leaves-protocol-core.patch

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ Subject: [PATCH] Leaves protocol core
55

66

77
diff --git a/io/papermc/paper/threadedregions/RegionizedServer.java b/io/papermc/paper/threadedregions/RegionizedServer.java
8-
index fe7cab888696986457314b221c95ea61ebb6c3e9..08a04f0e15ab4f1c49a76f47ad35a6608ead8845 100644
8+
index aa3f0670e804554d23d850f39cf216ee2f00d016..67317525bc5318d5a2e594b8a21aba89ff6e20cf 100644
99
--- a/io/papermc/paper/threadedregions/RegionizedServer.java
1010
+++ b/io/papermc/paper/threadedregions/RegionizedServer.java
11-
@@ -366,6 +366,10 @@ public final class RegionizedServer {
11+
@@ -267,6 +267,10 @@ public final class RegionizedServer {
1212

1313
// Leaves FakePlayer
1414
MinecraftServer.getServer().botList.networkTick();
@@ -20,7 +20,7 @@ index fe7cab888696986457314b221c95ea61ebb6c3e9..08a04f0e15ab4f1c49a76f47ad35a660
2020

2121
private void tickPlayerSample() {
2222
diff --git a/net/minecraft/server/network/PlayerChunkSender.java b/net/minecraft/server/network/PlayerChunkSender.java
23-
index 373da9d604cfb1614a0618d856aefd2be3c7682b..6b398a37d25ce906be71313ffa520fbffad94634 100644
23+
index 196c01fe5f200ed57e6f23e0939cac616305571a..40962f02c7d15cef9a1b5cac0705c20db1f7d19d 100644
2424
--- a/net/minecraft/server/network/PlayerChunkSender.java
2525
+++ b/net/minecraft/server/network/PlayerChunkSender.java
2626
@@ -83,6 +83,9 @@ public class PlayerChunkSender {
@@ -34,11 +34,11 @@ index 373da9d604cfb1614a0618d856aefd2be3c7682b..6b398a37d25ce906be71313ffa520fbf
3434
if (io.papermc.paper.event.packet.PlayerChunkLoadEvent.getHandlerList().getRegisteredListeners().length > 0) {
3535
new io.papermc.paper.event.packet.PlayerChunkLoadEvent(new org.bukkit.craftbukkit.CraftChunk(chunk), connection.getPlayer().getBukkitEntity()).callEvent();
3636
diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
37-
index cf4b5e436b8d81657d1deaa5b06645016d9dc3cc..3d72ce1b8c11d6e8fffcf6fed55e881d348fcc9a 100644
37+
index 010180899d69d0457dcc9feee4f1c062c5354995..0eaafdc22077eb43bff91c46a0557a288d40f017 100644
3838
--- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
3939
+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
4040
@@ -176,6 +176,15 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
41-
this.playerBrand = new net.minecraft.network.FriendlyByteBuf(io.netty.buffer.Unpooled.wrappedBuffer(data)).readUtf(256);
41+
this.clientBrand = new net.minecraft.network.FriendlyByteBuf(io.netty.buffer.Unpooled.wrappedBuffer(data)).readUtf(256);
4242
}
4343

4444
+ // DeerFoliaPlus start - Leaves protocol support
@@ -54,10 +54,10 @@ index cf4b5e436b8d81657d1deaa5b06645016d9dc3cc..3d72ce1b8c11d6e8fffcf6fed55e881d
5454
} catch (final Exception e) {
5555
LOGGER.error("Couldn't handle custom payload on channel {}", identifier, e);
5656
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
57-
index 1dee97257d0a64d0ef0f465a5be7b53380dfef87..0941c901752d3e4adf24eaabf31382c488a0446a 100644
57+
index 90f78bcb8658c13dcdb70915317020cea5477547..404186dfa4f0c0c2caec9ee9faef89b28a8e3668 100644
5858
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
5959
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
60-
@@ -2364,6 +2364,9 @@ public class ServerGamePacketListenerImpl
60+
@@ -2356,6 +2356,9 @@ public class ServerGamePacketListenerImpl
6161

6262
private void removePlayerFromWorld(net.kyori.adventure.text.@Nullable Component quitMessage) {
6363
// Paper end - Fix kick event leave message not being sent
@@ -68,10 +68,10 @@ index 1dee97257d0a64d0ef0f465a5be7b53380dfef87..0941c901752d3e4adf24eaabf31382c4
6868
// CraftBukkit start - Replace vanilla quit message handling with our own.
6969
/*
7070
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
71-
index d19c80600c9001a394db2607c980a5258f615ab3..b3b81c9ea69e890fd7706e041b405c1aedaebd82 100644
71+
index 97166917734c498f71ff674b03904d015191c926..0fadd0cc753ac784b2e4cfb0ace6ac5104d78c97 100644
7272
--- a/net/minecraft/server/players/PlayerList.java
7373
+++ b/net/minecraft/server/players/PlayerList.java
74-
@@ -329,6 +329,10 @@ public abstract class PlayerList {
74+
@@ -330,6 +330,10 @@ public abstract class PlayerList {
7575
}
7676
// Leaves end - bot support
7777

DeerFoliaPlus-server/minecraft-patches/features/0006-Register-utility-commands.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Subject: [PATCH] Register utility commands
55

66

77
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
8-
index 4b23909d63c8700fefdf359c8bf17fb0fd230321..00e598931364f019b4de9412ae304a6fd3d5771d 100644
8+
index 4c2be09de83d59131bf348abe45679791c85f9c5..03ed64aa9c78d43618c6d87c8327d0cb2ff45ba2 100644
99
--- a/net/minecraft/commands/Commands.java
1010
+++ b/net/minecraft/commands/Commands.java
1111
@@ -266,6 +266,21 @@ public class Commands {

DeerFoliaPlus-server/minecraft-patches/features/0007-Posture-system.patch

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Subject: [PATCH] Posture system
55

66

77
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
8-
index 00e598931364f019b4de9412ae304a6fd3d5771d..5a53b95c3b3b5683f744c9bbefc9f570fb927e4b 100644
8+
index 03ed64aa9c78d43618c6d87c8327d0cb2ff45ba2..6ddefbfb54d1678d71da57e47b2337f7c69aa600 100644
99
--- a/net/minecraft/commands/Commands.java
1010
+++ b/net/minecraft/commands/Commands.java
1111
@@ -280,6 +280,7 @@ public class Commands {
@@ -17,10 +17,10 @@ index 00e598931364f019b4de9412ae304a6fd3d5771d..5a53b95c3b3b5683f744c9bbefc9f570
1717
if (JvmProfiler.INSTANCE.isAvailable()) {
1818
JfrCommand.register(this.dispatcher);
1919
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
20-
index 0941c901752d3e4adf24eaabf31382c488a0446a..f7708d89db10a8dd75025f08ac6dbc08ca3cc0b0 100644
20+
index 404186dfa4f0c0c2caec9ee9faef89b28a8e3668..88f2f289f3a4a07c62f22b9eab3212078706d4d0 100644
2121
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
2222
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
23-
@@ -537,7 +537,16 @@ public class ServerGamePacketListenerImpl
23+
@@ -540,7 +540,16 @@ public class ServerGamePacketListenerImpl
2424
}
2525
}
2626
// Paper end - PlayerToggleSneakEvent
@@ -38,7 +38,7 @@ index 0941c901752d3e4adf24eaabf31382c488a0446a..f7708d89db10a8dd75025f08ac6dbc08
3838
if (this.hasClientLoaded()) {
3939
this.player.resetLastActionTime();
4040
// this.player.setShiftKeyDown(packet.input().shift()); // Paper - move up and only set if event is not cancelled.
41-
@@ -1533,6 +1542,20 @@ public class ServerGamePacketListenerImpl
41+
@@ -1552,6 +1561,20 @@ public class ServerGamePacketListenerImpl
4242
double targetX = clampHorizontal(packet.getX(this.player.getX()));
4343
double targetY = clampVertical(packet.getY(this.player.getY()));
4444
double targetZ = clampHorizontal(packet.getZ(this.player.getZ()));
@@ -60,10 +60,10 @@ index 0941c901752d3e4adf24eaabf31382c488a0446a..f7708d89db10a8dd75025f08ac6dbc08
6060
this.player.absSnapTo(this.player.getX(), this.player.getY(), this.player.getZ(), targetYRot, targetXRot);
6161
this.player.level().getChunkSource().move(this.player);
6262
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
63-
index 2a70e3ab48eb2a88a90f4af60f27dff78a53c653..88f31350a7c8545e05daccf12f6be7363c547cac 100644
63+
index 2d234a7063381b36ffbc0c4e6e339d2c3f3ae76c..0605ed161dbffd69861e3dbdccff8d7266e3ee9c 100644
6464
--- a/net/minecraft/world/entity/player/Player.java
6565
+++ b/net/minecraft/world/entity/player/Player.java
66-
@@ -363,6 +363,18 @@ public abstract class Player extends Avatar implements ContainerUser {
66+
@@ -367,6 +367,18 @@ public abstract class Player extends Avatar implements ContainerUser {
6767
}
6868

6969
protected void updatePlayerPose() {
@@ -82,7 +82,7 @@ index 2a70e3ab48eb2a88a90f4af60f27dff78a53c653..88f31350a7c8545e05daccf12f6be736
8282
if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.SWIMMING)) {
8383
Pose desiredPose = this.getDesiredPose();
8484
Pose actualPose;
85-
@@ -1501,6 +1513,14 @@ public abstract class Player extends Avatar implements ContainerUser {
85+
@@ -1524,6 +1536,14 @@ public abstract class Player extends Avatar implements ContainerUser {
8686

8787
@Override
8888
public void travel(final Vec3 input) {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: zhangyuheng <zhangyuheng@lunadeer.cn>
3+
Date: Wed, 29 Jul 2026 12:37:36 +0800
4+
Subject: [PATCH] Update fake player internals for 26.2
5+
6+
7+
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
8+
index 5fdfbd5ef0bd89fecc09b3b3b2c5ff7f6861d457..f84b20d55e3c6dcb9de58d7419b2748456a56301 100644
9+
--- a/net/minecraft/server/level/ServerPlayer.java
10+
+++ b/net/minecraft/server/level/ServerPlayer.java
11+
@@ -66,6 +66,7 @@ import net.minecraft.network.protocol.game.ClientboundHurtAnimationPacket;
12+
import net.minecraft.network.protocol.game.ClientboundMerchantOffersPacket;
13+
import net.minecraft.network.protocol.game.ClientboundMountScreenOpenPacket;
14+
import net.minecraft.network.protocol.game.ClientboundOpenBookPacket;
15+
+import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
16+
import net.minecraft.network.protocol.game.ClientboundOpenSignEditorPacket;
17+
import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket;
18+
import net.minecraft.network.protocol.game.ClientboundPlayerCombatEndPacket;
19+
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
20+
index 0605ed161dbffd69861e3dbdccff8d7266e3ee9c..127dc16556d95222eb0356a38b62bad8fab4479b 100644
21+
--- a/net/minecraft/world/entity/player/Player.java
22+
+++ b/net/minecraft/world/entity/player/Player.java
23+
@@ -156,7 +156,7 @@ public abstract class Player extends Avatar implements ContainerUser {
24+
protected FoodData foodData = new FoodData();
25+
protected int jumpTriggerTime;
26+
public int takeXpDelay;
27+
- private int sleepCounter = 0;
28+
+ protected int sleepCounter = 0; // DeerFoliaPlus - fake players use the vanilla sleep tick flow
29+
protected boolean wasUnderwater;
30+
private final Abilities abilities = new Abilities();
31+
public int experienceLevel = 0;

DeerFoliaPlus-server/src/main/java/org/leavesmc/leaves/bot/BotList.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ public ServerBot placeNewBot(ServerBot bot, ServerLevel world, Location location
156156
this.server.server.getPluginManager().callEvent(event);
157157
location = event.getSpawnLocation();
158158

159-
bot.spawnIn(world);
160159
bot.gameMode.setLevel((ServerLevel) bot.level());
161160

162161
bot.setPosRaw(location.getX(), location.getY(), location.getZ());
@@ -184,7 +183,7 @@ public ServerBot placeNewBot(ServerBot bot, ServerLevel world, Location location
184183

185184
bot.renderAll();
186185
bot.suppressTrackerForLogin = false;
187-
bot.level().getChunkSource().chunkMap.addEntity(bot);
186+
bot.level().getChunkSource().addEntity(bot);
188187
BotList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", bot.getName().getString(), "Local", bot.getId(), bot.level().serverLevelData.getLevelName(), bot.getX(), bot.getY(), bot.getZ());
189188
return bot;
190189
}

0 commit comments

Comments
 (0)