diff --git a/README.md b/README.md
index 10bd274f5..74d937f47 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
## Purpur
[](LICENSE)
-[](https://purpurmc.org/downloads/)
+[](https://purpurmc.org/downloads/)
[](https://www.codefactor.io/repository/github/PurpurMC/Purpur)
[](https://purpurmc.org/discord)
@@ -27,7 +27,7 @@ Join us on Discord:
## Downloads
Downloads can be obtained from the [downloads page](https://purpurmc.org/downloads/) or the [downloads API](https://api.purpurmc.org).
-[](https://purpurmc.org/downloads/)
+[](https://purpurmc.org/downloads/)
Downloads API endpoints:
* List versions of Minecraft with builds available:
@@ -67,7 +67,7 @@ Maven
org.purpurmc.purpur
purpur-api
- 1.20.5-R0.1-SNAPSHOT
+ 1.20.6-R0.1-SNAPSHOT
provided
```
diff --git a/gradle.properties b/gradle.properties
index c854ceea7..8c05d797b 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,8 +1,8 @@
group = org.purpurmc.purpur
-version = 1.20.5-R0.1-SNAPSHOT
+version = 1.20.6-R0.1-SNAPSHOT
-mcVersion = 1.20.5
-paperCommit = f9397e108e02ae558493d7bb63b0264af2cc7693
+mcVersion = 1.20.6
+paperCommit = 812ccb96a480cc6518ba5ddde11e12c22691c061
org.gradle.caching = true
org.gradle.parallel = true
diff --git a/patches/server/0065-Implement-bed-explosion-options.patch b/patches/server/0065-Implement-bed-explosion-options.patch
index 2ff47c399..94fa8a84f 100644
--- a/patches/server/0065-Implement-bed-explosion-options.patch
+++ b/patches/server/0065-Implement-bed-explosion-options.patch
@@ -5,24 +5,24 @@ Subject: [PATCH] Implement bed explosion options
diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java
-index e9f8949267208b93f0c56c36ada38274ed4280f5..9084e11df829fb24489773d15435a3a3570135fe 100644
+index f726c3839ab93cc81fee26bfeb821bead3533b5e..2590eee0ca6a35fad3351dd6112aa596107fbe8f 100644
--- a/src/main/java/net/minecraft/world/level/block/BedBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java
-@@ -105,7 +105,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
+@@ -104,7 +104,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
Vec3 vec3d = pos.getCenter();
-- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // Paper - add exploded state
-+ if (world.purpurConfig.bedExplode) world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // Paper - add exploded state // Purpur
+- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK);
++ if (world.purpurConfig.bedExplode) world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // Purpur
return InteractionResult.SUCCESS;
} else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) {
if (!BedBlock.canSetSpawn(world)) return this.explodeBed(state, world, pos); // Paper - check explode first
-@@ -158,7 +158,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
+@@ -156,7 +156,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
Vec3 vec3d = blockposition.getCenter();
-- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // Paper - add exploded state
-+ if (world.purpurConfig.bedExplode) world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // Paper - add exploded state // Purpur
+- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, world, iblockdata, blockposition), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state
++ if (world.purpurConfig.bedExplode) world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, world, iblockdata, blockposition), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // CraftBukkit - add state // Purpur
return InteractionResult.SUCCESS;
}
}
diff --git a/patches/server/0066-Implement-respawn-anchor-explosion-options.patch b/patches/server/0066-Implement-respawn-anchor-explosion-options.patch
index 1cf02a3c0..260009f57 100644
--- a/patches/server/0066-Implement-respawn-anchor-explosion-options.patch
+++ b/patches/server/0066-Implement-respawn-anchor-explosion-options.patch
@@ -5,15 +5,15 @@ Subject: [PATCH] Implement respawn anchor explosion options
diff --git a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java
-index 4e2fad1f234356ada6f29445038e43b9a8406cf9..6f3f53940431afc7a22b262d9d34bc0abf2f0e7a 100644
+index be85535767bc79875c38da78a209d33d4be87c8a..2b840a5516073da46207552688428d86fc99975b 100644
--- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java
-@@ -150,7 +150,7 @@ public class RespawnAnchorBlock extends Block {
+@@ -149,7 +149,7 @@ public class RespawnAnchorBlock extends Block {
};
Vec3 vec3d = explodedPos.getCenter();
-- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), explosiondamagecalculator, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // Paper - add exploded state
-+ if (world.purpurConfig.respawnAnchorExplode)world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), explosiondamagecalculator, vec3d, (float) world.purpurConfig.respawnAnchorExplosionPower, world.purpurConfig.respawnAnchorExplosionFire, world.purpurConfig.respawnAnchorExplosionEffect);// Paper - add exploded state // Purpur
+- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, world, state, explodedPos), explosiondamagecalculator, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state
++ if (world.purpurConfig.respawnAnchorExplode)world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, world, state, explodedPos), explosiondamagecalculator, vec3d, (float) world.purpurConfig.respawnAnchorExplosionPower, world.purpurConfig.respawnAnchorExplosionFire, world.purpurConfig.respawnAnchorExplosionEffect);// CraftBukkit - add state // Purpur
}
public static boolean canSetSpawn(Level world) {
diff --git a/patches/server/0127-Dont-run-with-scissors.patch b/patches/server/0127-Dont-run-with-scissors.patch
index 6df59668d..f47345e01 100644
--- a/patches/server/0127-Dont-run-with-scissors.patch
+++ b/patches/server/0127-Dont-run-with-scissors.patch
@@ -55,10 +55,10 @@ index 99a7e9eb75231c15bd8bb24fbb4e296bc9fdedff..a375d40ec6365ba8704ba3ece22dd5b2
}
}
diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
-index 43b9a7e8ed9043c4d3f8295258a27209ddb4474b..9c18134cb5474a7f3be2337036c7af253ec0b21e 100644
+index ff1df6360cb4d9da8717687344bdea2a44b6fc2a..894668c96ac36e737910a25cf89651236246200c 100644
--- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
-@@ -28,6 +28,7 @@ public class DamageSource {
+@@ -29,6 +29,7 @@ public class DamageSource {
private boolean withSweep = false;
private boolean melting = false;
private boolean poison = false;
@@ -66,7 +66,7 @@ index 43b9a7e8ed9043c4d3f8295258a27209ddb4474b..9c18134cb5474a7f3be2337036c7af25
@Nullable
private Entity customEventDamager = null; // This field is a helper for when causing entity damage is not set by vanilla // Paper - fix DamageSource API
-@@ -58,6 +59,17 @@ public class DamageSource {
+@@ -59,6 +60,17 @@ public class DamageSource {
return this.poison;
}
@@ -93,7 +93,7 @@ index 43b9a7e8ed9043c4d3f8295258a27209ddb4474b..9c18134cb5474a7f3be2337036c7af25
}
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java
-index 8ba60de95845f4d56f299c5f1b2b5163461ba38d..b3d7790fa3e873f2e9b8fa4e4e749ef9c06973b9 100644
+index 349d1683458ec5d641c9823aa7a68dec8820a664..32c0a2df609acc1ecdd5a0a98a997b2f33525621 100644
--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java
@@ -44,11 +44,13 @@ public class DamageSources {
diff --git a/patches/server/0239-Stonecutter-damage.patch b/patches/server/0239-Stonecutter-damage.patch
index 3489e4090..121a672c9 100644
--- a/patches/server/0239-Stonecutter-damage.patch
+++ b/patches/server/0239-Stonecutter-damage.patch
@@ -18,10 +18,10 @@ index a375d40ec6365ba8704ba3ece22dd5b2de9857b5..357a79d72a2de02a019595e457fe432b
// Purpur end
return damageSource.getLocalizedDeathMessage(this.mob);
diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
-index 9c18134cb5474a7f3be2337036c7af253ec0b21e..b6881d7f02ad4e9e45e947eaec54f0c6b8ff957a 100644
+index 894668c96ac36e737910a25cf89651236246200c..812091bf6efc067b21b9723b8241360d4b4c79e7 100644
--- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
-@@ -29,6 +29,7 @@ public class DamageSource {
+@@ -30,6 +30,7 @@ public class DamageSource {
private boolean melting = false;
private boolean poison = false;
private boolean scissors = false; // Purpur
@@ -29,7 +29,7 @@ index 9c18134cb5474a7f3be2337036c7af253ec0b21e..b6881d7f02ad4e9e45e947eaec54f0c6
@Nullable
private Entity customEventDamager = null; // This field is a helper for when causing entity damage is not set by vanilla // Paper - fix DamageSource API
-@@ -68,6 +69,15 @@ public class DamageSource {
+@@ -69,6 +70,15 @@ public class DamageSource {
public boolean isScissors() {
return this.scissors;
}
@@ -54,7 +54,7 @@ index 9c18134cb5474a7f3be2337036c7af253ec0b21e..b6881d7f02ad4e9e45e947eaec54f0c6
}
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java
-index b3d7790fa3e873f2e9b8fa4e4e749ef9c06973b9..e8c0cec909deea5cd9a031856d9d249f85d5e5f7 100644
+index 32c0a2df609acc1ecdd5a0a98a997b2f33525621..f0568c3d731afaf610ac2f45db53148d38338cdf 100644
--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java
@@ -45,12 +45,14 @@ public class DamageSources {
@@ -115,7 +115,7 @@ index 31ae0f466ae522d767907ec5066b26695f327b96..f26383cf896785333dbd6f86348d5a5f
} else if (blockState.is(Blocks.HONEY_BLOCK)) {
return PathType.STICKY_HONEY;
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 2391a0c59bfbf315f00ce41c5e0a03ea23a25448..1bd373d835cfcf1b43b28dbd0f138facb06f76f9 100644
+index a49193a023bbd9b65bcd3652dc9c241720500755..6fed586c9a778f7a57e1b4ca2e6f2dbc15c8769d 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1130,7 +1130,7 @@ public class CraftEventFactory {
diff --git a/patches/server/0243-Enchantment-Table-Persists-Lapis.patch b/patches/server/0243-Enchantment-Table-Persists-Lapis.patch
index 2c69fe2b5..834e303f8 100644
--- a/patches/server/0243-Enchantment-Table-Persists-Lapis.patch
+++ b/patches/server/0243-Enchantment-Table-Persists-Lapis.patch
@@ -94,7 +94,7 @@ index 151e856dda3aa262c846ce8793650ee582bfb749..be0ed8a14e5726d5fcea1864302b18fb
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java
-index c3503eaec5c5ece6e27a52fb703d06ec7c767383..ed7b41604fb201c346c362803bb9280831c0d0fb 100644
+index d47bc2f54c4722a0b8c419b99ee57eb3cb25d750..fdeabdcc781b605d6f3ee18528fd380ffff95660 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java
@@ -28,6 +28,7 @@ public class EnchantingTableBlockEntity extends BlockEntity implements Nameable
@@ -115,7 +115,7 @@ index c3503eaec5c5ece6e27a52fb703d06ec7c767383..ed7b41604fb201c346c362803bb92808
@Override
@@ -47,6 +49,7 @@ public class EnchantingTableBlockEntity extends BlockEntity implements Nameable
if (nbt.contains("CustomName", 8)) {
- this.name = io.papermc.paper.util.MCUtil.getBaseComponentFromNbt("CustomName", nbt, registryLookup); // Paper - Catch ParseException
+ this.name = parseCustomNameSafe(nbt.getString("CustomName"), registryLookup);
}
+ this.lapis = nbt.getInt("Purpur.Lapis"); // Purpur
}
diff --git a/patches/server/0251-Remove-Mojang-Profiler.patch b/patches/server/0251-Remove-Mojang-Profiler.patch
index 33768f658..48bd9762b 100644
--- a/patches/server/0251-Remove-Mojang-Profiler.patch
+++ b/patches/server/0251-Remove-Mojang-Profiler.patch
@@ -1812,7 +1812,7 @@ index dcf580d852ede8ea01f5d91944a224ec6eca73e4..4be218129188c1be8736940170a861ad
this.assignProfessionWhenSpawned = false;
}
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
-index feb470e8036ecfcd838cff05a0dc1d43cc96ae3c..6b6340ae8ca3f81f08f9038b63ebc419e003cf6b 100644
+index dc88014c4d9f172cc54e5d77b488128f9ffbc73d..6379b3b8e633d1a16532b4664e53fa5afa616ab6 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -681,7 +681,7 @@ public class Explosion {
@@ -1824,7 +1824,7 @@ index feb470e8036ecfcd838cff05a0dc1d43cc96ae3c..6b6340ae8ca3f81f08f9038b63ebc419
List> list = new ArrayList();
Util.shuffle(this.toBlow, this.level.random);
-@@ -757,7 +757,7 @@ public class Explosion {
+@@ -759,7 +759,7 @@ public class Explosion {
Block.popResource(this.level, (BlockPos) pair.getSecond(), (ItemStack) pair.getFirst());
}
diff --git a/patches/server/0261-Configurable-block-fall-damage-modifiers.patch b/patches/server/0261-Configurable-block-fall-damage-modifiers.patch
index 6e17a0724..de16399e5 100644
--- a/patches/server/0261-Configurable-block-fall-damage-modifiers.patch
+++ b/patches/server/0261-Configurable-block-fall-damage-modifiers.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable block fall damage modifiers
diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java
-index 9084e11df829fb24489773d15435a3a3570135fe..fe37651b9d5a1f786944c39de0c8a438951b4303 100644
+index 2590eee0ca6a35fad3351dd6112aa596107fbe8f..a4bae9631acfc363d22b89fb76965183d9dc79f1 100644
--- a/src/main/java/net/minecraft/world/level/block/BedBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java
-@@ -182,7 +182,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
+@@ -180,7 +180,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
@Override
public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) {