package WayofTime.alchemicalWizardry.common.items; import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.ModBlocks; import WayofTime.alchemicalWizardry.ModItems; import WayofTime.alchemicalWizardry.common.rituals.RitualComponent; import WayofTime.alchemicalWizardry.common.rituals.Rituals; import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatMessageComponent; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import java.util.List; public class ItemRitualDiviner extends EnergyItems { private int maxMetaData; public ItemRitualDiviner(int id) { super(id); this.maxStackSize = 1; setEnergyUsed(100); this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); this.maxMetaData = 4; } @Override @SideOnly(Side.CLIENT) public void registerIcons(IconRegister iconRegister) { this.itemIcon = iconRegister.registerIcon("AlchemicalWizardry:RitualDiviner"); } @Override public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) { par3List.add("Used to explore new types of rituals"); if (this.getMaxRuneDisplacement(par1ItemStack) == 1) { par3List.add("Can place Dusk runes"); } else { par3List.add("Can not place Dusk runes"); } if (!(par1ItemStack.stackTagCompound == null)) { int ritualID = this.getCurrentRitual(par1ItemStack); //TODO par3List.add("Current owner: " + par1ItemStack.stackTagCompound.getString("ownerName")); par3List.add("RitualID: " + (ritualID + 1)); List ritualList = Rituals.getRitualList(this.getCurrentRitual(par1ItemStack) + 1); int blankStones = 0; int airStones = 0; int waterStones = 0; int fireStones = 0; int earthStones = 0; int duskStones = 0; for (RitualComponent rc : ritualList) { switch (rc.getStoneType()) { case RitualComponent.BLANK: blankStones++; break; case RitualComponent.AIR: airStones++; break; case RitualComponent.WATER: waterStones++; break; case RitualComponent.FIRE: fireStones++; break; case RitualComponent.EARTH: earthStones++; break; case RitualComponent.DUSK: duskStones++; break; } } par3List.add("Blank stones: " + blankStones); par3List.add(EnumChatFormatting.AQUA + "Air stones: " + airStones); par3List.add(EnumChatFormatting.BLUE + "Water stones: " + waterStones); par3List.add(EnumChatFormatting.RED + "Fire stones: " + fireStones); par3List.add(EnumChatFormatting.DARK_GREEN + "Earth stones: " + earthStones); par3List.add(EnumChatFormatting.BOLD + "Dusk stones: " + duskStones); //par3List.add("Ritual Name: " + Rituals.getNameOfRitual(ritualID)); } } @Override public String getItemDisplayName(ItemStack par1ItemStack) { if (!(par1ItemStack.stackTagCompound == null)) { int ritualID = this.getCurrentRitual(par1ItemStack); return "Ritual: " + Rituals.getNameOfRitual(ritualID); //par3List.add("Current owner: " + par1ItemStack.stackTagCompound.getString("ownerName")); } else { return super.getItemStackDisplayName(par1ItemStack); } } @Override public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { EnergyItems.checkAndSetItemOwner(par1ItemStack, par2EntityPlayer); ItemStack[] playerInventory = par2EntityPlayer.inventory.mainInventory; TileEntity tileEntity = par3World.getBlockTileEntity(par4, par5, par6); if (tileEntity instanceof TEMasterStone) { TEMasterStone masterStone = (TEMasterStone) tileEntity; List ritualList = Rituals.getRitualList(this.getCurrentRitual(par1ItemStack) + 1); int playerInvRitualStoneLocation = -1; for (int i = 0; i < playerInventory.length; i++) { if (playerInventory[i] == null) { continue; } if (new ItemStack(ModBlocks.ritualStone).isItemEqual(playerInventory[i])) { playerInvRitualStoneLocation = i; break; } } for (RitualComponent rc : ritualList) { if (par3World.isAirBlock(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ())) { if (playerInvRitualStoneLocation >= 0) { if (rc.getStoneType() > this.maxMetaData + this.getMaxRuneDisplacement(par1ItemStack)) { par3World.playAuxSFX(200, par4, par5 + 1, par6, 0); return true; } if (!par2EntityPlayer.capabilities.isCreativeMode) { par2EntityPlayer.inventory.decrStackSize(playerInvRitualStoneLocation, 1); } par3World.setBlock(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ(), ModBlocks.ritualStone.blockID, rc.getStoneType(), 3); if (par3World.isRemote) { par3World.playAuxSFX(2005, par4, par5 + 1, par6, 0); EnergyItems.syphonBatteries(par1ItemStack, par2EntityPlayer, getEnergyUsed()); return true; } return true; } } else { int blockID = par3World.getBlockId(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ()); if (blockID == ModBlocks.ritualStone.blockID) { int metadata = par3World.getBlockMetadata(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ()); if (metadata != rc.getStoneType()) { if (rc.getStoneType() > this.maxMetaData + this.getMaxRuneDisplacement(par1ItemStack)) { par3World.playAuxSFX(200, par4, par5 + 1, par6, 0); return true; } par3World.setBlockMetadataWithNotify(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ(), rc.getStoneType(), 3); EnergyItems.syphonBatteries(par1ItemStack, par2EntityPlayer, getEnergyUsed()); return true; } } else { par3World.playAuxSFX(0000, par4, par5 + 1, par6, 0); return true; } } } // if (par3World.isRemote) // { // par3World.playAuxSFX(2005, par4, par5, par6, 0); // EnergyItems.syphonBatteries(par1ItemStack, par2EntityPlayer, getEnergyUsed()); // return true; // } // return true; } return false; } @Override public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { EnergyItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer); if (par3EntityPlayer.isSneaking()) { int maxRitualID = Rituals.getNumberOfRituals(); int currentRitualID = this.getCurrentRitual(par1ItemStack); if (currentRitualID + 1 >= maxRitualID) { this.setCurrentRitual(par1ItemStack, 0); } else { this.setCurrentRitual(par1ItemStack, currentRitualID + 1); } if (par2World.isRemote) { ChatMessageComponent chatmessagecomponent = new ChatMessageComponent(); //chatmessagecomponent.func_111072_b("Current Essence: " + data.currentEssence + "LP"); chatmessagecomponent.addText("Current Ritual: " + Rituals.getNameOfRitual(this.getCurrentRitual(par1ItemStack))); par3EntityPlayer.sendChatToPlayer(chatmessagecomponent); } } return par1ItemStack; } public int getCurrentRitual(ItemStack par1ItemStack) { if (par1ItemStack.stackTagCompound == null) { par1ItemStack.setTagCompound(new NBTTagCompound()); } return par1ItemStack.stackTagCompound.getInteger("ritualID"); } public void setCurrentRitual(ItemStack par1ItemStack, int ritualID) { if (par1ItemStack.stackTagCompound == null) { par1ItemStack.setTagCompound(new NBTTagCompound()); } par1ItemStack.stackTagCompound.setInteger("ritualID", ritualID); } public int getMaxRuneDisplacement(ItemStack par1ItemStack) //0 indicates the starting 4 runes, 1 indicates it can use Dusk runes { if (par1ItemStack.stackTagCompound == null) { par1ItemStack.setTagCompound(new NBTTagCompound()); } return par1ItemStack.stackTagCompound.getInteger("maxRuneDisplacement"); } public void setMaxRuneDisplacement(ItemStack par1ItemStack, int displacement) { if (par1ItemStack.stackTagCompound == null) { par1ItemStack.setTagCompound(new NBTTagCompound()); } par1ItemStack.stackTagCompound.setInteger("maxRuneDisplacement", displacement); } @Override @SideOnly(Side.CLIENT) public void getSubItems(int id, CreativeTabs creativeTab, List list) { list.add(new ItemStack(ModItems.itemRitualDiviner)); ItemStack duskRitualDivinerStack = new ItemStack(ModItems.itemRitualDiviner); ((ItemRitualDiviner) duskRitualDivinerStack.getItem()).setMaxRuneDisplacement(duskRitualDivinerStack, 1); list.add(duskRitualDivinerStack); } }