001package net.minecraft.tileentity; 002 003import net.minecraft.block.Block; 004import net.minecraft.block.material.Material; 005import net.minecraft.nbt.NBTTagCompound; 006import net.minecraft.world.World; 007 008public 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 material = par1World.getBlockMaterial(par2, par3 - 1, par4); 061 byte b0 = 0; 062 063 if (material == Material.rock) 064 { 065 b0 = 1; 066 } 067 068 if (material == Material.sand) 069 { 070 b0 = 2; 071 } 072 073 if (material == Material.glass) 074 { 075 b0 = 3; 076 } 077 078 if (material == Material.wood) 079 { 080 b0 = 4; 081 } 082 083 par1World.addBlockEvent(par2, par3, par4, Block.music.blockID, b0, this.note); 084 } 085 } 086}