diff --git a/.github/workflows/build-1215.yml b/.github/workflows/build-1215.yml
index 660e3fd2..65bdfc35 100644
--- a/.github/workflows/build-1215.yml
+++ b/.github/workflows/build-1215.yml
@@ -97,7 +97,7 @@ jobs:
path: ./leaf-1.21.5-${{ env.BUILD_NUMBER }}.jar
- name: Release Leaf
- uses: softprops/action-gh-release@master
+ uses: softprops/action-gh-release@v2.2.2 # Temp fix
with:
name: "Leaf 1.21.5"
tag_name: "ver-1.21.5"
diff --git a/.gitignore b/.gitignore
index 136dc0db..811e2614 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@
# IntelliJ
*.iml
.idea
+!.idea/icon.svg
# Gradle
!gradle/wrapper/gradle-wrapper.jar
@@ -19,7 +20,7 @@ build
# Leaf
build-data/dev-imports.txt
-patches/todo
+leaf-archived-patches/todo
run
leaf-api/build.gradle.kts
diff --git a/.idea/icon.svg b/.idea/icon.svg
new file mode 100644
index 00000000..e4563310
--- /dev/null
+++ b/.idea/icon.svg
@@ -0,0 +1,143 @@
+
+
+
diff --git a/README.md b/README.md
index 8156cd5e..86cae39d 100644
--- a/README.md
+++ b/README.md
@@ -1,30 +1,32 @@
cloud of swordsman | 剑客云
-If you want to find a cheaper, high performance, stable with lower latency, then cloud of swordsman is a good choice! Registers and purchases in [here](https://cloud.swordsman.com.cn/?i8ab42c).
+If you want to find a cheaper, high performance, stable, lower latency host, then cloud of swordsman is a good choice! Registers and purchases in [here](https://cloud.swordsman.com.cn/?i8ab42c).
-如果你想找一个低价高性能, 低延迟的云服务商,剑客云是个不错的选择! 你可以在[这里](https://cloud.swordsman.com.cn/?i8ab42c)注册.
+如果你想找一个低价高性能、低延迟的云服务商,剑客云是个不错的选择!你可以在 [这里](https://cloud.swordsman.com.cn/?i8ab42c) 注册。
---

diff --git a/build-data/leaf.at b/build-data/leaf.at
index 34938c58..a9eaa7b1 100644
--- a/build-data/leaf.at
+++ b/build-data/leaf.at
@@ -4,6 +4,8 @@ protected net.minecraft.world.entity.Entity dimensions
protected net.minecraft.world.entity.ai.goal.RemoveBlockGoal blockToRemove
protected net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal getTargetConditions()Lnet/minecraft/world/entity/ai/targeting/TargetingConditions;
protected-f net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase$Cache largeCollisionShape
+public net.minecraft.core.Direction VALUES
+public net.minecraft.server.level.ServerChunkCache fullChunks
public net.minecraft.server.level.ServerEntity sendDirtyEntityData()V
public net.minecraft.server.players.PlayerList SEND_PLAYER_INFO_INTERVAL
public net.minecraft.util.Mth SIN
diff --git a/gradle.properties b/gradle.properties
index 1514320d..310e1171 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -8,6 +8,3 @@ org.gradle.configuration-cache=true
org.gradle.caching=true
org.gradle.parallel=true
org.gradle.vfs.watch=false
-leaf.patcher.repo-cache=enabled
-leaf.patcher.patch-cache=enabled
-leaf.patcher.fast-update=true
diff --git a/leaf-api/build.gradle.kts.patch b/leaf-api/build.gradle.kts.patch
index f2a00386..9dd03e4e 100644
--- a/leaf-api/build.gradle.kts.patch
+++ b/leaf-api/build.gradle.kts.patch
@@ -33,7 +33,7 @@
api("org.apache.logging.log4j:log4j-api:$log4jVersion")
api("org.slf4j:slf4j-api:$slf4jVersion")
api("com.mojang:brigadier:1.3.10")
-+ api("io.sentry:sentry:8.4.0") // Pufferfish
++ api("io.sentry:sentry:8.13.2") // Pufferfish
// Deprecate bungeecord-chat in favor of adventure
api("net.md-5:bungeecord-chat:$bungeeCordChatVersion") {
diff --git a/leaf-api/src/main/java/org/dreeam/leaf/event/BlockExplosionHitEvent.java b/leaf-api/src/main/java/org/dreeam/leaf/event/BlockExplosionHitEvent.java
new file mode 100644
index 00000000..510a54ac
--- /dev/null
+++ b/leaf-api/src/main/java/org/dreeam/leaf/event/BlockExplosionHitEvent.java
@@ -0,0 +1,63 @@
+package org.dreeam.leaf.event;
+
+import org.bukkit.ExplosionResult;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Entity;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.block.BlockEvent;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Called when a block executes its explosion hit actions.
+ * If the event is cancelled, the block will not execute the explosion hit actions.
+ */
+public class BlockExplosionHitEvent extends BlockEvent implements Cancellable {
+ private static final HandlerList handlers = new HandlerList();
+ private boolean cancelled;
+ private final Entity source;
+ private final ExplosionResult result;
+
+ public BlockExplosionHitEvent(@NotNull Block block, Entity source, ExplosionResult result) {
+ super(block);
+ this.source = source;
+ this.result = result;
+ }
+
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return cancelled;
+ }
+
+ @Override
+ public void setCancelled(boolean cancel) {
+ this.cancelled = cancel;
+ }
+
+ /**
+ * Returns the entity responsible for the explosion.
+ *
+ * @return Entity responsible for the explosion
+ */
+ public Entity getSource() {
+ return source;
+ }
+
+ /**
+ * Returns the result of the explosion.
+ *
+ * @return the result of the explosion
+ */
+ public ExplosionResult getResult() {
+ return result;
+ }
+}
diff --git a/leaf-archived-patches/removed/hardfork/paperserver/0002-Leaf-Bootstrap.patch b/leaf-archived-patches/removed/hardfork/paperserver/0002-Leaf-Bootstrap.patch
deleted file mode 100644
index 049a33d3..00000000
--- a/leaf-archived-patches/removed/hardfork/paperserver/0002-Leaf-Bootstrap.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com>
-Date: Wed, 31 Jul 2024 22:05:21 +0800
-Subject: [PATCH] Leaf Bootstrap
-
-Removed since Leaf 1.21.4, useless
-
-org.bukkit.craftbukkit.Main#main -> LeafBootstrap -> PaperBootstrap -> ...
-
-diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
-index ecb0fcd1f3b3f3d7751eded3cdf0977c1889c9ed..d0becb56a9911ef4cc55ae8d7c47832f442ad52f 100644
---- a/src/main/java/org/bukkit/craftbukkit/Main.java
-+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
-@@ -278,7 +278,8 @@ public class Main {
- System.setProperty("jdk.console", "java.base"); // Paper - revert default console provider back to java.base so we can have our own jline
- //System.out.println("Loading libraries, please wait...");
- //net.minecraft.server.Main.main(options);
-- io.papermc.paper.PaperBootstrap.boot(options);
-+ //io.papermc.paper.PaperBootstrap.boot(options); // Leaf - Leaf Boostrap - diff on change
-+ org.dreeam.leaf.LeafBootstrap.boot(options); // Leaf - Leaf Boostrap
- } catch (Throwable t) {
- t.printStackTrace();
- }
diff --git a/leaf-server/minecraft-patches/features/0190-Smooth-teleport-config.patch b/leaf-archived-patches/removed/hardfork/server/0100-Smooth-teleport-config.patch
similarity index 90%
rename from leaf-server/minecraft-patches/features/0190-Smooth-teleport-config.patch
rename to leaf-archived-patches/removed/hardfork/server/0100-Smooth-teleport-config.patch
index f0e38705..30429f8d 100644
--- a/leaf-server/minecraft-patches/features/0190-Smooth-teleport-config.patch
+++ b/leaf-archived-patches/removed/hardfork/server/0100-Smooth-teleport-config.patch
@@ -3,16 +3,18 @@ From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com>
Date: Tue, 9 Nov 2077 00:00:00 +0800
Subject: [PATCH] Smooth teleport config
+Removed since Leaf 1.21.4
+
This abuses some of how Minecraft works and attempts to teleport a player to another world without
triggering typical respawn packets. All of natural state of chunk resends, entity adds/removes, etc still
happen but the visual "refresh" of a world change is hidden. Depending on the destination location/world,
this can act as a "smooth teleport" to a world if the new world is very similar looking to the old one.
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
-index 18125ed336c3425f123232b405a8af9ee3a2ba7d..e97a93c97e1822f969dce2d30dd915db5d3d14cf 100644
+index 4f01b53bf801f99253efd27df6216912705d18af..82a1715fea41e6a41c4ff441ea89f424f68ba190 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
-@@ -1419,6 +1419,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
+@@ -1469,6 +1469,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
LevelData worlddata = level.getLevelData();
this.connection.send(new ClientboundRespawnPacket(this.createCommonSpawnInfo(level), (byte) 3));
@@ -20,9 +22,9 @@ index 18125ed336c3425f123232b405a8af9ee3a2ba7d..e97a93c97e1822f969dce2d30dd915db
this.connection.send(new ClientboundChangeDifficultyPacket(worlddata.getDifficulty(), worlddata.isDifficultyLocked()));
PlayerList playerList = this.server.getPlayerList();
-@@ -1428,7 +1429,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
+@@ -1478,7 +1479,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
// CraftBukkit end
- this.portalPos = org.bukkit.craftbukkit.util.CraftLocation.toBlockPosition(exit); // Purpur - Fix stuck in portals
+ this.portalPos = io.papermc.paper.util.MCUtil.toBlockPosition(exit); // Purpur - Fix stuck in portals
this.setServerLevel(level);
- this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event
+ if (!org.dreeam.leaf.config.modules.gameplay.SmoothTeleport.enabled || !PlayerList.isSameLogicalHeight(serverLevel, level)) this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event // Leaf - Smooth teleport
@@ -30,10 +32,10 @@ index 18125ed336c3425f123232b405a8af9ee3a2ba7d..e97a93c97e1822f969dce2d30dd915db
level.addDuringTeleport(this);
this.triggerDimensionChangeTriggers(serverLevel);
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
-index 34c5c2e3d6b0706cb91ec0171969cf81e94741a4..8b1652805a2ac9ebae9c99dd77e81c7a484a7abb 100644
+index 75fb49f1596f475278d12c8c7aea9ad4952b6056..b17c8a2f5294ac28cc05fb05c84a041b2c6c8721 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
-@@ -956,11 +956,11 @@ public abstract class PlayerList {
+@@ -955,11 +955,11 @@ public abstract class PlayerList {
byte b = (byte)(keepInventory ? 1 : 0);
ServerLevel serverLevel = serverPlayer.serverLevel();
LevelData levelData = serverLevel.getLevelData();
diff --git a/leaf-server/minecraft-patches/features/0192-Collect-then-startEachNonRunningBehavior-in-Brain.patch b/leaf-archived-patches/removed/hardfork/server/0101-Collect-then-startEachNonRunningBehavior-in-Brain.patch
similarity index 90%
rename from leaf-server/minecraft-patches/features/0192-Collect-then-startEachNonRunningBehavior-in-Brain.patch
rename to leaf-archived-patches/removed/hardfork/server/0101-Collect-then-startEachNonRunningBehavior-in-Brain.patch
index a8155086..5909a99d 100644
--- a/leaf-server/minecraft-patches/features/0192-Collect-then-startEachNonRunningBehavior-in-Brain.patch
+++ b/leaf-archived-patches/removed/hardfork/server/0101-Collect-then-startEachNonRunningBehavior-in-Brain.patch
@@ -3,12 +3,13 @@ From: Taiyou06
+ * Iteration only processes "visible" elements, and visibility can be toggled in O(1) time.
+ * This is useful for managing lists of tasks or objects where a large set exists,
+ * but only a small subset is active at any given time.
+ *
+ * @param
+ • KeYi (R.I.P.)
+ (备份仓库)
+
+如果没有这些优秀的项目,Leaf 就不会变得如此出色。
+
+- [Gale](https://github.com/Dreeam-qwq/Gale) ([原始仓库](https://github.com/GaleMC/Gale))
+- [Pufferfish](https://github.com/pufferfish-gg/Pufferfish)
+- [Purpur](https://github.com/PurpurMC/Purpur)
+- 🍴 展开查看 Leaf 采用补丁的核心
+
+ • Mirai
+ • Petal
+ • Carpet Fixes
+ • Akarin
+ • Slice
+ • Parchment
+ • Leaves
+ • Kaiiju
+ • Plazma
+ • SparklyPaper
+ • Polpot
+ • Matter
+ • Luminol
+ • Nitori
+ • Moonrise (在 1.21.1 期间)
+ • Sakura
+
+剑客云 | cloud of swordsman
+
+如果你想找一个低价高性能、低延迟的云服务商,剑客云是个不错的选择!你可以在 [这里](https://cloud.swordsman.com.cn/?i8ab42c) 注册。
+
+If you want to find a cheaper, high performance, stable, lower latency host, then cloud of swordsman is a good choice! Registers and purchases in [here](https://cloud.swordsman.com.cn/?i8ab42c).
+
+---
+
+
+YourKit 通过创新和智能的工具支持开源项目,用于监控和分析 Java 和 .NET 应用程序。
+YourKit 是 [YourKit Java Profiler](https://www.yourkit.com/java/profiler/)、
+[YourKit .NET Profiler](https://www.yourkit.com/dotnet-profiler/) 和
+[YourKit YouMonitor](https://www.yourkit.com/youmonitor/) 的创造者。
\ No newline at end of file
diff --git a/todos.md b/todos.md
index 4f35294c..d721eef5 100644
--- a/todos.md
+++ b/todos.md
@@ -8,9 +8,8 @@
# 1.21.5
- [ ] Check beacon issues fix
-- [ ] Update README.md
- [ ] Remove stream in Inventory and check new changes
- [ ] Check Purpur's Projectile offset config, in BowItem shoot
- [ ] Remove Gale's attribute patch
- [ ] Check SparklyPaper's mapitem update skip
-- [ ] Update from Leaf 1.21.4 (curr commit: `12711630d4ca8788366f8abd47275c4c262ff13f`)
+- [ ] Update from Leaf 1.21.4 (curr commit: `ccab3256c296857eeacd4d0c23f2e1b8aae3b36c`)