From 472880fddebed31963fffbe279041f32c4060fb9 Mon Sep 17 00:00:00 2001 From: Jake Potrebic <jake.m.potrebic@gmail.com> Date: Thu, 24 Dec 2020 12:27:41 -0800 Subject: [PATCH] Add PlayerBedFailEnterEvent --- .../world/level/block/BedBlock.java.patch | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/BedBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/BedBlock.java.patch index dbf5cec248..c1dbda1c23 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/BedBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/BedBlock.java.patch @@ -10,7 +10,7 @@ world.removeBlock(pos, false); BlockPos blockposition1 = pos.relative(((Direction) state.getValue(BedBlock.FACING)).getOpposite()); -@@ -114,7 +115,16 @@ +@@ -114,19 +115,59 @@ return InteractionResult.SUCCESS_SERVER; } else { @@ -19,18 +19,31 @@ + BlockPos finalblockposition = pos; + // CraftBukkit end player.startSleepInBed(pos).ifLeft((entityhuman_enumbedresult) -> { ++ // Paper start - PlayerBedFailEnterEvent ++ if (entityhuman_enumbedresult != null) { ++ io.papermc.paper.event.player.PlayerBedFailEnterEvent event = new io.papermc.paper.event.player.PlayerBedFailEnterEvent((org.bukkit.entity.Player) player.getBukkitEntity(), io.papermc.paper.event.player.PlayerBedFailEnterEvent.FailReason.values()[entityhuman_enumbedresult.ordinal()], org.bukkit.craftbukkit.block.CraftBlock.at(world, finalblockposition), !world.dimensionType().bedWorks(), io.papermc.paper.adventure.PaperAdventure.asAdventure(entityhuman_enumbedresult.getMessage())); ++ if (!event.callEvent()) { ++ return; ++ } ++ // Paper end - PlayerBedFailEnterEvent + // CraftBukkit start - handling bed explosion from below here -+ if (!world.dimensionType().bedWorks()) { ++ if (event.getWillExplode()) { // Paper - PlayerBedFailEnterEvent + this.explodeBed(finaliblockdata, world, finalblockposition); + } else + // CraftBukkit end if (entityhuman_enumbedresult.getMessage() != null) { - player.displayClientMessage(entityhuman_enumbedresult.getMessage(), true); +- player.displayClientMessage(entityhuman_enumbedresult.getMessage(), true); ++ final net.kyori.adventure.text.Component message = event.getMessage(); // Paper - PlayerBedFailEnterEvent ++ if (message != null) player.displayClientMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(message), true); // Paper - PlayerBedFailEnterEvent } -@@ -125,8 +135,30 @@ - } - } ++ } // Paper - PlayerBedFailEnterEvent + }); + return InteractionResult.SUCCESS_SERVER; ++ } ++ } ++ } ++ + // CraftBukkit start + private InteractionResult explodeBed(BlockState iblockdata, Level world, BlockPos blockposition) { + { @@ -47,11 +60,11 @@ + + world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, blockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state + return InteractionResult.SUCCESS; -+ } -+ } -+ } + } + } + } + // CraftBukkit end -+ + public static boolean canSetSpawn(Level world) { - return world.dimensionType().bedWorks(); + // CraftBukkit - moved world and biome check into EntityHuman @@ -59,7 +72,7 @@ } private boolean kickVillagerOutOfBed(Level world, BlockPos pos) { -@@ -320,6 +352,11 @@ +@@ -320,6 +361,11 @@ BlockPos blockposition1 = pos.relative((Direction) state.getValue(BedBlock.FACING)); world.setBlock(blockposition1, (BlockState) state.setValue(BedBlock.PART, BedPart.HEAD), 3);