Solved Prevent player from interacting with bed

Discussion in 'Plugin Development' started by Yeowza, Feb 19, 2020.

Thread Status:
Not open for further replies.
  1. Offline

    Yeowza

    Whenever a player right clicks a bed it will set the respawn point and it notifies the user in chat. Is there a way to disable that?

    I tried cancelling the PlayerInteractEvent and PlayerBedEnterEvents but it doesn't get rid of the text or prevents the respawn location from being set.
     
  2. Offline

    KarimAKL

    @Yeowza I don't remember if that happens in vanilla but, if it's a plugin that does it, it probably doesn't check for the event being cancelled.
     
  3. Offline

    Xp10d3

    Huh. Well there are probably ways around it. I think I fixed the PlayerInteractEvent with breaking the bed if that's what you want.
    Code:
    package package.name.idk;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.player.PlayerBedEnterEvent;
    
    public class PlayerListeners implements Listener {
        @EventHandler
        public void onSleep(PlayerBedEnterEvent event) {
            Player player = event.getPlayer();
            event.setCancelled(true);
            player.sendMessage(ChatColor.RED + "You can't sleep!");
        }
       
        @EventHandler
        public void onBedBreak(BlockBreakEvent event) {
            Block block = event.getBlock();
            if (block.getType() == Material.BLACK_BED || block.getType() == Material.BLUE_BED || block.getType() == Material.BROWN_BED || block.getType() == Material.CYAN_BED || block.getType() == Material.GRAY_BED || block.getType() == Material.GREEN_BED) {
                Player player = event.getPlayer();
                event.setCancelled(true);
                player.sendMessage(ChatColor.RED + "You can't sleep!");
            }
        }
    }
    
     
  4. Offline

    Yeowza

    Thanks Xp10d3, I was being stupid, it works lol.
     
  5. Offline

    Xp10d3

    Np :)
     
  6. Offline

    KarimAKL

    You should check the blockstate instead, like this:
    Code:Java
    1. Block block = event.getBlock();
    2. if (block.getState() instanceof Bed) {
    3. // It's a bed
    4. }
     
  7. Offline

    Xp10d3

    Oh whoops. Thanks for the tip :) EDIT @KarimAKL "Bed" is deprecated.
     
  8. Offline

    KarimAKL

    @Xp10d3 It'll probably still work, although i think BlockData is the non-deprecated version.
    Code:Java
    1. Block block = event.getBlock();
    2. if (block.getBlockData() instanceof Bed) {
    3. // It's a bed
    4. }

    Do note that it's now org.bukkit.block.data.type.Bed instead of org.bukkit.block.Bed.
     
  9. Offline

    Xp10d3

    Oh lol whoops. I did org.bukkit.block.bed xD
     
Thread Status:
Not open for further replies.

Share This Page