001 package org.bukkit.material; 002 003 import org.bukkit.Material; 004 import org.bukkit.block.BlockFace; 005 006 /** 007 * Represents a bed. 008 */ 009 public class Bed extends MaterialData implements Directional { 010 011 /** 012 * Default constructor for a bed. 013 */ 014 public Bed() { 015 super(Material.BED_BLOCK); 016 } 017 018 /** 019 * Instantiate a bed facing in a particular direction. 020 * 021 * @param direction the direction the bed's head is facing 022 */ 023 public Bed(BlockFace direction) { 024 this(); 025 setFacingDirection(direction); 026 } 027 028 /** 029 * 030 * @deprecated Magic value 031 */ 032 @Deprecated 033 public Bed(final int type) { 034 super(type); 035 } 036 037 public Bed(final Material type) { 038 super(type); 039 } 040 041 /** 042 * 043 * @deprecated Magic value 044 */ 045 @Deprecated 046 public Bed(final int type, final byte data) { 047 super(type, data); 048 } 049 050 /** 051 * 052 * @deprecated Magic value 053 */ 054 @Deprecated 055 public Bed(final Material type, final byte data) { 056 super(type, data); 057 } 058 059 /** 060 * Determine if this block represents the head of the bed 061 * 062 * @return true if this is the head of the bed, false if it is the foot 063 */ 064 public boolean isHeadOfBed() { 065 return (getData() & 0x8) == 0x8; 066 } 067 068 /** 069 * Configure this to be either the head or the foot of the bed 070 * 071 * @param isHeadOfBed True to make it the head. 072 */ 073 public void setHeadOfBed(boolean isHeadOfBed) { 074 setData((byte) (isHeadOfBed ? (getData() | 0x8) : (getData() & ~0x8))); 075 } 076 077 /** 078 * Set which direction the head of the bed is facing. Note that this will 079 * only affect one of the two blocks the bed is made of. 080 */ 081 public void setFacingDirection(BlockFace face) { 082 byte data; 083 084 switch (face) { 085 case SOUTH: 086 data = 0x0; 087 break; 088 089 case WEST: 090 data = 0x1; 091 break; 092 093 case NORTH: 094 data = 0x2; 095 break; 096 097 case EAST: 098 default: 099 data = 0x3; 100 } 101 102 if (isHeadOfBed()) { 103 data |= 0x8; 104 } 105 106 setData(data); 107 } 108 109 /** 110 * Get the direction that this bed's head is facing toward 111 * 112 * @return the direction the head of the bed is facing 113 */ 114 public BlockFace getFacing() { 115 byte data = (byte) (getData() & 0x7); 116 117 switch (data) { 118 case 0x0: 119 return BlockFace.SOUTH; 120 121 case 0x1: 122 return BlockFace.WEST; 123 124 case 0x2: 125 return BlockFace.NORTH; 126 127 case 0x3: 128 default: 129 return BlockFace.EAST; 130 } 131 } 132 133 @Override 134 public String toString() { 135 return (isHeadOfBed() ? "HEAD" : "FOOT") + " of " + super.toString() + " facing " + getFacing(); 136 } 137 138 @Override 139 public Bed clone() { 140 return (Bed) super.clone(); 141 } 142 }