001 package net.minecraft.block.material;
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)).setRequiresTool();
012 public static final Material iron = (new Material(MapColor.ironColor)).setRequiresTool();
013 public static final Material anvil = (new Material(MapColor.ironColor)).setRequiresTool().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().setReplaceable();
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 coral = (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)).setReplaceable().setTranslucent().setRequiresTool().setNoPushMobility();
030
031 /** The material for crafted snow. */
032 public static final Material craftedSnow = (new Material(MapColor.snowColor)).setRequiresTool();
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)).setRequiresTool().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 /**
056 * Determines whether blocks with this material can be "overwritten" by other blocks when placed - eg snow, vines
057 * and tall grass.
058 */
059 private boolean replaceable;
060
061 /** Indicates if the material is translucent */
062 private boolean isTranslucent;
063
064 /** The color index used to draw the blocks of this material on maps. */
065 public final MapColor materialMapColor;
066
067 /**
068 * Determines if the material can be harvested without a tool (or with the wrong tool)
069 */
070 private boolean requiresNoTool = true;
071
072 /**
073 * Mobility information flag. 0 indicates that this block is normal, 1 indicates that it can't push other blocks, 2
074 * indicates that it can't be pushed.
075 */
076 private int mobilityFlag;
077 private boolean field_85159_M;
078
079 public Material(MapColor par1MapColor)
080 {
081 this.materialMapColor = par1MapColor;
082 }
083
084 /**
085 * Returns if blocks of these materials are liquids.
086 */
087 public boolean isLiquid()
088 {
089 return false;
090 }
091
092 public boolean isSolid()
093 {
094 return true;
095 }
096
097 /**
098 * Will prevent grass from growing on dirt underneath and kill any grass below it if it returns true
099 */
100 public boolean getCanBlockGrass()
101 {
102 return true;
103 }
104
105 /**
106 * Returns if this material is considered solid or not
107 */
108 public boolean blocksMovement()
109 {
110 return true;
111 }
112
113 /**
114 * Marks the material as translucent
115 */
116 private Material setTranslucent()
117 {
118 this.isTranslucent = true;
119 return this;
120 }
121
122 /**
123 * Makes blocks with this material require the correct tool to be harvested.
124 */
125 protected Material setRequiresTool()
126 {
127 this.requiresNoTool = false;
128 return this;
129 }
130
131 /**
132 * Set the canBurn bool to True and return the current object.
133 */
134 protected Material setBurning()
135 {
136 this.canBurn = true;
137 return this;
138 }
139
140 /**
141 * Returns if the block can burn or not.
142 */
143 public boolean getCanBurn()
144 {
145 return this.canBurn;
146 }
147
148 /**
149 * Sets {@link #replaceable} to true.
150 */
151 public Material setReplaceable()
152 {
153 this.replaceable = true;
154 return this;
155 }
156
157 /**
158 * Returns whether the material can be replaced by other blocks when placed - eg snow, vines and tall grass.
159 */
160 public boolean isReplaceable()
161 {
162 return this.replaceable;
163 }
164
165 /**
166 * Indicate if the material is opaque
167 */
168 public boolean isOpaque()
169 {
170 return this.isTranslucent ? false : this.blocksMovement();
171 }
172
173 /**
174 * Returns true if the material can be harvested without a tool (or with the wrong tool)
175 */
176 public boolean isToolNotRequired()
177 {
178 return this.requiresNoTool;
179 }
180
181 /**
182 * Returns the mobility information of the material, 0 = free, 1 = can't push but can move over, 2 = total
183 * immobility and stop pistons.
184 */
185 public int getMaterialMobility()
186 {
187 return this.mobilityFlag;
188 }
189
190 /**
191 * This type of material can't be pushed, but pistons can move over it.
192 */
193 protected Material setNoPushMobility()
194 {
195 this.mobilityFlag = 1;
196 return this;
197 }
198
199 /**
200 * This type of material can't be pushed, and pistons are blocked to move.
201 */
202 protected Material setImmovableMobility()
203 {
204 this.mobilityFlag = 2;
205 return this;
206 }
207
208 protected Material func_85158_p()
209 {
210 this.field_85159_M = true;
211 return this;
212 }
213
214 public boolean func_85157_q()
215 {
216 return this.field_85159_M;
217 }
218 }