001 package org.bukkit.material;
002
003 import java.util.List;
004
005 import org.bukkit.Material;
006
007 /**
008 * Represents textured materials like steps and smooth bricks
009 */
010 public abstract class TexturedMaterial extends MaterialData {
011
012 public TexturedMaterial(Material m) {
013 super(m);
014 }
015
016 /**
017 *
018 * @deprecated Magic value
019 */
020 @Deprecated
021 public TexturedMaterial(int type) {
022 super(type);
023 }
024
025 /**
026 *
027 * @deprecated Magic value
028 */
029 @Deprecated
030 public TexturedMaterial(final int type, final byte data) {
031 super(type, data);
032 }
033
034 /**
035 *
036 * @deprecated Magic value
037 */
038 @Deprecated
039 public TexturedMaterial(final Material type, final byte data) {
040 super(type, data);
041 }
042
043 /**
044 * Retrieve a list of possible textures. The first element of the list
045 * will be used as a default.
046 *
047 * @return a list of possible textures for this block
048 */
049 public abstract List<Material> getTextures();
050
051 /**
052 * Gets the current Material this block is made of
053 *
054 * @return Material of this block
055 */
056 public Material getMaterial() {
057 int n = getTextureIndex();
058 if (n > getTextures().size() - 1) {
059 n = 0;
060 }
061
062 return getTextures().get(n);
063 }
064
065 /**
066 * Sets the material this block is made of
067 *
068 * @param material
069 * New material of this block
070 */
071 public void setMaterial(Material material) {
072 if (getTextures().contains(material)) {
073 setTextureIndex(getTextures().indexOf(material));
074 } else {
075 setTextureIndex(0x0);
076 }
077 }
078
079 /**
080 * Get material index from data
081 *
082 * @return index of data in textures list
083 * @deprecated Magic value
084 */
085 @Deprecated
086 protected int getTextureIndex() {
087 return getData(); // Default to using all bits - override for other mappings
088 }
089
090 /**
091 * Set material index
092 *
093 * @param idx - index of data in textures list
094 * @deprecated Magic value
095 */
096 @Deprecated
097 protected void setTextureIndex(int idx) {
098 setData((byte) idx); // Defult to using all bits - override for other mappings
099 }
100
101 @Override
102 public String toString() {
103 return getMaterial() + " " + super.toString();
104 }
105
106 @Override
107 public TexturedMaterial clone() {
108 return (TexturedMaterial) super.clone();
109 }
110 }