    001    package net.minecraft.tileentity;
    002
    003    import net.minecraft.block.Block;
    004    import net.minecraft.block.material.Material;
    005    import net.minecraft.nbt.NBTTagCompound;
    006    import net.minecraft.world.World;
    007
    008    public class TileEntityNote extends TileEntity
    009    {
    010        /** Note to play */
    011        public byte note = 0;
    012
    013        /** stores the latest redstone state */
    014        public boolean previousRedstoneState = false;
    015
    016        /**
    017         * Writes a tile entity to NBT.
    018         */
    019        public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    020        {
    021            super.writeToNBT(par1NBTTagCompound);
    022            par1NBTTagCompound.setByte("note", this.note);
    023        }
    024
    025        /**
    026         * Reads a tile entity from NBT.
    027         */
    028        public void readFromNBT(NBTTagCompound par1NBTTagCompound)
    029        {
    030            super.readFromNBT(par1NBTTagCompound);
    031            this.note = par1NBTTagCompound.getByte("note");
    032
    033            if (this.note < 0)
    034            {
    035                this.note = 0;
    036            }
    037
    038            if (this.note > 24)
    039            {
    040                this.note = 24;
    041            }
    042        }
    043
    044        /**
    045         * change pitch by -> (currentPitch + 1) % 25
    046         */
    047        public void changePitch()
    048        {
    049            this.note = (byte)((this.note + 1) % 25);
    050            this.onInventoryChanged();
    051        }
    052
    053        /**
    054         * plays the stored note
    055         */
    056        public void triggerNote(World par1World, int par2, int par3, int par4)
    057        {
    058            if (par1World.getBlockMaterial(par2, par3 + 1, par4) == Material.air)
    059            {
    060                Material var5 = par1World.getBlockMaterial(par2, par3 - 1, par4);
    061                byte var6 = 0;
    062
    063                if (var5 == Material.rock)
    064                {
    065                    var6 = 1;
    066                }
    067
    068                if (var5 == Material.sand)
    069                {
    070                    var6 = 2;
    071                }
    072
    073                if (var5 == Material.glass)
    074                {
    075                    var6 = 3;
    076                }
    077
    078                if (var5 == Material.wood)
    079                {
    080                    var6 = 4;
    081                }
    082
    083                par1World.addBlockEvent(par2, par3, par4, Block.music.blockID, var6, this.note);
    084            }
    085        }
    086    }