package WayofTime.alchemicalWizardry.common.tileEntity; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Iterator; import java.util.List; import WayofTime.alchemicalWizardry.common.LifeEssenceNetwork; import WayofTime.alchemicalWizardry.common.rituals.Rituals; import cpw.mods.fml.common.network.PacketDispatcher; import cpw.mods.fml.common.network.Player; import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; public class TEMasterStone extends TileEntity { private int currentRitual; private boolean isActive; private String owner; private int cooldown; private int var1; private int direction; public TEMasterStone() { currentRitual = 0; isActive = false; owner = ""; cooldown = 0; var1 = 0; direction = 0; } @Override public void readFromNBT(NBTTagCompound par1NBTTagCompound) { super.readFromNBT(par1NBTTagCompound); currentRitual = par1NBTTagCompound.getInteger("currentRitual"); isActive = par1NBTTagCompound.getBoolean("isActive"); owner = par1NBTTagCompound.getString("owner"); cooldown = par1NBTTagCompound.getInteger("cooldown"); var1 = par1NBTTagCompound.getInteger("var1"); direction = par1NBTTagCompound.getInteger("direction"); } @Override public void writeToNBT(NBTTagCompound par1NBTTagCompound) { super.writeToNBT(par1NBTTagCompound); par1NBTTagCompound.setInteger("currentRitual", currentRitual); par1NBTTagCompound.setBoolean("isActive", isActive); par1NBTTagCompound.setString("owner", owner); par1NBTTagCompound.setInteger("cooldown", cooldown); par1NBTTagCompound.setInteger("var1", var1); par1NBTTagCompound.setInteger("direction", direction); } public void activateRitual(World world, int crystalLevel) { int testRitual = Rituals.checkValidRitual(world, xCoord, yCoord, zCoord); if (testRitual == 0) { return; } boolean testLevel = Rituals.canCrystalActivate(testRitual, crystalLevel); if (!testLevel) { return; } if (world.isRemote) { return; } World worldSave = MinecraftServer.getServer().worldServers[0]; LifeEssenceNetwork data = (LifeEssenceNetwork)worldSave.loadItemData(LifeEssenceNetwork.class, owner); if (data == null) { data = new LifeEssenceNetwork(owner); worldSave.setItemData(owner, data); } int currentEssence = data.currentEssence; if (currentEssence < Rituals.getCostForActivation(testRitual)) { //TODO Bad stuff return; } if (!world.isRemote) { data.currentEssence = currentEssence - Rituals.getCostForActivation(testRitual); data.markDirty(); for (int i = 0; i < 12; i++) { PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(xCoord, yCoord, zCoord, (short)1)); } } cooldown = Rituals.getInitialCooldown(testRitual); var1 = 0; currentRitual = testRitual; isActive = true; direction = Rituals.getDirectionOfRitual(world, xCoord, yCoord, zCoord, testRitual); worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } public void setOwner(String owner) { this.owner = owner; } @Override public void updateEntity() { if (!isActive) { return; } int worldTime = (int)(worldObj.getWorldTime() % 24000); if (worldObj.isRemote) { return; } if (worldTime % 100 == 0) { boolean testRunes = Rituals.checkDirectionOfRitualValid(worldObj, xCoord, yCoord, zCoord, currentRitual, direction); PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(xCoord, yCoord, zCoord, (short)1)); if (!testRunes) { isActive = false; currentRitual = 0; worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); //PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(xCoord, yCoord, zCoord, (short)3)); return; } } if (worldObj.getBlockPowerInput(xCoord, yCoord, zCoord) > 0) { return; } performRitual(worldObj, xCoord, yCoord, zCoord, currentRitual); } public void performRitual(World world, int x, int y, int z, int ritualID) { Rituals.performEffect(this, ritualID); /* World worldSave = MinecraftServer.getServer().worldServers[0]; LifeEssenceNetwork data = (LifeEssenceNetwork)worldSave.loadItemData(LifeEssenceNetwork.class, owner); if (data == null) { data = new LifeEssenceNetwork(owner); worldSave.setItemData(owner, data); } int currentEssence = data.currentEssence; switch (ritualID) { case 1: if (world.isAirBlock(x, y + 1, z)) { if (currentEssence < Rituals.getCostPerRefresh(ritualID)) { EntityPlayer entityOwner = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(owner); if (entityOwner == null) { return; } entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } else { for (int i = 0; i < 10; i++) { PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(xCoord, yCoord, zCoord, (short)3)); } world.setBlock(x, y + 1, z, Block.waterMoving.blockID, 0, 3); data.currentEssence = currentEssence - Rituals.getCostPerRefresh(ritualID); data.markDirty(); } } break; case 2: if (world.isAirBlock(x, y + 1, z)) { if (currentEssence < Rituals.getCostPerRefresh(ritualID)) { EntityPlayer entityOwner = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(owner); if (entityOwner == null) { return; } entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } else { for (int i = 0; i < 10; i++) { PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(xCoord, yCoord, zCoord, (short)3)); } world.setBlock(x, y + 1, z, Block.lavaMoving.blockID, 0, 3); data.currentEssence = currentEssence - Rituals.getCostPerRefresh(ritualID); data.markDirty(); } } break; case 3: if (currentEssence < Rituals.getCostPerRefresh(ritualID)) { EntityPlayer entityOwner = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(owner); if (entityOwner == null) { return; } entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); }else { if (world.getWorldTime() % 20 != 0) { return; } boolean flag = false; for(int i=-1; i<=1; i++) { for(int j=-1;j<=1;j++) { int id = world.getBlockId(x+i, y + 2, z+j); Block block = Block.blocksList[id]; if (block instanceof IPlantable) { { PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(xCoord+i, yCoord + 2, zCoord+j, (short)3)); block.updateTick(world, x+i, y + 2, z+j, world.rand); flag = true; } } } } if(flag) { data.currentEssence = currentEssence - Rituals.getCostPerRefresh(ritualID); data.markDirty(); } } break; case 4: if (currentEssence < Rituals.getCostPerRefresh(ritualID)) { EntityPlayer entityOwner = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(owner); if (entityOwner == null) { return; } entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } else { int d0 = 0; AxisAlignedBB axisalignedbb = AxisAlignedBB.getAABBPool().getAABB((double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 1), (double)(this.zCoord + 1)).expand(d0, d0, d0); axisalignedbb.maxY = Math.min((double)this.worldObj.getHeight(), (double)(this.yCoord + 1+d0)); List list = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); Iterator iterator = list.iterator(); EntityLivingBase entityplayer; boolean flag = false; while (iterator.hasNext()) { entityplayer = (EntityLivingBase)iterator.next(); if (!(entityplayer.getEntityName().equals(owner))) { double xDif = entityplayer.posX - xCoord; double yDif = entityplayer.posY - (yCoord + 1); double zDif = entityplayer.posZ - zCoord; entityplayer.motionX=0.1*xDif; entityplayer.motionY=0.1*yDif; entityplayer.motionZ=0.1*zDif; entityplayer.fallDistance = 0; if(!(entityplayer instanceof EntityPlayer)) { flag=true; } //entityplayer.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } } if (worldObj.getWorldTime() % 2 == 0 && flag) { data.currentEssence = currentEssence - Rituals.getCostPerRefresh(ritualID); data.markDirty(); } } break; case 5: if (currentEssence < Rituals.getCostPerRefresh(ritualID)) { EntityPlayer entityOwner = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(owner); if (entityOwner == null) { return; } entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } else { int d0 = 5; AxisAlignedBB axisalignedbb = AxisAlignedBB.getAABBPool().getAABB((double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 1), (double)(this.zCoord + 1)).expand(d0, d0, d0); List list = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); Iterator iterator = list.iterator(); EntityLivingBase livingEntity; boolean flag = false; while (iterator.hasNext()) { livingEntity = (EntityLivingBase)iterator.next(); if (livingEntity instanceof EntityPlayer) { continue; } if (!(livingEntity.getEntityName().equals(owner))) { double xDif = livingEntity.posX - (xCoord + 0.5); double yDif = livingEntity.posY - (yCoord + 3); double zDif = livingEntity.posZ - (zCoord + 0.5); livingEntity.motionX=-0.05*xDif; livingEntity.motionY=-0.05*yDif; livingEntity.motionZ=-0.05*zDif; flag=true; //livingEntity.setVelocity(-0.05 * xDif, -0.05 * yDif, -0.05 * zDif); if (world.rand.nextInt(10) == 0) { PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(livingEntity.posX, livingEntity.posY, livingEntity.posZ, (short)1)); } livingEntity.fallDistance = 0; //entityplayer.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } } if (worldObj.getWorldTime() % 2 == 0 && flag) { data.currentEssence = currentEssence - Rituals.getCostPerRefresh(ritualID); data.markDirty(); } } break; case 6: if (currentEssence < Rituals.getCostPerRefresh(ritualID)) { EntityPlayer entityOwner = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(owner); if (entityOwner == null) { return; } entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } else { if (var1 == 0) { int d0 = 0; AxisAlignedBB axisalignedbb = AxisAlignedBB.getAABBPool().getAABB((double)this.xCoord, (double)this.yCoord + 1, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 2), (double)(this.zCoord + 1)).expand(d0, d0, d0); List list = this.worldObj.getEntitiesWithinAABB(EntityItem.class, axisalignedbb); Iterator iterator = list.iterator(); EntityItem item; while (iterator.hasNext()) { item = (EntityItem)iterator.next(); // double xDif = item.posX - (xCoord+0.5); // double yDif = item.posY - (yCoord+1); // double zDif = item.posZ - (zCoord+0.5); ItemStack itemStack = item.getEntityItem(); if (itemStack == null) { continue; } if (itemStack.itemID == AlchemicalWizardry.apprenticeBloodOrb.itemID) { var1 = AlchemicalWizardry.energyBlaster.itemID; world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z)); cooldown--; item.setDead(); return; } else if (itemStack.itemID == Item.swordDiamond.itemID) { var1 = AlchemicalWizardry.energySword.itemID; world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z)); cooldown--; item.setDead(); return; } else if (itemStack.itemID == Item.pickaxeDiamond.itemID) { var1 = AlchemicalWizardry.boundPickaxe.itemID; world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z)); cooldown--; item.setDead(); return; } else if (itemStack.itemID == Item.axeDiamond.itemID) { var1 = AlchemicalWizardry.boundAxe.itemID; world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z)); cooldown--; item.setDead(); return; } else if (itemStack.itemID == Item.shovelDiamond.itemID) { var1 = AlchemicalWizardry.boundShovel.itemID; world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z)); cooldown--; item.setDead(); return; } if (world.rand.nextInt(10) == 0) { PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(item.posX, item.posY, item.posZ, (short)1)); } } data.currentEssence = currentEssence - Rituals.getCostPerRefresh(ritualID); data.markDirty(); } else { cooldown--; if (world.rand.nextInt(20) == 0) { int lightningPoint = world.rand.nextInt(8); switch (lightningPoint) { case 0: world.addWeatherEffect(new EntityLightningBolt(world, x + 4, y + 3, z + 0)); break; case 1: world.addWeatherEffect(new EntityLightningBolt(world, x - 4, y + 3, z + 0)); break; case 2: world.addWeatherEffect(new EntityLightningBolt(world, x + 0, y + 3, z + 4)); break; case 3: world.addWeatherEffect(new EntityLightningBolt(world, x + 0, y + 3, z - 4)); break; case 4: world.addWeatherEffect(new EntityLightningBolt(world, x + 3, y + 3, z + 3)); break; case 5: world.addWeatherEffect(new EntityLightningBolt(world, x - 3, y + 3, z + 3)); break; case 6: world.addWeatherEffect(new EntityLightningBolt(world, x + 3, y + 3, z - 3)); break; case 7: world.addWeatherEffect(new EntityLightningBolt(world, x - 3, y + 3, z - 3)); break; } } if (cooldown <= 0) { EntityItem newItem = new EntityItem(worldObj, xCoord + 0.5, yCoord + 1, zCoord + 0.5, new ItemStack(var1, 1, 0)); worldObj.spawnEntityInWorld(newItem); isActive = false; } } } break; case 7: if (currentEssence < Rituals.getCostPerRefresh(ritualID)) { EntityPlayer entityOwner = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(owner); if (entityOwner == null) { return; } entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } else { int d0 = 0; AxisAlignedBB axisalignedbb = AxisAlignedBB.getAABBPool().getAABB((double)this.xCoord, (double)this.yCoord + 1, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 2), (double)(this.zCoord + 1)).expand(d0, d0, d0); List list = this.worldObj.getEntitiesWithinAABB(EntityItem.class, axisalignedbb); Iterator iterator = list.iterator(); EntityItem item; while (iterator.hasNext()) { item = (EntityItem)iterator.next(); // double xDif = item.posX - (xCoord+0.5); // double yDif = item.posY - (yCoord+1); // double zDif = item.posZ - (zCoord+0.5); ItemStack itemStack = item.getEntityItem(); if (itemStack == null) { continue; } if (itemStack.itemID == AlchemicalWizardry.boundHelmet.itemID) { var1 = 5; } else if (itemStack.itemID == AlchemicalWizardry.boundPlate.itemID) { var1 = 8; }else if (itemStack.itemID == AlchemicalWizardry.boundLeggings.itemID) { var1 = 7; }else if (itemStack.itemID == AlchemicalWizardry.boundBoots.itemID) { var1 = 4; }else if(itemStack.itemID == AlchemicalWizardry.sigilOfHolding.itemID) { var1 = -1; } if(var1>0) { item.setDead(); world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z - 5)); world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z + 5)); world.addWeatherEffect(new EntityLightningBolt(world, x - 5, y + 1, z)); world.addWeatherEffect(new EntityLightningBolt(world, x + 5, y + 1, z)); NBTTagCompound itemTag = itemStack.stackTagCompound; ItemStack[] inv = ((BoundArmour)itemStack.getItem()).getInternalInventory(itemStack); if(inv!=null) { for(ItemStack internalItem : inv) { if(internalItem!=null) { EntityItem newItem = new EntityItem(worldObj, xCoord + 0.5, yCoord + 1, zCoord + 0.5, internalItem.copy()); worldObj.spawnEntityInWorld(newItem); } } } EntityItem newItem = new EntityItem(worldObj, xCoord + 0.5, yCoord + 1, zCoord + 0.5, new ItemStack(Block.blocksList[AlchemicalWizardry.bloodSocket.blockID],var1)); worldObj.spawnEntityInWorld(newItem); isActive=false; break; }else if(var1 ==-1) { item.setDead(); world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z - 5)); world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z + 5)); world.addWeatherEffect(new EntityLightningBolt(world, x - 5, y + 1, z)); world.addWeatherEffect(new EntityLightningBolt(world, x + 5, y + 1, z)); NBTTagCompound itemTag = itemStack.stackTagCompound; ItemStack[] inv = ((SigilOfHolding)itemStack.getItem()).getInternalInventory(itemStack); if(inv!=null) { for(ItemStack internalItem : inv) { if(internalItem!=null) { EntityItem newItem = new EntityItem(worldObj, xCoord + 0.5, yCoord + 1, zCoord + 0.5, internalItem.copy()); worldObj.spawnEntityInWorld(newItem); } } } EntityItem newItem = new EntityItem(worldObj, xCoord + 0.5, yCoord + 1, zCoord + 0.5, new ItemStack(AlchemicalWizardry.sigilOfHolding.itemID,1,0)); worldObj.spawnEntityInWorld(newItem); isActive=false; break; } if (world.rand.nextInt(10) == 0) { PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(item.posX, item.posY, item.posZ, (short)1)); } } data.currentEssence = currentEssence - Rituals.getCostPerRefresh(ritualID); data.markDirty(); } break; case 8: if (currentEssence < Rituals.getCostPerRefresh(ritualID)) { EntityPlayer entityOwner = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(owner); if (entityOwner == null) { return; } entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } else { int d0 = 0; AxisAlignedBB axisalignedbb = AxisAlignedBB.getAABBPool().getAABB((double)this.xCoord, (double)this.yCoord+1, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 2), (double)(this.zCoord + 1)).expand(d0, d0, d0); axisalignedbb.maxY = Math.min((double)this.worldObj.getHeight(), (double)(this.yCoord + 2+d0)); List list = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); Iterator iterator = list.iterator(); EntityLivingBase entityplayer; boolean flag = false; while (iterator.hasNext()) { entityplayer = (EntityLivingBase)iterator.next(); if(entityplayer instanceof EntityPlayer) { PacketDispatcher.sendPacketToPlayer(PacketHandler.getPlayerVelocitySettingPacket(entityplayer.motionX, 1, entityplayer.motionZ), (Player)entityplayer); entityplayer.motionY=1; entityplayer.fallDistance = 0; flag=true; }else //if (!(entityplayer.getEntityName().equals(owner))) { // double xDif = entityplayer.posX - xCoord; // double yDif = entityplayer.posY - (yCoord + 1); // double zDif = entityplayer.posZ - zCoord; //entityplayer.motionX=0.1*xDif; entityplayer.motionY=1; //entityplayer.motionZ=0.1*zDif; entityplayer.fallDistance = 0; flag=true; //entityplayer.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); } } if (worldObj.getWorldTime() % 2 == 0 && flag) { data.currentEssence = currentEssence - Rituals.getCostPerRefresh(ritualID); data.markDirty(); } } break; default: return; } */ } public String getOwner() { return owner; } public void setCooldown(int newCooldown) { this.cooldown = newCooldown; } public int getCooldown() { return this.cooldown; } public void setVar1(int newVar1) { this.var1 = newVar1; } public int getVar1() { return this.var1; } public void setActive(boolean active) { this.isActive = active; } public int getDirection() { return this.direction; } }