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    }