diff --git a/patches/server/Add-exploded-block-state-to-BlockExplodeEvent.patch b/patches/server/Add-exploded-block-state-to-BlockExplodeEvent.patch new file mode 100644 index 0000000000..1020485044 --- /dev/null +++ b/patches/server/Add-exploded-block-state-to-BlockExplodeEvent.patch @@ -0,0 +1,129 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Fri, 22 Oct 2021 16:25:07 -0700 +Subject: [PATCH] Add exploded block state to BlockExplodeEvent + + +diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java ++++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java +@@ -0,0 +0,0 @@ public class DamageSource { + return this; + } + // CraftBukkit end ++ public @Nullable org.bukkit.block.BlockState explodedBlockState; // Paper - add exploded state + + public String toString() { + return "DamageSource (" + this.type().msgId() + ")"; +diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java ++++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +@@ -0,0 +0,0 @@ public class DamageSources { + return this.source(DamageTypes.SONIC_BOOM, attacker); + } + ++ @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper + public DamageSource badRespawnPointExplosion(Vec3 position) { +- return new DamageSource(this.damageTypes.getHolderOrThrow(DamageTypes.BAD_RESPAWN_POINT), position); ++ // Paper start ++ return this.badRespawnPointExplosion(position, null); ++ } ++ ++ public DamageSource badRespawnPointExplosion(Vec3 position, @Nullable org.bukkit.block.BlockState explodedBlockState) { ++ DamageSource source = new DamageSource(this.damageTypes.getHolderOrThrow(DamageTypes.BAD_RESPAWN_POINT), position); ++ source.explodedBlockState = explodedBlockState; ++ return source; ++ // Paper end + } + } +diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/world/level/Explosion.java ++++ b/src/main/java/net/minecraft/world/level/Explosion.java +@@ -0,0 +0,0 @@ public class Explosion { + bukkitBlocks = event.blockList(); + yield = event.getYield(); + } else { +- BlockExplodeEvent event = new BlockExplodeEvent(location.getBlock(), blockList, this.blockInteraction == Explosion.BlockInteraction.DESTROY_WITH_DECAY ? 1.0F / this.radius : 1.0F); ++ BlockExplodeEvent event = new BlockExplodeEvent(location.getBlock(), blockList, this.blockInteraction == Explosion.BlockInteraction.DESTROY_WITH_DECAY ? 1.0F / this.radius : 1.0F, this.damageSource.explodedBlockState); // Paper - exploded block state + this.level.getCraftServer().getPluginManager().callEvent(event); + cancelled = event.isCancelled(); + bukkitBlocks = event.blockList(); +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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/world/level/block/BedBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java +@@ -0,0 +0,0 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock + + // CraftBukkit - moved world and biome check into EntityHuman + if (false && !BedBlock.canSetSpawn(world)) { ++ final org.bukkit.block.BlockState explodedBlockState = org.bukkit.craftbukkit.block.CraftBlockStates.getUnplacedBlockState(world, pos, state); // Paper - exploded block state (this won't be called due to the false, but it's good for reference) + world.removeBlock(pos, false); + BlockPos blockposition1 = pos.relative(((Direction) state.getValue(BedBlock.FACING)).getOpposite()); + +@@ -0,0 +0,0 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock + + Vec3 vec3d = pos.getCenter(); + +- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); ++ world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); + return InteractionResult.SUCCESS; + } else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) { + if (!this.kickVillagerOutOfBed(world, pos)) { +@@ -0,0 +0,0 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock + private InteractionResult explodeBed(BlockState iblockdata, Level world, BlockPos blockposition) { + { + { ++ final org.bukkit.block.BlockState explodedBlockState = org.bukkit.craftbukkit.block.CraftBlockStates.getUnplacedBlockState(world, blockposition, iblockdata); // Paper - exploded block state + world.removeBlock(blockposition, false); + BlockPos blockposition1 = blockposition.relative(((Direction) iblockdata.getValue(BedBlock.FACING)).getOpposite()); + +@@ -0,0 +0,0 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock + + Vec3 vec3d = blockposition.getCenter(); + +- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); ++ world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); + return InteractionResult.SUCCESS; + } + } +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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java +@@ -0,0 +0,0 @@ public class RespawnAnchorBlock extends Block { + } + + private void explode(BlockState state, Level world, final BlockPos explodedPos) { ++ final org.bukkit.block.BlockState explodedBlockState = org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(explodedPos, state, null); // Paper - exploded block state + world.removeBlock(explodedPos, false); + boolean bl = Direction.Plane.HORIZONTAL.stream().map(explodedPos::relative).anyMatch((pos) -> { + return isWaterThatWouldFlow(pos, world); +@@ -0,0 +0,0 @@ public class RespawnAnchorBlock extends Block { + } + }; + Vec3 vec3 = explodedPos.getCenter(); +- world.explode((Entity)null, world.damageSources().badRespawnPointExplosion(vec3), explosionDamageCalculator, vec3, 5.0F, true, Level.ExplosionInteraction.BLOCK); ++ world.explode((Entity)null, world.damageSources().badRespawnPointExplosion(vec3, explodedBlockState), explosionDamageCalculator, vec3, 5.0F, true, Level.ExplosionInteraction.BLOCK); + } + + public static boolean canSetSpawn(Level world) { +diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java +@@ -0,0 +0,0 @@ public final class CraftBlockStates { + BlockEntity tileEntity = (blockEntityTag == null) ? null : BlockEntity.loadStatic(blockPosition, blockData, blockEntityTag); + return CraftBlockStates.getBlockState(null, blockPosition, blockData, tileEntity); + } ++ // Paper start ++ public static BlockState getUnplacedBlockState(net.minecraft.world.level.BlockGetter levelAccessor, BlockPos blockPos, net.minecraft.world.level.block.state.BlockState blockData) { ++ BlockEntity tileEntity = levelAccessor.getBlockEntity(blockPos); ++ return CraftBlockStates.getBlockState(null, blockPos, blockData, tileEntity); ++ } ++ // Paper end + + // See BlockStateFactory#createBlockState(World, BlockPosition, IBlockData, TileEntity) + private static CraftBlockState getBlockState(World world, BlockPos blockPosition, net.minecraft.world.level.block.state.BlockState blockData, BlockEntity tileEntity) { diff --git a/patches/server/Adventure.patch b/patches/server/Adventure.patch index a6538ccb78..50cd8e1ffa 100644 --- a/patches/server/Adventure.patch +++ b/patches/server/Adventure.patch @@ -2570,22 +2570,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 return message.hasSignature() && !message.hasExpiredServer(Instant.now()); } -diff --git a/src/main/java/net/minecraft/util/ExtraCodecs.java b/src/main/java/net/minecraft/util/ExtraCodecs.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/util/ExtraCodecs.java -+++ b/src/main/java/net/minecraft/util/ExtraCodecs.java -@@ -0,0 +0,0 @@ public class ExtraCodecs { - } - }, (text) -> { - try { -+ // Paper start -+ if (text instanceof io.papermc.paper.adventure.AdventureComponent adventureComponent) { -+ return DataResult.success(net.kyori.adventure.text.serializer.gson.GsonComponentSerializer.gson().serializeToTree(adventureComponent.adventure$component())); -+ } -+ // Paper end - return DataResult.success(Component.Serializer.toJsonTree(text)); - } catch (IllegalArgumentException var2) { - return DataResult.error(var2::getMessage); diff --git a/src/main/java/net/minecraft/world/BossEvent.java b/src/main/java/net/minecraft/world/BossEvent.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/BossEvent.java diff --git a/patches/server/MC-Dev-fixes.patch b/patches/server/MC-Dev-fixes.patch index 0745a0bc4c..0ae0fb5310 100644 --- a/patches/server/MC-Dev-fixes.patch +++ b/patches/server/MC-Dev-fixes.patch @@ -119,19 +119,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } } -diff --git a/src/main/java/net/minecraft/util/ExtraCodecs.java b/src/main/java/net/minecraft/util/ExtraCodecs.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/util/ExtraCodecs.java -+++ b/src/main/java/net/minecraft/util/ExtraCodecs.java -@@ -0,0 +0,0 @@ public class ExtraCodecs { - }, (pair) -> { - return ImmutableList.of(leftFunction.apply(pair), rightFunction.apply(pair)); - }); -- Codec codec3 = RecordCodecBuilder.create((instance) -> { -+ Codec codec3 = RecordCodecBuilder.>create((instance) -> { // Paper - decompile fix - return instance.group(codec.fieldOf(leftFieldName).forGetter(Pair::getFirst), codec.fieldOf(rightFieldName).forGetter(Pair::getSecond)).apply(instance, Pair::of); - }).comapFlatMap((pair) -> { - return combineFunction.apply((P)pair.getFirst(), (P)pair.getSecond()); diff --git a/src/main/java/net/minecraft/util/SortedArraySet.java b/src/main/java/net/minecraft/util/SortedArraySet.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/util/SortedArraySet.java diff --git a/patches/server/Remap-fixes.patch b/patches/server/Remap-fixes.patch index 2dc51bebfb..d1d3e16cd4 100644 --- a/patches/server/Remap-fixes.patch +++ b/patches/server/Remap-fixes.patch @@ -41,28 +41,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } } -diff --git a/src/main/java/net/minecraft/util/ExtraCodecs.java b/src/main/java/net/minecraft/util/ExtraCodecs.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/util/ExtraCodecs.java -+++ b/src/main/java/net/minecraft/util/ExtraCodecs.java -@@ -0,0 +0,0 @@ public class ExtraCodecs { - Optional> optional = dataResult.resultOrPartial(mutableObject::setValue); - return optional.isPresent() ? dataResult : DataResult.error(() -> { - return "(" + (String)mutableObject.getValue() + " -> using default)"; -- }, Pair.of(object, object)); -+ }, Pair.of(object, objectx)); // Paper - remapping fix - } - - public DataResult coApply(DynamicOps dynamicOps, A objectx, DataResult dataResult) { -@@ -0,0 +0,0 @@ public class ExtraCodecs { - - static record LazyInitializedCodec(Supplier> delegate) implements Codec { - LazyInitializedCodec { -- supplier = Suppliers.memoize(supplier::get); -+ delegate = Suppliers.memoize(delegate::get); // Paper - remapping fix - } - - public DataResult> decode(DynamicOps dynamicOps, T object) { diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java b/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java