001 package org.bukkit.material; 002 003 import org.bukkit.Material; 004 import org.bukkit.TreeSpecies; 005 import org.bukkit.block.BlockFace; 006 007 /** 008 * Represents the different types of Trees. 009 */ 010 public class Tree extends MaterialData { 011 public Tree() { 012 super(Material.LOG); 013 } 014 015 public Tree(TreeSpecies species) { 016 this(); 017 setSpecies(species); 018 } 019 020 public Tree(TreeSpecies species, BlockFace dir) { 021 this(); 022 setSpecies(species); 023 setDirection(dir); 024 } 025 026 /** 027 * 028 * @deprecated Magic value 029 */ 030 @Deprecated 031 public Tree(final int type) { 032 super(type); 033 } 034 035 public Tree(final Material type) { 036 super(type); 037 } 038 039 /** 040 * 041 * @deprecated Magic value 042 */ 043 @Deprecated 044 public Tree(final int type, final byte data) { 045 super(type, data); 046 } 047 048 /** 049 * 050 * @deprecated Magic value 051 */ 052 @Deprecated 053 public Tree(final Material type, final byte data) { 054 super(type, data); 055 } 056 057 /** 058 * Gets the current species of this tree 059 * 060 * @return TreeSpecies of this tree 061 */ 062 public TreeSpecies getSpecies() { 063 return TreeSpecies.getByData((byte) (getData() & 0x3)); 064 } 065 066 /** 067 * Sets the species of this tree 068 * 069 * @param species New species of this tree 070 */ 071 public void setSpecies(TreeSpecies species) { 072 setData((byte) ((getData() & 0xC) | species.getData())); 073 } 074 075 /** 076 * Get direction of the log 077 * 078 * @return one of: 079 * <ul> 080 * <li>BlockFace.TOP for upright (default) 081 * <li>BlockFace.NORTH (east-west) 082 * <li>BlockFace.WEST (north-south) 083 * <li>BlockFace.SELF (directionless) 084 * </ul> 085 */ 086 public BlockFace getDirection() { 087 switch ((getData() >> 2) & 0x3) { 088 case 0: // Up-down 089 default: 090 return BlockFace.UP; 091 case 1: // North-south 092 return BlockFace.WEST; 093 case 2: // East-west 094 return BlockFace.NORTH; 095 case 3: // Directionless (bark on all sides) 096 return BlockFace.SELF; 097 } 098 } 099 /** 100 * Set direction of the log 101 * 102 * @param dir - direction of end of log (BlockFace.SELF for no direction) 103 */ 104 public void setDirection(BlockFace dir) { 105 int dat; 106 switch (dir) { 107 case UP: 108 case DOWN: 109 default: 110 dat = 0; 111 break; 112 case WEST: 113 case EAST: 114 dat = 1; 115 break; 116 case NORTH: 117 case SOUTH: 118 dat = 2; 119 break; 120 case SELF: 121 dat = 3; 122 break; 123 } 124 setData((byte) ((getData() & 0x3) | (dat << 2))); 125 } 126 127 @Override 128 public String toString() { 129 return getSpecies() + " " + getDirection() + " " + super.toString(); 130 } 131 132 @Override 133 public Tree clone() { 134 return (Tree) super.clone(); 135 } 136 }