public void PickTile(int x, int y, int pickPower)
{
int num1 = 0;
int tileId = this.hitTile.HitObject(x, y, 1);
Tile tile = Main.tile[x, y];
if (Main.tileNoFail[(int)tile.type])
num1 = 100;
int damageAmount = Main.tileDungeon[(int)tile.type] || (int)tile.type == 25 || ((int)tile.type == 58 || (int)tile.type == 117) || (int)tile.type == 203 ? num1 + pickPower / 2 : ((int)tile.type == 48 || (int)tile.type == 232 ? num1 + pickPower / 4 : ((int)tile.type != 226 ? ((int)tile.type == 107 || (int)tile.type == 221 ? num1 + pickPower / 2 : ((int)tile.type == 108 || (int)tile.type == 222 ? num1 + pickPower / 3 : ((int)tile.type == 111 || (int)tile.type == 223 ? num1 + pickPower / 4 : ((int)tile.type != 211 ? num1 + pickPower : num1 + pickPower / 5)))) : num1 + pickPower / 4));
if ((int)tile.type == 211 && pickPower < 200)
damageAmount = 0;
if (((int)tile.type == 25 || (int)tile.type == 203) && pickPower < 65)
damageAmount = 0;
else if ((int)tile.type == 117 && pickPower < 65)
damageAmount = 0;
else if ((int)tile.type == 37 && pickPower < 50)
damageAmount = 0;
else if ((int)tile.type == 404 && pickPower < 65)
damageAmount = 0;
else if (((int)tile.type == 22 || (int)tile.type == 204) && ((double)y > Main.worldSurface && pickPower < 55))
damageAmount = 0;
else if ((int)tile.type == 56 && pickPower < 65)
damageAmount = 0;
else if ((int)tile.type == 58 && pickPower < 65)
damageAmount = 0;
else if (((int)tile.type == 226 || (int)tile.type == 237) && pickPower < 210)
damageAmount = 0;
else if (Main.tileDungeon[(int)tile.type] && pickPower < 65)
{
if ((double)x < (double)Main.maxTilesX * 0.35 || (double)x > (double)Main.maxTilesX * 0.65)
damageAmount = 0;
}
else if ((int)tile.type == 107 && pickPower < 100)
damageAmount = 0;
else if ((int)tile.type == 108 && pickPower < 110)
damageAmount = 0;
else if ((int)tile.type == 111 && pickPower < 150)
damageAmount = 0;
else if ((int)tile.type == 221 && pickPower < 100)
damageAmount = 0;
else if ((int)tile.type == 222 && pickPower < 110)
damageAmount = 0;
else if ((int)tile.type == 223 && pickPower < 150)
damageAmount = 0;
if ((int)tile.type == 147 || (int)tile.type == 0 || ((int)tile.type == 40 || (int)tile.type == 53) || ((int)tile.type == 57 || (int)tile.type == 59 || ((int)tile.type == 123 || (int)tile.type == 224)) || (int)tile.type == 397)
damageAmount += pickPower;
if ((int)tile.type == 165 || Main.tileRope[(int)tile.type] || ((int)tile.type == 199 || Main.tileMoss[(int)tile.type]))
damageAmount = 100;
if (this.hitTile.AddDamage(tileId, damageAmount, false) >= 100 && ((int)tile.type == 2 || (int)tile.type == 23 || ((int)tile.type == 60 || (int)tile.type == 70) || ((int)tile.type == 109 || (int)tile.type == 199 || Main.tileMoss[(int)tile.type])))
damageAmount = 0;
if ((int)tile.type == 128 || (int)tile.type == 269)
{
if ((int)tile.frameX == 18 || (int)tile.frameX == 54)
{
--x;
tile = Main.tile[x, y];
this.hitTile.UpdatePosition(tileId, x, y);
}
if ((int)tile.frameX >= 100)
{
damageAmount = 0;
Main.blockMouse = true;
}
}
if ((int)tile.type == 334)
{
if ((int)tile.frameY == 0)
{
++y;
tile = Main.tile[x, y];
this.hitTile.UpdatePosition(tileId, x, y);
}
if ((int)tile.frameY == 36)
{
--y;
tile = Main.tile[x, y];
this.hitTile.UpdatePosition(tileId, x, y);
}
int num2 = (int)tile.frameX;
bool flag1 = num2 >= 5000;
bool flag2 = false;
if (!flag1)
{
int num3 = num2 / 18 % 3;
x -= num3;
tile = Main.tile[x, y];
if ((int)tile.frameX >= 5000)
flag1 = true;
}
if (flag1)
{
int num3 = (int)tile.frameX;
int num4 = 0;
while (num3 >= 5000)
{
num3 -= 5000;
++num4;
}
if (num4 != 0)
flag2 = true;
}
if (flag2)
{
damageAmount = 0;
Main.blockMouse = true;
}
}
if (!WorldGen.CanKillTile(x, y))
damageAmount = 0;
if (this.hitTile.AddDamage(tileId, damageAmount, true) >= 100)
{
AchievementsHelper.CurrentlyMining = true;
this.hitTile.Clear(tileId);
if (Main.netMode == 1 && Main.tileContainer[(int)Main.tile[x, y].type])
{
WorldGen.KillTile(x, y, true, false, false);
NetMessage.SendData(17, -1, -1, "", 0, (float)x, (float)y, 1f, 0, 0, 0);
if ((int)Main.tile[x, y].type == 21)
NetMessage.SendData(34, -1, -1, "", 1, (float)x, (float)y, 0.0f, 0, 0, 0);
if ((int)Main.tile[x, y].type == 88)
NetMessage.SendData(34, -1, -1, "", 3, (float)x, (float)y, 0.0f, 0, 0, 0);
}
else
{
int j = y;
bool flag = Main.tile[x, j].active();
WorldGen.KillTile(x, j, false, false, false);
if (flag && !Main.tile[x, j].active())
AchievementsHelper.HandleMining();
if (Main.netMode == 1)
NetMessage.SendData(17, -1, -1, "", 0, (float)x, (float)j, 0.0f, 0, 0, 0);
}
AchievementsHelper.CurrentlyMining = false;
}
else
{
WorldGen.KillTile(x, y, true, false, false);
if (Main.netMode == 1)
NetMessage.SendData(17, -1, -1, "", 0, (float)x, (float)y, 1f, 0, 0, 0);
}
if (damageAmount == 0)
return;
this.hitTile.Prune();
}