001 package net.minecraft.src;
002
003 public class Material
004 {
005 public static final Material air = new MaterialTransparent(MapColor.airColor);
006
007 /** The material used by BlockGrass. */
008 public static final Material grass = new Material(MapColor.grassColor);
009 public static final Material ground = new Material(MapColor.dirtColor);
010 public static final Material wood = (new Material(MapColor.woodColor)).setBurning();
011 public static final Material rock = (new Material(MapColor.stoneColor)).setNoHarvest();
012 public static final Material iron = (new Material(MapColor.ironColor)).setNoHarvest();
013 public static final Material anvil = (new Material(MapColor.ironColor)).setNoHarvest().setImmovableMobility();
014 public static final Material water = (new MaterialLiquid(MapColor.waterColor)).setNoPushMobility();
015 public static final Material lava = (new MaterialLiquid(MapColor.tntColor)).setNoPushMobility();
016 public static final Material leaves = (new Material(MapColor.foliageColor)).setBurning().setTranslucent().setNoPushMobility();
017 public static final Material plants = (new MaterialLogic(MapColor.foliageColor)).setNoPushMobility();
018 public static final Material vine = (new MaterialLogic(MapColor.foliageColor)).setBurning().setNoPushMobility().setGroundCover();
019 public static final Material sponge = new Material(MapColor.clothColor);
020 public static final Material cloth = (new Material(MapColor.clothColor)).setBurning();
021 public static final Material fire = (new MaterialTransparent(MapColor.airColor)).setNoPushMobility();
022 public static final Material sand = new Material(MapColor.sandColor);
023 public static final Material circuits = (new MaterialLogic(MapColor.airColor)).setNoPushMobility();
024 public static final Material glass = (new Material(MapColor.airColor)).setTranslucent().func_85158_p();
025 public static final Material redstoneLight = (new Material(MapColor.airColor)).func_85158_p();
026 public static final Material tnt = (new Material(MapColor.tntColor)).setBurning().setTranslucent();
027 public static final Material field_76261_t = (new Material(MapColor.foliageColor)).setNoPushMobility();
028 public static final Material ice = (new Material(MapColor.iceColor)).setTranslucent().func_85158_p();
029 public static final Material snow = (new MaterialLogic(MapColor.snowColor)).setGroundCover().setTranslucent().setNoHarvest().setNoPushMobility();
030
031 /** The material for crafted snow. */
032 public static final Material craftedSnow = (new Material(MapColor.snowColor)).setNoHarvest();
033 public static final Material cactus = (new Material(MapColor.foliageColor)).setTranslucent().setNoPushMobility();
034 public static final Material clay = new Material(MapColor.clayColor);
035
036 /** pumpkin */
037 public static final Material pumpkin = (new Material(MapColor.foliageColor)).setNoPushMobility();
038 public static final Material dragonEgg = (new Material(MapColor.foliageColor)).setNoPushMobility();
039
040 /** Material used for portals */
041 public static final Material portal = (new MaterialPortal(MapColor.airColor)).setImmovableMobility();
042
043 /** Cake's material, see BlockCake */
044 public static final Material cake = (new Material(MapColor.airColor)).setNoPushMobility();
045
046 /** Web's material. */
047 public static final Material web = (new MaterialWeb(MapColor.clothColor)).setNoHarvest().setNoPushMobility();
048
049 /** Pistons' material. */
050 public static final Material piston = (new Material(MapColor.stoneColor)).setImmovableMobility();
051
052 /** Bool defining if the block can burn or not. */
053 private boolean canBurn;
054
055 /** Indicates if the material is a form of ground cover, e.g. Snow */
056 private boolean groundCover;
057
058 /** Indicates if the material is translucent */
059 private boolean isTranslucent;
060
061 /** The color index used to draw the blocks of this material on maps. */
062 public final MapColor materialMapColor;
063
064 /**
065 * Determines if the materials is one that can be collected by the player.
066 */
067 private boolean canHarvest = true;
068
069 /**
070 * Mobility information flag. 0 indicates that this block is normal, 1 indicates that it can't push other blocks, 2
071 * indicates that it can't be pushed.
072 */
073 private int mobilityFlag;
074 private boolean field_85159_M;
075
076 public Material(MapColor par1MapColor)
077 {
078 this.materialMapColor = par1MapColor;
079 }
080
081 /**
082 * Returns if blocks of these materials are liquids.
083 */
084 public boolean isLiquid()
085 {
086 return false;
087 }
088
089 public boolean isSolid()
090 {
091 return true;
092 }
093
094 /**
095 * Will prevent grass from growing on dirt underneath and kill any grass below it if it returns true
096 */
097 public boolean getCanBlockGrass()
098 {
099 return true;
100 }
101
102 /**
103 * Returns if this material is considered solid or not
104 */
105 public boolean blocksMovement()
106 {
107 return true;
108 }
109
110 /**
111 * Marks the material as translucent
112 */
113 private Material setTranslucent()
114 {
115 this.isTranslucent = true;
116 return this;
117 }
118
119 /**
120 * Disables the ability to harvest this material.
121 */
122 protected Material setNoHarvest()
123 {
124 this.canHarvest = false;
125 return this;
126 }
127
128 /**
129 * Set the canBurn bool to True and return the current object.
130 */
131 protected Material setBurning()
132 {
133 this.canBurn = true;
134 return this;
135 }
136
137 /**
138 * Returns if the block can burn or not.
139 */
140 public boolean getCanBurn()
141 {
142 return this.canBurn;
143 }
144
145 /**
146 * Sets the material as a form of ground cover, e.g. Snow
147 */
148 public Material setGroundCover()
149 {
150 this.groundCover = true;
151 return this;
152 }
153
154 /**
155 * Return whether the material is a form of ground cover, e.g. Snow
156 */
157 public boolean isGroundCover()
158 {
159 return this.groundCover;
160 }
161
162 /**
163 * Indicate if the material is opaque
164 */
165 public boolean isOpaque()
166 {
167 return this.isTranslucent ? false : this.blocksMovement();
168 }
169
170 /**
171 * Returns true if material can be harvested by player.
172 */
173 public boolean isHarvestable()
174 {
175 return this.canHarvest;
176 }
177
178 /**
179 * Returns the mobility information of the material, 0 = free, 1 = can't push but can move over, 2 = total
180 * immobility and stop pistons.
181 */
182 public int getMaterialMobility()
183 {
184 return this.mobilityFlag;
185 }
186
187 /**
188 * This type of material can't be pushed, but pistons can move over it.
189 */
190 protected Material setNoPushMobility()
191 {
192 this.mobilityFlag = 1;
193 return this;
194 }
195
196 /**
197 * This type of material can't be pushed, and pistons are blocked to move.
198 */
199 protected Material setImmovableMobility()
200 {
201 this.mobilityFlag = 2;
202 return this;
203 }
204
205 protected Material func_85158_p()
206 {
207 this.field_85159_M = true;
208 return this;
209 }
210
211 public boolean func_85157_q()
212 {
213 return this.field_85159_M;
214 }
215 }