    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();
    025        public static final Material redstoneLight = new Material(MapColor.airColor);
    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();
    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
    075        public Material(MapColor par1MapColor)
    076        {
    077            this.materialMapColor = par1MapColor;
    078        }
    079
    080        /**
    081         * Returns if blocks of these materials are liquids.
    082         */
    083        public boolean isLiquid()
    084        {
    085            return false;
    086        }
    087
    088        public boolean isSolid()
    089        {
    090            return true;
    091        }
    092
    093        /**
    094         * Will prevent grass from growing on dirt underneath and kill any grass below it if it returns true
    095         */
    096        public boolean getCanBlockGrass()
    097        {
    098            return true;
    099        }
    100
    101        /**
    102         * Returns if this material is considered solid or not
    103         */
    104        public boolean blocksMovement()
    105        {
    106            return true;
    107        }
    108
    109        /**
    110         * Marks the material as translucent
    111         */
    112        private Material setTranslucent()
    113        {
    114            this.isTranslucent = true;
    115            return this;
    116        }
    117
    118        /**
    119         * Disables the ability to harvest this material.
    120         */
    121        protected Material setNoHarvest()
    122        {
    123            this.canHarvest = false;
    124            return this;
    125        }
    126
    127        /**
    128         * Set the canBurn bool to True and return the current object.
    129         */
    130        protected Material setBurning()
    131        {
    132            this.canBurn = true;
    133            return this;
    134        }
    135
    136        /**
    137         * Returns if the block can burn or not.
    138         */
    139        public boolean getCanBurn()
    140        {
    141            return this.canBurn;
    142        }
    143
    144        /**
    145         * Sets the material as a form of ground cover, e.g. Snow
    146         */
    147        public Material setGroundCover()
    148        {
    149            this.groundCover = true;
    150            return this;
    151        }
    152
    153        /**
    154         * Return whether the material is a form of ground cover, e.g. Snow
    155         */
    156        public boolean isGroundCover()
    157        {
    158            return this.groundCover;
    159        }
    160
    161        /**
    162         * Indicate if the material is opaque
    163         */
    164        public boolean isOpaque()
    165        {
    166            return this.isTranslucent ? false : this.blocksMovement();
    167        }
    168
    169        /**
    170         * Returns true if material can be harvested by player.
    171         */
    172        public boolean isHarvestable()
    173        {
    174            return this.canHarvest;
    175        }
    176
    177        /**
    178         * Returns the mobility information of the material, 0 = free, 1 = can't push but can move over, 2 = total
    179         * immobility and stop pistons.
    180         */
    181        public int getMaterialMobility()
    182        {
    183            return this.mobilityFlag;
    184        }
    185
    186        /**
    187         * This type of material can't be pushed, but pistons can move over it.
    188         */
    189        protected Material setNoPushMobility()
    190        {
    191            this.mobilityFlag = 1;
    192            return this;
    193        }
    194
    195        /**
    196         * This type of material can't be pushed, and pistons are blocked to move.
    197         */
    198        protected Material setImmovableMobility()
    199        {
    200            this.mobilityFlag = 2;
    201            return this;
    202        }
    203    }