|
|
|
@ -5,53 +5,57 @@ 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 8795c94e6b6474addddbb0b337a962e8fac46b2b..2848cb7c76e94d8349f042dc92daf01322a6ce5a 100644
|
|
|
|
|
index 72d62387bfdcbf8e69fe433145be81fbe3bb051a..93a1e990b0a6caae4143c2f9d09bfb368fa1d6db 100644
|
|
|
|
|
--- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java
|
|
|
|
|
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
|
|
|
|
|
@@ -74,6 +74,7 @@ public class DamageSource {
|
|
|
|
|
@@ -52,6 +52,7 @@ public class DamageSource {
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
// Paper end
|
|
|
|
|
// CraftBukkit end
|
|
|
|
|
+ public @Nullable org.bukkit.block.BlockState explodedBlockState; // Paper - add exploded state
|
|
|
|
|
|
|
|
|
|
public static DamageSource fallingBlock(Entity attacker) {
|
|
|
|
|
return (new EntityDamageSource("fallingBlock", attacker)).damageHelmet();
|
|
|
|
|
@@ -147,8 +148,16 @@ public class DamageSource {
|
|
|
|
|
return (new EntityDamageSource("sonic_boom", attacker)).bypassArmor().bypassEnchantments().setMagic();
|
|
|
|
|
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 6d46908692637ace5d81a9948f5ed42e142f549a..d3d9bb2cdcaa3d671370ee3014341fe741275743 100644
|
|
|
|
|
--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java
|
|
|
|
|
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java
|
|
|
|
|
@@ -243,7 +243,16 @@ public class DamageSources {
|
|
|
|
|
return this.source(DamageTypes.SONIC_BOOM, attacker);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper
|
|
|
|
|
public static DamageSource badRespawnPointExplosion(Vec3 pos) {
|
|
|
|
|
- return new BadRespawnPointDamage(pos);
|
|
|
|
|
public DamageSource badRespawnPointExplosion(Vec3 position) {
|
|
|
|
|
- return new DamageSource(this.damageTypes.getHolderOrThrow(DamageTypes.BAD_RESPAWN_POINT), position);
|
|
|
|
|
+ // Paper start
|
|
|
|
|
+ return badRespawnPointExplosion(pos, null);
|
|
|
|
|
+ return this.badRespawnPointExplosion(position, null);
|
|
|
|
|
+ }
|
|
|
|
|
+ public static DamageSource badRespawnPointExplosion(Vec3 pos, @Nullable org.bukkit.block.BlockState explodedBlockState) {
|
|
|
|
|
+ DamageSource source = new BadRespawnPointDamage(pos);
|
|
|
|
|
+
|
|
|
|
|
+ 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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String toString() {
|
|
|
|
|
}
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
|
|
|
|
|
index 4a7733c259d75bf2b3ea559fd4eba398bc56195d..5ef6b5ad4dd69a57595914c7af8422ee2f6ad054 100644
|
|
|
|
|
index ff2ea0ae47fb6e083cf7dbb992d59416067b5c7d..59837144c2c0460aca6e8c349eb3d6528111d1dc 100644
|
|
|
|
|
--- a/src/main/java/net/minecraft/world/level/Explosion.java
|
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
|
|
|
|
|
@@ -334,7 +334,7 @@ public class Explosion {
|
|
|
|
|
@@ -343,7 +343,7 @@ 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); // Paper - fix explosion yield with new gamerules
|
|
|
|
|
+ BlockExplodeEvent event = new BlockExplodeEvent(location.getBlock(), blockList, this.blockInteraction == Explosion.BlockInteraction.DESTROY_WITH_DECAY ? 1.0F / this.radius : 1.0F, this.damageSource.explodedBlockState); // Paper - fix explosion yield with new gamerules & exploded block state
|
|
|
|
|
- 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 f1a7c5202d4efbfaf5d88609d243f25f6817ecbe..64e68bf6decc765274caaabfd34a5b2d7d82434c 100644
|
|
|
|
|
index 002575ac14697572602e3f622b7ed1c93eca04c3..96434f14525a2159f335b94aad95081f488fadf3 100644
|
|
|
|
|
--- a/src/main/java/net/minecraft/world/level/block/BedBlock.java
|
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java
|
|
|
|
|
@@ -88,6 +88,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
|
|
|
|
@@ -87,6 +87,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
|
|
|
|
|
|
|
|
|
// CraftBukkit - moved world and biome check into EntityHuman
|
|
|
|
|
if (false && !BedBlock.canSetSpawn(world)) {
|
|
|
|
@ -59,16 +63,16 @@ index f1a7c5202d4efbfaf5d88609d243f25f6817ecbe..64e68bf6decc765274caaabfd34a5b2d
|
|
|
|
|
world.removeBlock(pos, false);
|
|
|
|
|
BlockPos blockposition1 = pos.relative(((Direction) state.getValue(BedBlock.FACING)).getOpposite());
|
|
|
|
|
|
|
|
|
|
@@ -97,7 +98,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
|
|
|
|
@@ -96,7 +97,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
|
|
|
|
|
|
|
|
|
Vec3 vec3d = pos.getCenter();
|
|
|
|
|
|
|
|
|
|
- world.explode((Entity) null, DamageSource.badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK);
|
|
|
|
|
+ world.explode((Entity) null, DamageSource.badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // Paper - exploded block state
|
|
|
|
|
- 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)) {
|
|
|
|
|
@@ -139,6 +140,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
|
|
|
|
@@ -138,6 +139,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
|
|
|
|
private InteractionResult explodeBed(BlockState iblockdata, Level world, BlockPos blockposition) {
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
@ -76,20 +80,20 @@ index f1a7c5202d4efbfaf5d88609d243f25f6817ecbe..64e68bf6decc765274caaabfd34a5b2d
|
|
|
|
|
world.removeBlock(blockposition, false);
|
|
|
|
|
BlockPos blockposition1 = blockposition.relative(((Direction) iblockdata.getValue(BedBlock.FACING)).getOpposite());
|
|
|
|
|
|
|
|
|
|
@@ -148,7 +150,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
|
|
|
|
@@ -147,7 +149,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
|
|
|
|
|
|
|
|
|
Vec3 vec3d = blockposition.getCenter();
|
|
|
|
|
|
|
|
|
|
- world.explode((Entity) null, DamageSource.badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK);
|
|
|
|
|
+ world.explode((Entity) null, DamageSource.badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // Paper - exploded block state
|
|
|
|
|
- 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 53b35f003034e7f4c9dd8ccfaf77389163009453..1b7140ffab0492ab130743a2d158b30efb2cfece 100644
|
|
|
|
|
index 16f23ecffa52925904d585f3fed76aa61bac5f9d..bcea8af63b9911c36873290e5c34567b1eeaacf4 100644
|
|
|
|
|
--- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java
|
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java
|
|
|
|
|
@@ -113,6 +113,7 @@ public class RespawnAnchorBlock extends Block {
|
|
|
|
|
@@ -114,6 +114,7 @@ public class RespawnAnchorBlock extends Block {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void explode(BlockState state, Level world, final BlockPos explodedPos) {
|
|
|
|
@ -97,20 +101,20 @@ index 53b35f003034e7f4c9dd8ccfaf77389163009453..1b7140ffab0492ab130743a2d158b30e
|
|
|
|
|
world.removeBlock(explodedPos, false);
|
|
|
|
|
boolean bl = Direction.Plane.HORIZONTAL.stream().map(explodedPos::relative).anyMatch((pos) -> {
|
|
|
|
|
return isWaterThatWouldFlow(pos, world);
|
|
|
|
|
@@ -125,7 +126,7 @@ public class RespawnAnchorBlock extends Block {
|
|
|
|
|
@@ -126,7 +127,7 @@ public class RespawnAnchorBlock extends Block {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
Vec3 vec3 = explodedPos.getCenter();
|
|
|
|
|
- world.explode((Entity)null, DamageSource.badRespawnPointExplosion(vec3), explosionDamageCalculator, vec3, 5.0F, true, Level.ExplosionInteraction.BLOCK);
|
|
|
|
|
+ world.explode((Entity)null, DamageSource.badRespawnPointExplosion(vec3, explodedBlockState), explosionDamageCalculator, vec3, 5.0F, true, Level.ExplosionInteraction.BLOCK); // Paper - exploded block state
|
|
|
|
|
- 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 d3f66bc8c9fa18322bd025fac2793456a5200717..4d6f2b9b063b4b5accfe9fe1e6c230f114451d23 100644
|
|
|
|
|
index 1caa329567b50a962c54bb00c79cc98e4f2724c8..9215297d5f7856ef3f03ebcbf866c5b59048ba30 100644
|
|
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
|
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
|
|
|
|
|
@@ -267,6 +267,12 @@ public final class CraftBlockStates {
|
|
|
|
|
@@ -271,6 +271,12 @@ public final class CraftBlockStates {
|
|
|
|
|
BlockEntity tileEntity = (blockEntityTag == null) ? null : BlockEntity.loadStatic(blockPosition, blockData, blockEntityTag);
|
|
|
|
|
return CraftBlockStates.getBlockState(null, blockPosition, blockData, tileEntity);
|
|
|
|
|
}
|