Terraria.Player.ItemCheck C# (CSharp) Method

ItemCheck() public method

public ItemCheck ( int i ) : void
i int
return void
        public void ItemCheck(int i)
        {
            if (this.webbed || this.frozen || this.stoned)
                return;
            bool flag1 = false;
            float num1 = 5E-06f;
            float num2 = (float)this.mount.PlayerOffsetHitbox;
            Item sItem = this.inventory[this.selectedItem];
            if (this.mount.Active)
            {
                if (this.mount.Type == 8)
                {
                    this.noItems = true;
                    if (this.controlUseItem)
                    {
                        this.channel = true;
                        if (this.releaseUseItem)
                            this.mount.UseAbility(this, Vector2.Zero, true);
                        this.releaseUseItem = false;
                    }
                }
                if (this.whoAmI == Main.myPlayer && (double)this.gravDir == -1.0)
                    this.mount.Dismount(this);
            }
            int num3 = sItem.damage;
            if (num3 > 0)
            {
                if (sItem.melee)
                    num3 = (int)((double)num3 * (double)this.meleeDamage + (double)num1);
                else if (sItem.ranged)
                {
                    num3 = (int)((double)num3 * (double)this.rangedDamage + (double)num1);
                    if (sItem.useAmmo == 1 || sItem.useAmmo == 323)
                        num3 = (int)((double)num3 * (double)this.arrowDamage + (double)num1);
                    if (sItem.useAmmo == 14 || sItem.useAmmo == 311)
                        num3 = (int)((double)num3 * (double)this.bulletDamage + (double)num1);
                    if (sItem.useAmmo == 771 || sItem.useAmmo == 246 || (sItem.useAmmo == 312 || sItem.useAmmo == 514))
                        num3 = (int)((double)num3 * (double)this.rocketDamage + (double)num1);
                }
                else if (sItem.thrown)
                    num3 = (int)((double)num3 * (double)this.thrownDamage + (double)num1);
                else if (sItem.magic)
                    num3 = (int)((double)num3 * (double)this.magicDamage + (double)num1);
            }
            if (sItem.autoReuse && !this.noItems)
            {
                this.releaseUseItem = true;
                if (this.itemAnimation == 1 && sItem.stack > 0)
                {
                    if (sItem.shoot > 0 && this.whoAmI != Main.myPlayer && (this.controlUseItem && sItem.useStyle == 5))
                    {
                        this.ApplyAnimation(sItem);
                        if (sItem.useSound > 0)
                            Main.PlaySound(2, (int)this.position.X, (int)this.position.Y, sItem.useSound);
                    }
                    else
                        this.itemAnimation = 0;
                }
            }
            if (sItem.fishingPole > 0)
            {
                sItem.holdStyle = 0;
                if (this.itemTime == 0 && this.itemAnimation == 0)
                {
                    for (int index = 0; index < 1000; ++index)
                    {
                        if (Main.projectile[index].active && Main.projectile[index].owner == this.whoAmI && Main.projectile[index].bobber)
                            sItem.holdStyle = 1;
                    }
                }
            }
            if (this.itemAnimation == 0 && this.altFunctionUse == 2)
                this.altFunctionUse = 0;
            if (this.itemAnimation == 0 && this.reuseDelay > 0)
            {
                this.itemAnimation = this.reuseDelay;
                this.itemTime = this.reuseDelay;
                this.reuseDelay = 0;
            }
            if (this.controlUseItem && this.releaseUseItem && (sItem.headSlot > 0 || sItem.bodySlot > 0 || sItem.legSlot > 0))
            {
                if (sItem.useStyle == 0)
                    this.releaseUseItem = false;
                if ((double)this.position.X / 16.0 - (double)Player.tileRangeX - (double)sItem.tileBoost <= (double)Player.tileTargetX && ((double)this.position.X + (double)this.width) / 16.0 + (double)Player.tileRangeX + (double)sItem.tileBoost - 1.0 >= (double)Player.tileTargetX && ((double)this.position.Y / 16.0 - (double)Player.tileRangeY - (double)sItem.tileBoost <= (double)Player.tileTargetY && ((double)this.position.Y + (double)this.height) / 16.0 + (double)Player.tileRangeY + (double)sItem.tileBoost - 2.0 >= (double)Player.tileTargetY))
                {
                    int index1 = Player.tileTargetX;
                    int index2 = Player.tileTargetY;
                    if (Main.tile[index1, index2].active() && ((int)Main.tile[index1, index2].type == 128 || (int)Main.tile[index1, index2].type == 269))
                    {
                        int num4 = (int)Main.tile[index1, index2].frameY;
                        int num5 = 0;
                        if (sItem.bodySlot >= 0)
                            num5 = 1;
                        if (sItem.legSlot >= 0)
                            num5 = 2;
                        int num6;
                        for (num6 = num4 / 18; num5 > num6; num6 = (int)Main.tile[index1, index2].frameY / 18)
                            ++index2;
                        for (; num5 < num6; num6 = (int)Main.tile[index1, index2].frameY / 18)
                            --index2;
                        int num7 = (int)Main.tile[index1, index2].frameX;
                        while (num7 >= 100)
                            num7 -= 100;
                        if (num7 >= 36)
                            num7 -= 36;
                        int index3 = index1 - num7 / 18;
                        int num8 = (int)Main.tile[index3, index2].frameX;
                        WorldGen.KillTile(index3, index2, true, false, false);
                        if (Main.netMode == 1)
                            NetMessage.SendData(17, -1, -1, "", 0, (float)index3, (float)index2, 1f, 0, 0, 0);
                        while (num8 >= 100)
                            num8 -= 100;
                        if (num6 == 0 && sItem.headSlot >= 0)
                        {
                            Main.blockMouse = true;
                            Main.tile[index3, index2].frameX = (short)(num8 + sItem.headSlot * 100);
                            if (Main.netMode == 1)
                                NetMessage.SendTileSquare(-1, index3, index2, 1);
                            --sItem.stack;
                            if (sItem.stack <= 0)
                            {
                                sItem.SetDefaults(0, false);
                                Main.mouseItem.SetDefaults(0, false);
                            }
                            if (this.selectedItem == 58)
                                Main.mouseItem = sItem.Clone();
                            this.releaseUseItem = false;
                            this.mouseInterface = true;
                        }
                        else if (num6 == 1 && sItem.bodySlot >= 0)
                        {
                            Main.blockMouse = true;
                            Main.tile[index3, index2].frameX = (short)(num8 + sItem.bodySlot * 100);
                            if (Main.netMode == 1)
                                NetMessage.SendTileSquare(-1, index3, index2, 1);
                            --sItem.stack;
                            if (sItem.stack <= 0)
                            {
                                sItem.SetDefaults(0, false);
                                Main.mouseItem.SetDefaults(0, false);
                            }
                            if (this.selectedItem == 58)
                                Main.mouseItem = sItem.Clone();
                            this.releaseUseItem = false;
                            this.mouseInterface = true;
                        }
                        else if (num6 == 2 && sItem.legSlot >= 0)
                        {
                            Main.blockMouse = true;
                            Main.tile[index3, index2].frameX = (short)(num8 + sItem.legSlot * 100);
                            if (Main.netMode == 1)
                                NetMessage.SendTileSquare(-1, index3, index2, 1);
                            --sItem.stack;
                            if (sItem.stack <= 0)
                            {
                                sItem.SetDefaults(0, false);
                                Main.mouseItem.SetDefaults(0, false);
                            }
                            if (this.selectedItem == 58)
                                Main.mouseItem = sItem.Clone();
                            this.releaseUseItem = false;
                            this.mouseInterface = true;
                        }
                    }
                }
            }
            if (Main.myPlayer == i && this.itemAnimation == 0 && TileObjectData.CustomPlace(sItem.createTile, sItem.placeStyle))
            {
                TileObject objectData;
                TileObject.CanPlace(Player.tileTargetX, Player.tileTargetY, sItem.createTile, sItem.placeStyle, this.direction, out objectData, true);
            }
            if (this.controlUseItem && this.itemAnimation == 0 && (this.releaseUseItem && sItem.useStyle > 0))
            {
                if (this.altFunctionUse == 1)
                    this.altFunctionUse = 2;
                bool canUse = true;
                if (sItem.shoot == 0)
                    this.itemRotation = 0.0f;
                if (sItem.itemId == 3335 && (this.extraAccessory || !Main.expertMode))
                    canUse = false;
                if (this.pulley && sItem.fishingPole > 0)
                    canUse = false;
                if (this.wet && (sItem.shoot == 85 || sItem.shoot == 15 || sItem.shoot == 34))
                    canUse = false;
                if ((int)sItem.makeNPC > 0 && !NPC.CanReleaseNPCs(this.whoAmI))
                    canUse = false;
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 603 && !Main.cEd)
                    canUse = false;
                if (sItem.itemId == 1071 || sItem.itemId == 1072)
                {
                    bool flag2 = false;
                    for (int index = 0; index < 58; ++index)
                    {
                        if ((int)this.inventory[index].paint > 0)
                        {
                            flag2 = true;
                            break;
                        }
                    }
                    if (!flag2)
                        canUse = false;
                }
                if (this.noItems)
                    canUse = false;
                if (sItem.tileWand > 0)
                {
                    int num4 = sItem.tileWand;
                    canUse = false;
                    for (int index = 0; index < 58; ++index)
                    {
                        if (num4 == this.inventory[index].itemId && this.inventory[index].stack > 0)
                        {
                            canUse = true;
                            break;
                        }
                    }
                }
                if (sItem.fishingPole > 0)
                {
                    for (int index1 = 0; index1 < 1000; ++index1)
                    {
                        if (Main.projectile[index1].active && Main.projectile[index1].owner == this.whoAmI && Main.projectile[index1].bobber)
                        {
                            canUse = false;
                            if (this.whoAmI == Main.myPlayer && (double)Main.projectile[index1].ai[0] == 0.0)
                            {
                                Main.projectile[index1].ai[0] = 1f;
                                float num4 = -10f;
                                if (Main.projectile[index1].wet && (double)Main.projectile[index1].velocity.Y > (double)num4)
                                    Main.projectile[index1].velocity.Y = num4;
                                Main.projectile[index1].netUpdate2 = true;
                                if ((double)Main.projectile[index1].ai[1] < 0.0 && (double)Main.projectile[index1].localAI[1] != 0.0)
                                {
                                    bool flag2 = false;
                                    int num5 = 0;
                                    for (int index2 = 0; index2 < 58; ++index2)
                                    {
                                        if (this.inventory[index2].stack > 0 && this.inventory[index2].bait > 0)
                                        {
                                            bool flag3 = false;
                                            int maxValue = 1 + this.inventory[index2].bait / 5;
                                            if (maxValue < 1)
                                                maxValue = 1;
                                            if (this.accTackleBox)
                                                ++maxValue;
                                            if (Main.rand.Next(maxValue) == 0)
                                                flag3 = true;
                                            if ((double)Main.projectile[index1].localAI[1] < 0.0)
                                                flag3 = true;
                                            if ((double)Main.projectile[index1].localAI[1] > 0.0)
                                            {
                                                Item obj = new Item();
                                                obj.SetDefaults((int)Main.projectile[index1].localAI[1], false);
                                                if (obj.rare < 0)
                                                    flag3 = false;
                                            }
                                            if (flag3)
                                            {
                                                num5 = this.inventory[index2].itemId;
                                                --this.inventory[index2].stack;
                                                if (this.inventory[index2].stack <= 0)
                                                    this.inventory[index2].SetDefaults(0, false);
                                            }
                                            flag2 = true;
                                            break;
                                        }
                                    }
                                    if (flag2)
                                    {
                                        if (num5 == 2673)
                                        {
                                            if (Main.netMode != 1)
                                                NPC.SpawnOnPlayer(this.whoAmI, 370);
                                            else
                                                NetMessage.SendData(61, -1, -1, "", this.whoAmI, 370f, 0.0f, 0.0f, 0, 0, 0);
                                            Main.projectile[index1].ai[0] = 2f;
                                        }
                                        else if (Main.rand.Next(7) == 0 && !this.accFishingLine)
                                            Main.projectile[index1].ai[0] = 2f;
                                        else
                                            Main.projectile[index1].ai[1] = Main.projectile[index1].localAI[1];
                                        Main.projectile[index1].netUpdate = true;
                                    }
                                }
                            }
                        }
                    }
                }
                if (sItem.shoot == 6 || sItem.shoot == 19 || (sItem.shoot == 33 || sItem.shoot == 52) || (sItem.shoot == 113 || sItem.shoot == 320 || (sItem.shoot == 333 || sItem.shoot == 383)) || sItem.shoot == 491)
                {
                    for (int index = 0; index < 1000; ++index)
                    {
                        if (Main.projectile[index].active && Main.projectile[index].owner == Main.myPlayer && Main.projectile[index].type == sItem.shoot)
                            canUse = false;
                    }
                }
                if (sItem.shoot == 106)
                {
                    int num4 = 0;
                    for (int index = 0; index < 1000; ++index)
                    {
                        if (Main.projectile[index].active && Main.projectile[index].owner == Main.myPlayer && Main.projectile[index].type == sItem.shoot)
                            ++num4;
                    }
                    if (num4 >= sItem.stack)
                        canUse = false;
                }
                if (sItem.shoot == 272)
                {
                    int num4 = 0;
                    for (int index = 0; index < 1000; ++index)
                    {
                        if (Main.projectile[index].active && Main.projectile[index].owner == Main.myPlayer && Main.projectile[index].type == sItem.shoot)
                            ++num4;
                    }
                    if (num4 >= sItem.stack)
                        canUse = false;
                }
                if (sItem.shoot == 13 || sItem.shoot == 32 || sItem.shoot >= 230 && sItem.shoot <= 235 || (sItem.shoot == 315 || sItem.shoot == 331 || sItem.shoot == 372))
                {
                    for (int index = 0; index < 1000; ++index)
                    {
                        if (Main.projectile[index].active && Main.projectile[index].owner == Main.myPlayer && (Main.projectile[index].type == sItem.shoot && (double)Main.projectile[index].ai[0] != 2.0))
                            canUse = false;
                    }
                }
                if (sItem.shoot == 332)
                {
                    int num4 = 0;
                    for (int index = 0; index < 1000; ++index)
                    {
                        if (Main.projectile[index].active && Main.projectile[index].owner == Main.myPlayer && (Main.projectile[index].type == sItem.shoot && (double)Main.projectile[index].ai[0] != 2.0))
                            ++num4;
                    }
                    if (num4 >= 3)
                        canUse = false;
                }
                if (sItem.potion && canUse)
                {
                    if (this.potionDelay <= 0)
                    {
                        if (sItem.itemId == 227)
                        {
                            this.potionDelay = this.restorationDelayTime;
                            this.AddBuff(21, this.potionDelay, true);
                        }
                        else
                        {
                            this.potionDelay = this.potionDelayTime;
                            this.AddBuff(21, this.potionDelay, true);
                        }
                    }
                    else
                        canUse = false;
                }
                if (sItem.mana > 0 && this.silence)
                    canUse = false;
                if (sItem.mana > 0 && canUse)
                {
                    bool flag2 = false;
                    if (sItem.itemId == 2795)
                        flag2 = true;
                    if (sItem.itemId != (int)sbyte.MaxValue || !this.spaceGun)
                    {
                        if (this.statMana >= (int)((double)sItem.mana * (double)this.manaCost))
                        {
                            if (!flag2)
                                this.statMana -= (int)((double)sItem.mana * (double)this.manaCost);
                        }
                        else if (this.manaFlower)
                        {
                            this.QuickMana();
                            if (this.statMana >= (int)((double)sItem.mana * (double)this.manaCost))
                            {
                                if (!flag2)
                                    this.statMana -= (int)((double)sItem.mana * (double)this.manaCost);
                            }
                            else
                                canUse = false;
                        }
                        else
                            canUse = false;
                    }
                    if (this.whoAmI == Main.myPlayer && sItem.buffType != 0 && canUse)
                        this.AddBuff(sItem.buffType, sItem.buffTime, true);
                }
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 603 && Main.cEd)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 669)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 115)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 3060)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 3062)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 3577)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 425)
                {
                    int type = Main.rand.Next(3);
                    if (type == 0)
                        type = 27;
                    if (type == 1)
                        type = 101;
                    if (type == 2)
                        type = 102;
                    for (int b = 0; b < 22; ++b)
                    {
                        if (this.buffType[b] == 27 || this.buffType[b] == 101 || this.buffType[b] == 102)
                        {
                            this.DelBuff(b);
                            --b;
                        }
                    }
                    this.AddBuff(type, 3600, true);
                }
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 753)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 994)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1169)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1170)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1171)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1172)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1180)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1181)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1182)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1183)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1242)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1157)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1309)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1311)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1837)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1312)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1798)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1799)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1802)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1810)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1927)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 1959)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 2364)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 2365)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 3043)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 2420)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 2535)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 2551)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 2584)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 2587)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 2621)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 2749)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 3249)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 3474)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && sItem.itemId == 3531)
                    this.AddBuff(sItem.buffType, 3600, true);
                if (this.whoAmI == Main.myPlayer && (double)this.gravDir == 1.0 && (sItem.mountType != -1 && this.mount.CanMount(sItem.mountType, this)))
                    this.mount.SetMount(sItem.mountType, this, false);
                if (sItem.itemId == 43 && Main.dayTime)
                    canUse = false;
                if (sItem.itemId == 544 && Main.dayTime)
                    canUse = false;
                if (sItem.itemId == 556 && Main.dayTime)
                    canUse = false;
                if (sItem.itemId == 557 && Main.dayTime)
                    canUse = false;
                if (sItem.itemId == 70 && !this.ZoneCorrupt)
                    canUse = false;
                if (sItem.itemId == 1133 && !this.ZoneJungle)
                    canUse = false;
                if (sItem.itemId == 1844 && (Main.dayTime || Main.pumpkinMoon || Main.snowMoon))
                    canUse = false;
                if (sItem.itemId == 1958 && (Main.dayTime || Main.pumpkinMoon || Main.snowMoon))
                    canUse = false;
                if (!this.SummonItemCheck())
                    canUse = false;
                if (sItem.shoot == 17 && canUse && i == Main.myPlayer)
                {
                    int i1 = (int)((double)Main.mouseX + (double)Main.screenPosition.X) / 16;
                    int j = (int)((double)Main.mouseY + (double)Main.screenPosition.Y) / 16;
                    if ((double)this.gravDir == -1.0)
                        j = (int)((double)Main.screenPosition.Y + (double)Main.screenHeight - (double)Main.mouseY) / 16;
                    Tile tile = Main.tile[i1, j];
                    if (tile.active() && ((int)tile.type == 0 || (int)tile.type == 2 || ((int)tile.type == 23 || (int)tile.type == 109) || (int)tile.type == 199))
                    {
                        WorldGen.KillTile(i1, j, false, false, true);
                        if (!Main.tile[i1, j].active())
                        {
                            if (Main.netMode == 1)
                                NetMessage.SendData(17, -1, -1, "", 4, (float)i1, (float)j, 0.0f, 0, 0, 0);
                        }
                        else
                            canUse = false;
                    }
                    else
                        canUse = false;
                }
                if (canUse)
                    canUse = this.HasAmmo(sItem, canUse);
                if (canUse)
                {
                    if (sItem.pick > 0 || sItem.axe > 0 || sItem.hammer > 0)
                        this.toolTime = 1;
                    if (this.grappling[0] > -1)
                    {
                        this.pulley = false;
                        this.pulleyDir = (byte)1;
                        if (this.controlRight)
                            this.direction = 1;
                        else if (this.controlLeft)
                            this.direction = -1;
                    }
                    this.channel = sItem.channel;
                    this.attackCD = 0;
                    this.ApplyAnimation(sItem);
                    if (sItem.useSound > 0)
                        Main.PlaySound(2, (int)this.position.X, (int)this.position.Y, sItem.useSound);
                }
                if (canUse && this.whoAmI == Main.myPlayer && (sItem.shoot >= 0 && sItem.shoot < 651) && (ProjectileID.Sets.LightPet[sItem.shoot] || Main.projPet[sItem.shoot]))
                {
                    if (ProjectileID.Sets.MinionSacrificable[sItem.shoot])
                    {
                        List<int> list = new List<int>();
                        float num4 = 0.0f;
                        for (int index1 = 0; index1 < 1000; ++index1)
                        {
                            if (Main.projectile[index1].active && Main.projectile[index1].owner == i && Main.projectile[index1].minion)
                            {
                                int index2;
                                for (index2 = 0; index2 < list.Count; ++index2)
                                {
                                    if ((double)Main.projectile[list[index2]].minionSlots > (double)Main.projectile[index1].minionSlots)
                                    {
                                        list.Insert(index2, index1);
                                        break;
                                    }
                                }
                                if (index2 == list.Count)
                                    list.Add(index1);
                                num4 += Main.projectile[index1].minionSlots;
                            }
                        }
                        float num5 = (float)ItemID.Sets.StaffMinionSlotsRequired[sItem.itemId];
                        float num6 = 0.0f;
                        int num7 = 388;
                        int index3 = -1;
                        for (int index1 = 0; index1 < list.Count; ++index1)
                        {
                            int num8 = Main.projectile[list[index1]].type;
                            if (num8 == 626)
                            {
                                list.RemoveAt(index1);
                                --index1;
                            }
                            if (num8 == 627)
                            {
                                if (Main.projectile[(int)Main.projectile[list[index1]].localAI[1]].type == 628)
                                    index3 = list[index1];
                                list.RemoveAt(index1);
                                --index1;
                            }
                        }
                        if (index3 != -1)
                        {
                            list.Add(index3);
                            list.Add((int)Main.projectile[index3].ai[0]);
                        }
                        for (int index1 = 0; index1 < list.Count && (double)num4 - (double)num6 > (double)this.maxMinions - (double)num5; ++index1)
                        {
                            int num8 = Main.projectile[list[index1]].type;
                            if (num8 != num7 && num8 != 625 && num8 != 628)
                            {
                                if (num8 == 388 && num7 == 387)
                                    num7 = 388;
                                if (num8 == 387 && num7 == 388)
                                    num7 = 387;
                                num6 += Main.projectile[list[index1]].minionSlots;
                                if (num8 == 626 || num8 == 627)
                                {
                                    Projectile projectile1 = Main.projectile[(int)Main.projectile[list[index1]].ai[0]];
                                    if (projectile1.type != 625)
                                        projectile1.localAI[1] = Main.projectile[list[index1]].localAI[1];
                                    Projectile projectile2 = Main.projectile[(int)Main.projectile[list[index1]].localAI[1]];
                                    projectile2.ai[0] = Main.projectile[list[index1]].ai[0];
                                    projectile2.ai[1] = 1f;
                                    projectile2.netUpdate = true;
                                }
                                Main.projectile[list[index1]].Kill();
                            }
                        }
                        list.Clear();
                        if ((double)num4 + (double)num5 >= 9.0)
                            AchievementsHelper.HandleSpecialEvent(this, 6);
                    }
                    else
                    {
                        for (int index = 0; index < 1000; ++index)
                        {
                            if (Main.projectile[index].active && Main.projectile[index].owner == i && Main.projectile[index].type == sItem.shoot)
                                Main.projectile[index].Kill();
                            if (sItem.shoot == 72)
                            {
                                if (Main.projectile[index].active && Main.projectile[index].owner == i && Main.projectile[index].type == 86)
                                    Main.projectile[index].Kill();
                                if (Main.projectile[index].active && Main.projectile[index].owner == i && Main.projectile[index].type == 87)
                                    Main.projectile[index].Kill();
                            }
                        }
                    }
                }
            }
            if (!this.controlUseItem)
            {
                int num4 = this.channel ? 1 : 0;
                this.channel = false;
            }
            if (this.itemAnimation > 0)
            {
                this.itemAnimationMax = !sItem.melee ? sItem.useAnimation : (int)((double)sItem.useAnimation * (double)this.meleeSpeed);
                if (sItem.mana > 0 && !flag1 && (sItem.itemId != (int)sbyte.MaxValue || !this.spaceGun))
                    this.manaRegenDelay = (int)this.maxRegenDelay;
                if (Main.dedServ)
                {
                    this.itemHeight = sItem.height;
                    this.itemWidth = sItem.width;
                }
                else
                {
                    this.itemHeight = Main.itemTexture[sItem.itemId].Height;
                    this.itemWidth = Main.itemTexture[sItem.itemId].Width;
                }
                --this.itemAnimation;
                if (!Main.dedServ)
                {
                    if (sItem.useStyle == 1)
                    {
                        if (sItem.itemId > -1 && Item.claw[sItem.itemId])
                        {
                            if ((double)this.itemAnimation < (double)this.itemAnimationMax * 0.333)
                            {
                                float num4 = 10f;
                                this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - (double)num4) * (double)this.direction);
                                this.itemLocation.Y = this.position.Y + 26f + num2;
                            }
                            else if ((double)this.itemAnimation < (double)this.itemAnimationMax * 0.666)
                            {
                                float num4 = 8f;
                                this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - (double)num4) * (double)this.direction);
                                this.itemLocation.Y = this.position.Y + 24f + num2;
                            }
                            else
                            {
                                float num4 = 6f;
                                this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 - ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - (double)num4) * (double)this.direction);
                                this.itemLocation.Y = this.position.Y + 20f + num2;
                            }
                            this.itemRotation = (float)(((double)this.itemAnimation / (double)this.itemAnimationMax - 0.5) * (double)-this.direction * 3.5 - (double)this.direction * 0.300000011920929);
                        }
                        else
                        {
                            if ((double)this.itemAnimation < (double)this.itemAnimationMax * 0.333)
                            {
                                float num4 = 10f;
                                if (Main.itemTexture[sItem.itemId].Width > 32)
                                    num4 = 14f;
                                if (Main.itemTexture[sItem.itemId].Width >= 52)
                                    num4 = 24f;
                                if (Main.itemTexture[sItem.itemId].Width >= 64)
                                    num4 = 28f;
                                if (Main.itemTexture[sItem.itemId].Width >= 92)
                                    num4 = 38f;
                                if (sItem.itemId == 2330 || sItem.itemId == 2320 || sItem.itemId == 2341)
                                    num4 += 8f;
                                this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - (double)num4) * (double)this.direction);
                                this.itemLocation.Y = this.position.Y + 24f + num2;
                            }
                            else if ((double)this.itemAnimation < (double)this.itemAnimationMax * 0.666)
                            {
                                float num4 = 10f;
                                if (Main.itemTexture[sItem.itemId].Width > 32)
                                    num4 = 18f;
                                if (Main.itemTexture[sItem.itemId].Width >= 52)
                                    num4 = 24f;
                                if (Main.itemTexture[sItem.itemId].Width >= 64)
                                    num4 = 28f;
                                if (Main.itemTexture[sItem.itemId].Width >= 92)
                                    num4 = 38f;
                                if (sItem.itemId == 2330 || sItem.itemId == 2320 || sItem.itemId == 2341)
                                    num4 += 4f;
                                this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - (double)num4) * (double)this.direction);
                                float num5 = 10f;
                                if (Main.itemTexture[sItem.itemId].Height > 32)
                                    num5 = 8f;
                                if (Main.itemTexture[sItem.itemId].Height > 52)
                                    num5 = 12f;
                                if (Main.itemTexture[sItem.itemId].Height > 64)
                                    num5 = 14f;
                                if (sItem.itemId == 2330 || sItem.itemId == 2320 || sItem.itemId == 2341)
                                    num5 += 4f;
                                this.itemLocation.Y = this.position.Y + num5 + num2;
                            }
                            else
                            {
                                float num4 = 6f;
                                if (Main.itemTexture[sItem.itemId].Width > 32)
                                    num4 = 14f;
                                if (Main.itemTexture[sItem.itemId].Width >= 48)
                                    num4 = 18f;
                                if (Main.itemTexture[sItem.itemId].Width >= 52)
                                    num4 = 24f;
                                if (Main.itemTexture[sItem.itemId].Width >= 64)
                                    num4 = 28f;
                                if (Main.itemTexture[sItem.itemId].Width >= 92)
                                    num4 = 38f;
                                if (sItem.itemId == 2330 || sItem.itemId == 2320 || sItem.itemId == 2341)
                                    num4 += 4f;
                                this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 - ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - (double)num4) * (double)this.direction);
                                float num5 = 10f;
                                if (Main.itemTexture[sItem.itemId].Height > 32)
                                    num5 = 10f;
                                if (Main.itemTexture[sItem.itemId].Height > 52)
                                    num5 = 12f;
                                if (Main.itemTexture[sItem.itemId].Height > 64)
                                    num5 = 14f;
                                if (sItem.itemId == 2330 || sItem.itemId == 2320 || sItem.itemId == 2341)
                                    num5 += 4f;
                                this.itemLocation.Y = this.position.Y + num5 + num2;
                            }
                            this.itemRotation = (float)(((double)this.itemAnimation / (double)this.itemAnimationMax - 0.5) * (double)-this.direction * 3.5 - (double)this.direction * 0.300000011920929);
                        }
                        if ((double)this.gravDir == -1.0)
                        {
                            this.itemRotation = -this.itemRotation;
                            this.itemLocation.Y = (float)((double)this.position.Y + (double)this.height + ((double)this.position.Y - (double)this.itemLocation.Y));
                        }
                    }
                    else if (sItem.useStyle == 2)
                    {
                        this.itemRotation = (float)((double)this.itemAnimation / (double)this.itemAnimationMax * (double)this.direction * 2.0 + -1.39999997615814 * (double)this.direction);
                        if ((double)this.itemAnimation < (double)this.itemAnimationMax * 0.5)
                        {
                            this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - 9.0 - (double)this.itemRotation * 12.0 * (double)this.direction) * (double)this.direction);
                            this.itemLocation.Y = (float)((double)this.position.Y + 38.0 + (double)this.itemRotation * (double)this.direction * 4.0) + num2;
                        }
                        else
                        {
                            this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - 9.0 - (double)this.itemRotation * 16.0 * (double)this.direction) * (double)this.direction);
                            this.itemLocation.Y = (float)((double)this.position.Y + 38.0 + (double)this.itemRotation * (double)this.direction) + num2;
                        }
                        if ((double)this.gravDir == -1.0)
                        {
                            this.itemRotation = -this.itemRotation;
                            this.itemLocation.Y = (float)((double)this.position.Y + (double)this.height + ((double)this.position.Y - (double)this.itemLocation.Y));
                        }
                    }
                    else if (sItem.useStyle == 3)
                    {
                        if ((double)this.itemAnimation > (double)this.itemAnimationMax * 0.666)
                        {
                            this.itemLocation.X = -1000f;
                            this.itemLocation.Y = -1000f;
                            this.itemRotation = -1.3f * (float)this.direction;
                        }
                        else
                        {
                            this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - 4.0) * (double)this.direction);
                            this.itemLocation.Y = this.position.Y + 24f + num2;
                            float num4 = (float)((double)this.itemAnimation / (double)this.itemAnimationMax * (double)Main.itemTexture[sItem.itemId].Width * (double)this.direction * (double)sItem.scale * 1.20000004768372) - (float)(10 * this.direction);
                            if ((double)num4 > -4.0 && this.direction == -1)
                                num4 = -8f;
                            if ((double)num4 < 4.0 && this.direction == 1)
                                num4 = 8f;
                            this.itemLocation.X -= num4;
                            this.itemRotation = 0.8f * (float)this.direction;
                        }
                        if ((double)this.gravDir == -1.0)
                        {
                            this.itemRotation = -this.itemRotation;
                            this.itemLocation.Y = (float)((double)this.position.Y + (double)this.height + ((double)this.position.Y - (double)this.itemLocation.Y));
                        }
                    }
                    else if (sItem.useStyle == 4)
                    {
                        this.itemRotation = 0.0f;
                        this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + ((double)Main.itemTexture[sItem.itemId].Width * 0.5 - 9.0 - (double)this.itemRotation * 14.0 * (double)this.direction - 4.0) * (double)this.direction);
                        this.itemLocation.Y = (float)((double)this.position.Y + (double)Main.itemTexture[sItem.itemId].Height * 0.5 + 4.0) + num2;
                        if ((double)this.gravDir == -1.0)
                        {
                            this.itemRotation = -this.itemRotation;
                            this.itemLocation.Y = (float)((double)this.position.Y + (double)this.height + ((double)this.position.Y - (double)this.itemLocation.Y));
                        }
                    }
                    else if (sItem.useStyle == 5)
                    {
                        if (Item.staff[sItem.itemId])
                        {
                            float num4 = 6f;
                            if (sItem.itemId == 3476)
                                num4 = 14f;
                            this.itemLocation = this.MountedCenter;
                            this.itemLocation += Utils.ToRotationVector2(this.itemRotation) * num4 * (float)this.direction;
                        }
                        else
                        {
                            this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 - (double)Main.itemTexture[sItem.itemId].Width * 0.5) - (float)(this.direction * 2);
                            this.itemLocation.Y = this.MountedCenter.Y - (float)Main.itemTexture[sItem.itemId].Height * 0.5f;
                        }
                    }
                }
            }
            else if (sItem.holdStyle == 1 && !this.pulley)
            {
                if (Main.dedServ)
                    this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + 20.0 * (double)this.direction);
                else if (sItem.itemId == 930)
                {
                    this.itemLocation.X = (float)((double)this.position.X + (double)(this.width / 2) * 0.5 - 12.0) - (float)(2 * this.direction);
                    float x = this.position.X + (float)(this.width / 2) + (float)(38 * this.direction);
                    if (this.direction == 1)
                        x -= 10f;
                    float y = this.MountedCenter.Y - 4f * this.gravDir;
                    if ((double)this.gravDir == -1.0)
                        y -= 8f;
                    this.RotateRelativePoint(ref x, ref y);
                    int Type = 0;
                    for (int index = 54; index < 58; ++index)
                    {
                        if (this.inventory[index].stack > 0 && this.inventory[index].ammo == 931)
                        {
                            Type = this.inventory[index].itemId;
                            break;
                        }
                    }
                    if (Type == 0)
                    {
                        for (int index = 0; index < 54; ++index)
                        {
                            if (this.inventory[index].stack > 0 && this.inventory[index].ammo == 931)
                            {
                                Type = this.inventory[index].itemId;
                                break;
                            }
                        }
                    }
                    if (Type == 931)
                        Type = (int)sbyte.MaxValue;
                    else if (Type == 1614)
                        Type = 187;
                    if (Type > 0)
                    {
                        int index = Dust.NewDust(new Vector2(x, y + this.gfxOffY), 6, 6, Type, 0.0f, 0.0f, 100, new Color(), 1.6f);
                        Main.dust[index].noGravity = true;
                        Main.dust[index].velocity.Y -= 4f * this.gravDir;
                    }
                }
                else if (sItem.itemId == 968)
                {
                    this.itemLocation.X = this.position.X + (float)this.width * 0.5f + (float)(8 * this.direction);
                    if (this.whoAmI == Main.myPlayer)
                    {
                        int index1 = (int)((double)this.itemLocation.X + (double)Main.itemTexture[sItem.itemId].Width * 0.800000011920929 * (double)this.direction) / 16;
                        int index2 = (int)((double)this.itemLocation.Y + (double)num2 + (double)(Main.itemTexture[sItem.itemId].Height / 2)) / 16;
                        if (Main.tile[index1, index2] == null)
                            Main.tile[index1, index2] = new Tile();
                        if (Main.tile[index1, index2].active() && (int)Main.tile[index1, index2].type == 215 && (int)Main.tile[index1, index2].frameY < 54)
                        {
                            ++this.miscTimer;
                            if (Main.rand.Next(5) == 0)
                                ++this.miscTimer;
                            if (this.miscTimer > 900)
                            {
                                this.miscTimer = 0;
                                sItem.SetDefaults(969, false);
                                if (this.selectedItem == 58)
                                    Main.mouseItem.SetDefaults(969, false);
                                for (int index3 = 0; index3 < 58; ++index3)
                                {
                                    if (this.inventory[index3].itemId == sItem.itemId && index3 != this.selectedItem && this.inventory[index3].stack < this.inventory[index3].maxStack)
                                    {
                                        Main.PlaySound(7, -1, -1, 1);
                                        ++this.inventory[index3].stack;
                                        sItem.SetDefaults(0, false);
                                        if (this.selectedItem == 58)
                                            Main.mouseItem.SetDefaults(0, false);
                                    }
                                }
                            }
                        }
                        else
                            this.miscTimer = 0;
                    }
                }
                else if (sItem.itemId == 856)
                    this.itemLocation.X = this.position.X + (float)this.width * 0.5f + (float)(4 * this.direction);
                else if (sItem.fishingPole > 0)
                {
                    this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + (double)Main.itemTexture[sItem.itemId].Width * 0.180000007152557 * (double)this.direction);
                }
                else
                {
                    this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 + ((double)Main.itemTexture[sItem.itemId].Width * 0.5 + 2.0) * (double)this.direction);
                    if (sItem.itemId == 282 || sItem.itemId == 286 || sItem.itemId == 3112)
                    {
                        this.itemLocation.X -= (float)(this.direction * 2);
                        this.itemLocation.Y += 4f;
                    }
                    else if (sItem.itemId == 3002)
                    {
                        this.itemLocation.X -= (float)(4 * this.direction);
                        this.itemLocation.Y += 2f;
                    }
                }
                this.itemLocation.Y = this.position.Y + 24f + num2;
                if (sItem.itemId == 856)
                    this.itemLocation.Y = this.position.Y + 34f + num2;
                if (sItem.itemId == 930)
                    this.itemLocation.Y = this.position.Y + 9f + num2;
                if (sItem.fishingPole > 0)
                    this.itemLocation.Y += 4f;
                else if (sItem.itemId == 3476)
                {
                    this.itemLocation.X = this.Center.X + (float)(14 * this.direction);
                    this.itemLocation.Y = this.MountedCenter.Y;
                }
                this.itemRotation = 0.0f;
                if ((double)this.gravDir == -1.0)
                {
                    this.itemRotation = -this.itemRotation;
                    this.itemLocation.Y = (float)((double)this.position.Y + (double)this.height + ((double)this.position.Y - (double)this.itemLocation.Y)) + num2;
                    if (sItem.itemId == 930)
                        this.itemLocation.Y -= 24f;
                }
            }
            else if (sItem.holdStyle == 2 && !this.pulley)
            {
                if (sItem.itemId == 946)
                {
                    this.itemRotation = 0.0f;
                    this.itemLocation.X = this.position.X + (float)this.width * 0.5f - (float)(16 * this.direction);
                    this.itemLocation.Y = this.position.Y + 22f + num2;
                    this.fallStart = (int)((double)this.position.Y / 16.0);
                    if ((double)this.gravDir == -1.0)
                    {
                        this.itemRotation = -this.itemRotation;
                        this.itemLocation.Y = (float)((double)this.position.Y + (double)this.height + ((double)this.position.Y - (double)this.itemLocation.Y));
                        if ((double)this.velocity.Y < -2.0)
                            this.velocity.Y = -2f;
                    }
                    else if ((double)this.velocity.Y > 2.0)
                        this.velocity.Y = 2f;
                }
                else
                {
                    this.itemLocation.X = this.position.X + (float)this.width * 0.5f + (float)(6 * this.direction);
                    this.itemLocation.Y = this.position.Y + 16f + num2;
                    this.itemRotation = 0.79f * (float)-this.direction;
                    if ((double)this.gravDir == -1.0)
                    {
                        this.itemRotation = -this.itemRotation;
                        this.itemLocation.Y = (float)((double)this.position.Y + (double)this.height + ((double)this.position.Y - (double)this.itemLocation.Y));
                    }
                }
            }
            else if (sItem.holdStyle == 3 && !this.pulley && !Main.dedServ)
            {
                this.itemLocation.X = (float)((double)this.position.X + (double)this.width * 0.5 - (double)Main.itemTexture[sItem.itemId].Width * 0.5) - (float)(this.direction * 2);
                this.itemLocation.Y = this.MountedCenter.Y - (float)Main.itemTexture[sItem.itemId].Height * 0.5f;
                this.itemRotation = 0.0f;
            }
            if (((sItem.itemId == 974 || sItem.itemId == 8 || (sItem.itemId == 1245 || sItem.itemId == 2274) || (sItem.itemId == 3004 || sItem.itemId == 3045 || sItem.itemId == 3114) || sItem.itemId >= 427 && sItem.itemId <= 433) && !this.wet || (sItem.itemId == 523 || sItem.itemId == 1333)) && !this.pulley)
            {
                float R = 1f;
                float G = 0.95f;
                float B = 0.8f;
                int num4 = 0;
                if (sItem.itemId == 523)
                    num4 = 8;
                else if (sItem.itemId == 974)
                    num4 = 9;
                else if (sItem.itemId == 1245)
                    num4 = 10;
                else if (sItem.itemId == 1333)
                    num4 = 11;
                else if (sItem.itemId == 2274)
                    num4 = 12;
                else if (sItem.itemId == 3004)
                    num4 = 13;
                else if (sItem.itemId == 3045)
                    num4 = 14;
                else if (sItem.itemId == 3114)
                    num4 = 15;
                else if (sItem.itemId >= 427)
                    num4 = sItem.itemId - 426;
                if (num4 == 1)
                {
                    R = 0.0f;
                    G = 0.1f;
                    B = 1.3f;
                }
                else if (num4 == 2)
                {
                    R = 1f;
                    G = 0.1f;
                    B = 0.1f;
                }
                else if (num4 == 3)
                {
                    R = 0.0f;
                    G = 1f;
                    B = 0.1f;
                }
                else if (num4 == 4)
                {
                    R = 0.9f;
                    G = 0.0f;
                    B = 0.9f;
                }
                else if (num4 == 5)
                {
                    R = 1.3f;
                    G = 1.3f;
                    B = 1.3f;
                }
                else if (num4 == 6)
                {
                    R = 0.9f;
                    G = 0.9f;
                    B = 0.0f;
                }
                else if (num4 == 7)
                {
                    R = (float)(0.5 * (double)Main.demonTorch + 1.0 * (1.0 - (double)Main.demonTorch));
                    G = 0.3f;
                    B = (float)(1.0 * (double)Main.demonTorch + 0.5 * (1.0 - (double)Main.demonTorch));
                }
                else if (num4 == 8)
                {
                    B = 0.7f;
                    R = 0.85f;
                    G = 1f;
                }
                else if (num4 == 9)
                {
                    B = 1f;
                    R = 0.7f;
                    G = 0.85f;
                }
                else if (num4 == 10)
                {
                    B = 0.0f;
                    R = 1f;
                    G = 0.5f;
                }
                else if (num4 == 11)
                {
                    B = 0.8f;
                    R = 1.25f;
                    G = 1.25f;
                }
                else if (num4 == 12)
                {
                    R *= 0.75f;
                    G *= 1.35f;
                    B *= 1.5f;
                }
                else if (num4 == 13)
                {
                    R = 0.95f;
                    G = 0.65f;
                    B = 1.3f;
                }
                else if (num4 == 14)
                {
                    R = (float)Main.DiscoR / (float)byte.MaxValue;
                    G = (float)Main.DiscoG / (float)byte.MaxValue;
                    B = (float)Main.DiscoB / (float)byte.MaxValue;
                }
                else if (num4 == 15)
                {
                    R = 1f;
                    G = 0.0f;
                    B = 1f;
                }
                int num5 = num4;
                int Type;
                switch (num5)
                {
                    case 0:
                        Type = 6;
                        break;
                    case 8:
                        Type = 75;
                        break;
                    case 9:
                        Type = 135;
                        break;
                    case 10:
                        Type = 158;
                        break;
                    case 11:
                        Type = 169;
                        break;
                    case 12:
                        Type = 156;
                        break;
                    case 13:
                        Type = 234;
                        break;
                    case 14:
                        Type = 66;
                        break;
                    case 15:
                        Type = 242;
                        break;
                    default:
                        Type = 58 + num5;
                        break;
                }
                int maxValue = 30;
                if (this.itemAnimation > 0)
                    maxValue = 7;
                if (this.direction == -1)
                {
                    if (Main.rand.Next(maxValue) == 0)
                    {
                        int index = Dust.NewDust(new Vector2(this.itemLocation.X - 16f, this.itemLocation.Y - 14f * this.gravDir), 4, 4, Type, 0.0f, 0.0f, 100, new Color(), 1f);
                        if (Main.rand.Next(3) != 0)
                            Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.3f;
                        Main.dust[index].velocity.Y -= 1.5f;
                        Main.dust[index].position = this.RotatedRelativePoint(Main.dust[index].position, true);
                        if (Type == 66)
                        {
                            Main.dust[index].color = new Color(Main.DiscoR, Main.DiscoG, Main.DiscoB);
                            Main.dust[index].noGravity = true;
                        }
                    }
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X - 12f + this.velocity.X, this.itemLocation.Y - 14f + this.velocity.Y), true), R, G, B);
                }
                else
                {
                    if (Main.rand.Next(maxValue) == 0)
                    {
                        int index = Dust.NewDust(new Vector2(this.itemLocation.X + 6f, this.itemLocation.Y - 14f * this.gravDir), 4, 4, Type, 0.0f, 0.0f, 100, new Color(), 1f);
                        if (Main.rand.Next(3) != 0)
                            Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.3f;
                        Main.dust[index].velocity.Y -= 1.5f;
                        Main.dust[index].position = this.RotatedRelativePoint(Main.dust[index].position, true);
                        if (Type == 66)
                        {
                            Main.dust[index].color = new Color(Main.DiscoR, Main.DiscoG, Main.DiscoB);
                            Main.dust[index].noGravity = true;
                        }
                    }
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X + 12f + this.velocity.X, this.itemLocation.Y - 14f + this.velocity.Y), true), R, G, B);
                }
            }
            if ((sItem.itemId == 105 || sItem.itemId == 713) && (!this.wet && !this.pulley))
            {
                int maxValue = 20;
                if (this.itemAnimation > 0)
                    maxValue = 7;
                if (this.direction == -1)
                {
                    if (Main.rand.Next(maxValue) == 0)
                    {
                        int index = Dust.NewDust(new Vector2(this.itemLocation.X - 12f, this.itemLocation.Y - 20f * this.gravDir), 4, 4, 6, 0.0f, 0.0f, 100, new Color(), 1f);
                        if (Main.rand.Next(3) != 0)
                            Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.3f;
                        Main.dust[index].velocity.Y -= 1.5f;
                        Main.dust[index].position = this.RotatedRelativePoint(Main.dust[index].position, true);
                    }
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X - 16f + this.velocity.X, this.itemLocation.Y - 14f), true), 1f, 0.95f, 0.8f);
                }
                else
                {
                    if (Main.rand.Next(maxValue) == 0)
                    {
                        int index = Dust.NewDust(new Vector2(this.itemLocation.X + 4f, this.itemLocation.Y - 20f * this.gravDir), 4, 4, 6, 0.0f, 0.0f, 100, new Color(), 1f);
                        if (Main.rand.Next(3) != 0)
                            Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.3f;
                        Main.dust[index].velocity.Y -= 1.5f;
                        Main.dust[index].position = this.RotatedRelativePoint(Main.dust[index].position, true);
                    }
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X + 6f + this.velocity.X, this.itemLocation.Y - 14f), true), 1f, 0.95f, 0.8f);
                }
            }
            else if (sItem.itemId == 148 && !this.wet)
            {
                int maxValue = 10;
                if (this.itemAnimation > 0)
                    maxValue = 7;
                if (this.direction == -1)
                {
                    if (Main.rand.Next(maxValue) == 0)
                    {
                        int index = Dust.NewDust(new Vector2(this.itemLocation.X - 12f, this.itemLocation.Y - 20f * this.gravDir), 4, 4, 172, 0.0f, 0.0f, 100, new Color(), 1f);
                        if (Main.rand.Next(3) != 0)
                            Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.3f;
                        Main.dust[index].velocity.Y -= 1.5f;
                        Main.dust[index].position = this.RotatedRelativePoint(Main.dust[index].position, true);
                    }
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X - 16f + this.velocity.X, this.itemLocation.Y - 14f), true), 0.0f, 0.5f, 1f);
                }
                else
                {
                    if (Main.rand.Next(maxValue) == 0)
                    {
                        int index = Dust.NewDust(new Vector2(this.itemLocation.X + 4f, this.itemLocation.Y - 20f * this.gravDir), 4, 4, 172, 0.0f, 0.0f, 100, new Color(), 1f);
                        if (Main.rand.Next(3) != 0)
                            Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.3f;
                        Main.dust[index].velocity.Y -= 1.5f;
                        Main.dust[index].position = this.RotatedRelativePoint(Main.dust[index].position, true);
                    }
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X + 6f + this.velocity.X, this.itemLocation.Y - 14f), true), 0.0f, 0.5f, 1f);
                }
            }
            else if (sItem.itemId == 3117 && !this.wet)
            {
                this.itemLocation.X -= (float)(this.direction * 4);
                int maxValue = 10;
                if (this.itemAnimation > 0)
                    maxValue = 7;
                if (this.direction == -1)
                {
                    if (Main.rand.Next(maxValue) == 0)
                    {
                        int index = Dust.NewDust(new Vector2(this.itemLocation.X - 10f, this.itemLocation.Y - 20f * this.gravDir), 4, 4, 242, 0.0f, 0.0f, 100, new Color(), 1f);
                        if (Main.rand.Next(3) != 0)
                            Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.3f;
                        Main.dust[index].velocity.Y -= 1.5f;
                        Main.dust[index].position = this.RotatedRelativePoint(Main.dust[index].position, true);
                    }
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X - 16f + this.velocity.X, this.itemLocation.Y - 14f), true), 0.9f, 0.1f, 0.75f);
                }
                else
                {
                    if (Main.rand.Next(maxValue) == 0)
                    {
                        int index = Dust.NewDust(new Vector2(this.itemLocation.X + 6f, this.itemLocation.Y - 20f * this.gravDir), 4, 4, 242, 0.0f, 0.0f, 100, new Color(), 1f);
                        if (Main.rand.Next(3) != 0)
                            Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.3f;
                        Main.dust[index].velocity.Y -= 1.5f;
                        Main.dust[index].position = this.RotatedRelativePoint(Main.dust[index].position, true);
                    }
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X + 6f + this.velocity.X, this.itemLocation.Y - 14f), true), 0.9f, 0.1f, 0.75f);
                }
            }
            if (sItem.itemId == 282 && !this.pulley)
            {
                if (this.direction == -1)
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X - 16f + this.velocity.X, this.itemLocation.Y - 14f), true), 0.7f, 1f, 0.8f);
                else
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X + 6f + this.velocity.X, this.itemLocation.Y - 14f), true), 0.7f, 1f, 0.8f);
            }
            if (sItem.itemId == 3002 && !this.pulley)
            {
                float R = 1.05f;
                float G = 0.95f;
                float B = 0.55f;
                if (this.direction == -1)
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X - 16f + this.velocity.X, this.itemLocation.Y - 14f), true), R, G, B);
                else
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X + 6f + this.velocity.X, this.itemLocation.Y - 14f), true), R, G, B);
                ++this.spelunkerTimer;
                if ((int)this.spelunkerTimer >= 10)
                {
                    this.spelunkerTimer = (byte)0;
                    int num4 = 30;
                    int num5 = (int)this.Center.X / 16;
                    int num6 = (int)this.Center.Y / 16;
                    for (int index1 = num5 - num4; index1 <= num5 + num4; ++index1)
                    {
                        for (int index2 = num6 - num4; index2 <= num6 + num4; ++index2)
                        {
                            if (Main.rand.Next(4) == 0 && ((double)new Vector2((float)(num5 - index1), (float)(num6 - index2)).Length() < (double)num4 && index1 > 0 && (index1 < Main.maxTilesX - 1 && index2 > 0) && (index2 < Main.maxTilesY - 1 && Main.tile[index1, index2] != null && Main.tile[index1, index2].active())))
                            {
                                bool flag2 = false;
                                if ((int)Main.tile[index1, index2].type == 185 && (int)Main.tile[index1, index2].frameY == 18)
                                {
                                    if ((int)Main.tile[index1, index2].frameX >= 576 && (int)Main.tile[index1, index2].frameX <= 882)
                                        flag2 = true;
                                }
                                else if ((int)Main.tile[index1, index2].type == 186 && (int)Main.tile[index1, index2].frameX >= 864 && (int)Main.tile[index1, index2].frameX <= 1170)
                                    flag2 = true;
                                if (flag2 || Main.tileSpelunker[(int)Main.tile[index1, index2].type] || Main.tileAlch[(int)Main.tile[index1, index2].type] && (int)Main.tile[index1, index2].type != 82)
                                {
                                    int index3 = Dust.NewDust(new Vector2((float)(index1 * 16), (float)(index2 * 16)), 16, 16, 204, 0.0f, 0.0f, 150, new Color(), 0.3f);
                                    Main.dust[index3].fadeIn = 0.75f;
                                    Main.dust[index3].velocity *= 0.1f;
                                    Main.dust[index3].noLight = true;
                                }
                            }
                        }
                    }
                }
            }
            if (sItem.itemId == 286 && !this.pulley)
            {
                if (this.direction == -1)
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X - 16f + this.velocity.X, this.itemLocation.Y - 14f), true), 0.7f, 0.8f, 1f);
                else
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X + 6f + this.velocity.X, this.itemLocation.Y - 14f), true), 0.7f, 0.8f, 1f);
            }
            if (sItem.itemId == 3112 && !this.pulley)
            {
                if (this.direction == -1)
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X - 16f + this.velocity.X, this.itemLocation.Y - 14f), true), 1f, 0.6f, 0.85f);
                else
                    Lighting.AddLight(this.RotatedRelativePoint(new Vector2(this.itemLocation.X + 6f + this.velocity.X, this.itemLocation.Y - 14f), true), 1f, 0.6f, 0.85f);
            }
            this.releaseUseItem = !this.controlUseItem;
            if (this.itemTime > 0)
            {
                --this.itemTime;
                if (this.itemTime == 0 && this.whoAmI == Main.myPlayer)
                {
                    switch (sItem.itemId)
                    {
                        case 65:
                        case 676:
                        case 723:
                        case 724:
                        case 989:
                        case 1226:
                        case 1227:
                            Main.PlaySound(25, -1, -1, 1);
                            for (int index1 = 0; index1 < 5; ++index1)
                            {
                                int index2 = Dust.NewDust(this.position, this.width, this.height, 45, 0.0f, 0.0f, (int)byte.MaxValue, new Color(), (float)Main.rand.Next(20, 26) * 0.1f);
                                Main.dust[index2].noLight = true;
                                Main.dust[index2].noGravity = true;
                                Main.dust[index2].velocity *= 0.5f;
                            }
                            break;
                    }
                }
            }
            if (i == Main.myPlayer)
            {
                bool flag2 = true;
                switch (sItem.itemId)
                {
                    case 65:
                    case 676:
                    case 723:
                    case 724:
                    case 757:
                    case 674:
                    case 675:
                    case 989:
                    case 1226:
                    case 1227:
                        if (this.itemAnimation != this.itemAnimationMax - 1)
                        {
                            flag2 = false;
                            break;
                        }
                        break;
                }
                if (sItem.shoot > 0 && this.itemAnimation > 0 && (this.itemTime == 0 && flag2))
                {
                    int shoot = sItem.shoot;
                    float speed = sItem.shootSpeed;
                    if (this.inventory[this.selectedItem].thrown && (double)speed < 16.0)
                    {
                        speed *= this.thrownVelocity;
                        if ((double)speed > 16.0)
                            speed = 16f;
                    }
                    if (sItem.melee && shoot != 25 && (shoot != 26 && shoot != 35))
                        speed /= this.meleeSpeed;
                    bool canShoot = false;
                    int Damage = num3;
                    float KnockBack = sItem.knockBack;
                    if (shoot == 13 || shoot == 32 || shoot == 315 || (shoot >= 230 && shoot <= 235 || shoot == 331))
                    {
                        this.grappling[0] = -1;
                        this.grapCount = 0;
                        for (int index = 0; index < 1000; ++index)
                        {
                            if (Main.projectile[index].active && Main.projectile[index].owner == i)
                            {
                                if (Main.projectile[index].type == 13)
                                    Main.projectile[index].Kill();
                                if (Main.projectile[index].type == 331)
                                    Main.projectile[index].Kill();
                                if (Main.projectile[index].type == 315)
                                    Main.projectile[index].Kill();
                                if (Main.projectile[index].type >= 230 && Main.projectile[index].type <= 235)
                                    Main.projectile[index].Kill();
                            }
                        }
                    }
                    if (sItem.useAmmo > 0)
                        this.PickAmmo(sItem, ref shoot, ref speed, ref canShoot, ref Damage, ref KnockBack, ItemID.Sets.gunProj[sItem.itemId]);
                    else
                        canShoot = true;
                    if (sItem.itemId == 3475 || sItem.itemId == 3540)
                    {
                        KnockBack = sItem.knockBack;
                        Damage = num3;
                        speed = sItem.shootSpeed;
                    }
                    if (sItem.itemId == 71)
                        canShoot = false;
                    if (sItem.itemId == 72)
                        canShoot = false;
                    if (sItem.itemId == 73)
                        canShoot = false;
                    if (sItem.itemId == 74)
                        canShoot = false;
                    if (sItem.itemId == 1254 && shoot == 14)
                        shoot = 242;
                    if (sItem.itemId == 1255 && shoot == 14)
                        shoot = 242;
                    if (sItem.itemId == 1265 && shoot == 14)
                        shoot = 242;
                    if (sItem.itemId == 3542)
                    {
                        if (Main.rand.Next(100) < 20)
                        {
                            ++shoot;
                            Damage *= 3;
                        }
                        else
                            --speed;
                    }
                    if (shoot == 73)
                    {
                        for (int index = 0; index < 1000; ++index)
                        {
                            if (Main.projectile[index].active && Main.projectile[index].owner == i)
                            {
                                if (Main.projectile[index].type == 73)
                                    shoot = 74;
                                if (shoot == 74 && Main.projectile[index].type == 74)
                                    canShoot = false;
                            }
                        }
                    }
                    if (canShoot)
                    {
                        if (sItem.summon)
                        {
                            KnockBack += this.minionKB;
                            Damage = (int)((double)Damage * (double)this.minionDamage);
                        }
                        if (shoot == 228)
                            KnockBack = 0.0f;
                        if (sItem.melee && this.kbGlove)
                            KnockBack *= 2f;
                        if (this.kbBuff)
                            KnockBack *= 1.5f;
                        if (sItem.ranged && this.shroomiteStealth)
                            KnockBack *= (float)(1.0 + (1.0 - (double)this.stealth) * 0.5);
                        if (sItem.ranged && this.setVortex)
                            KnockBack *= (float)(1.0 + (1.0 - (double)this.stealth) * 0.5);
                        if (shoot == 1 && sItem.itemId == 120)
                            shoot = 2;
                        if (sItem.itemId == 682)
                            shoot = 117;
                        if (sItem.itemId == 725)
                            shoot = 120;
                        if (sItem.itemId == 2796)
                            shoot = 442;
                        if (sItem.itemId == 2223)
                            shoot = 357;
                        this.itemTime = sItem.useTime;
                        Vector2 vector2_1 = this.RotatedRelativePoint(this.MountedCenter, true);
                        Vector2 vector2_2 = Utils.RotatedBy(Vector2.UnitX, (double)this.fullRotation, new Vector2());
                        Vector2 vector2_3 = Main.MouseWorld - vector2_1;
                        if (vector2_3 != Vector2.Zero)
                            vector2_3.Normalize();
                        if ((double)Vector2.Dot(vector2_2, vector2_3) > 0.0)
                            this.ChangeDir(1);
                        else
                            this.ChangeDir(-1);
                        if (sItem.itemId == 3094 || sItem.itemId == 3378 || sItem.itemId == 3543)
                            vector2_1.Y = this.position.Y + (float)(this.height / 3);
                        if (shoot == 9)
                        {
                            vector2_1 = new Vector2((float)((double)this.position.X + (double)this.width * 0.5 + (double)(Main.rand.Next(201) * -this.direction) + ((double)Main.mouseX + (double)Main.screenPosition.X - (double)this.position.X)), this.MountedCenter.Y - 600f);
                            KnockBack = 0.0f;
                            Damage *= 2;
                        }
                        if (sItem.itemId == 986 || sItem.itemId == 281)
                        {
                            vector2_1.X += (float)(6 * this.direction);
                            vector2_1.Y -= 6f * this.gravDir;
                        }
                        if (sItem.itemId == 3007)
                        {
                            vector2_1.X -= (float)(4 * this.direction);
                            vector2_1.Y -= 1f * this.gravDir;
                        }
                        float f1 = (float)Main.mouseX + Main.screenPosition.X - vector2_1.X;
                        float f2 = (float)Main.mouseY + Main.screenPosition.Y - vector2_1.Y;
                        if ((double)this.gravDir == -1.0)
                            f2 = Main.screenPosition.Y + (float)Main.screenHeight - (float)Main.mouseY - vector2_1.Y;
                        float num4 = (float)Math.Sqrt((double)f1 * (double)f1 + (double)f2 * (double)f2);
                        float num5 = num4;
                        float num6;
                        if (float.IsNaN(f1) && float.IsNaN(f2) || (double)f1 == 0.0 && (double)f2 == 0.0)
                        {
                            f1 = (float)this.direction;
                            f2 = 0.0f;
                            num6 = speed;
                        }
                        else
                            num6 = speed / num4;
                        if (sItem.itemId == 1929 || sItem.itemId == 2270)
                        {
                            f1 += (float)Main.rand.Next(-50, 51) * 0.03f / num6;
                            f2 += (float)Main.rand.Next(-50, 51) * 0.03f / num6;
                        }
                        float num7 = f1 * num6;
                        float num8 = f2 * num6;
                        if (sItem.itemId == 757)
                            Damage = (int)((double)Damage * 1.25);
                        if (shoot == 250)
                        {
                            for (int index = 0; index < 1000; ++index)
                            {
                                if (Main.projectile[index].active && Main.projectile[index].owner == this.whoAmI && (Main.projectile[index].type == 250 || Main.projectile[index].type == 251))
                                    Main.projectile[index].Kill();
                            }
                        }
                        if (shoot == 12)
                        {
                            vector2_1.X += num7 * 3f;
                            vector2_1.Y += num8 * 3f;
                        }
                        if (sItem.useStyle == 5)
                        {
                            if (sItem.itemId == 3029)
                            {
                                Vector2 vector2_4 = new Vector2(num7, num8);
                                vector2_4.X = (float)Main.mouseX + Main.screenPosition.X - vector2_1.X;
                                vector2_4.Y = (float)((double)Main.mouseY + (double)Main.screenPosition.Y - (double)vector2_1.Y - 1000.0);
                                this.itemRotation = (float)Math.Atan2((double)vector2_4.Y * (double)this.direction, (double)vector2_4.X * (double)this.direction);
                                NetMessage.SendData(13, -1, -1, "", this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                                NetMessage.SendData(41, -1, -1, "", this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                            }
                            else
                            {
                                this.itemRotation = (float)Math.Atan2((double)num8 * (double)this.direction, (double)num7 * (double)this.direction) - this.fullRotation;
                                NetMessage.SendData(13, -1, -1, "", this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                                NetMessage.SendData(41, -1, -1, "", this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                            }
                        }
                        if (shoot == 17)
                        {
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            if ((double)this.gravDir == -1.0)
                                vector2_1.Y = Main.screenPosition.Y + (float)Main.screenHeight - (float)Main.mouseY;
                        }
                        if (shoot == 76)
                        {
                            shoot += Main.rand.Next(3);
                            float num9 = num5 / (float)(Main.screenHeight / 2);
                            if ((double)num9 > 1.0)
                                num9 = 1f;
                            float num10 = num7 + (float)Main.rand.Next(-40, 41) * 0.01f;
                            float num11 = num8 + (float)Main.rand.Next(-40, 41) * 0.01f;
                            float SpeedX = num10 * (num9 + 0.25f);
                            float SpeedY = num11 * (num9 + 0.25f);
                            int number = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            Main.projectile[number].ai[1] = 1f;
                            float num12 = (float)((double)num9 * 2.0 - 1.0);
                            if ((double)num12 < -1.0)
                                num12 = -1f;
                            if ((double)num12 > 1.0)
                                num12 = 1f;
                            Main.projectile[number].ai[0] = num12;
                            NetMessage.SendData(27, -1, -1, "", number, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                        }
                        else if (sItem.itemId == 3029)
                        {
                            int num9 = 3;
                            if (Main.rand.Next(3) == 0)
                                ++num9;
                            for (int index1 = 0; index1 < num9; ++index1)
                            {
                                vector2_1 = new Vector2((float)((double)this.position.X + (double)this.width * 0.5 + (double)(Main.rand.Next(201) * -this.direction) + ((double)Main.mouseX + (double)Main.screenPosition.X - (double)this.position.X)), this.MountedCenter.Y - 600f);
                                vector2_1.X = (float)(((double)vector2_1.X * 10.0 + (double)this.Center.X) / 11.0) + (float)Main.rand.Next(-100, 101);
                                vector2_1.Y -= (float)(150 * index1);
                                float num10 = (float)Main.mouseX + Main.screenPosition.X - vector2_1.X;
                                float num11 = (float)Main.mouseY + Main.screenPosition.Y - vector2_1.Y;
                                if ((double)num11 < 0.0)
                                    num11 *= -1f;
                                if ((double)num11 < 20.0)
                                    num11 = 20f;
                                float num12 = (float)Math.Sqrt((double)num10 * (double)num10 + (double)num11 * (double)num11);
                                float num13 = speed / num12;
                                float num14 = num10 * num13;
                                float num15 = num11 * num13;
                                float num16 = num14 + (float)Main.rand.Next(-40, 41) * 0.03f;
                                float SpeedY = num15 + (float)Main.rand.Next(-40, 41) * 0.03f;
                                float SpeedX = num16 * ((float)Main.rand.Next(75, 150) * 0.01f);
                                vector2_1.X += (float)Main.rand.Next(-50, 51);
                                int index2 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                                Main.projectile[index2].noDropItem = true;
                            }
                        }
                        else if (sItem.itemId == 98 || sItem.itemId == 533)
                        {
                            float SpeedX = num7 + (float)Main.rand.Next(-40, 41) * 0.01f;
                            float SpeedY = num8 + (float)Main.rand.Next(-40, 41) * 0.01f;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 1319)
                        {
                            float SpeedX = num7 + (float)Main.rand.Next(-40, 41) * 0.02f;
                            float SpeedY = num8 + (float)Main.rand.Next(-40, 41) * 0.02f;
                            int index = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            Main.projectile[index].ranged = true;
                            Main.projectile[index].thrown = false;
                        }
                        else if (sItem.itemId == 3107)
                        {
                            float SpeedX = num7 + (float)Main.rand.Next(-40, 41) * 0.02f;
                            float SpeedY = num8 + (float)Main.rand.Next(-40, 41) * 0.02f;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 3053)
                        {
                            Vector2 vector2_4 = new Vector2(num7, num8);
                            vector2_4.Normalize();
                            Vector2 vector2_5 = new Vector2((float)Main.rand.Next(-100, 101), (float)Main.rand.Next(-100, 101));
                            vector2_5.Normalize();
                            Vector2 vector2_6 = vector2_4 * 4f + vector2_5;
                            vector2_6.Normalize();
                            Vector2 vector2_7 = vector2_6 * sItem.shootSpeed;
                            float ai1 = (float)Main.rand.Next(10, 80) * (1.0f / 1000.0f);
                            if (Main.rand.Next(2) == 0)
                                ai1 *= -1f;
                            float ai0 = (float)Main.rand.Next(10, 80) * (1.0f / 1000.0f);
                            if (Main.rand.Next(2) == 0)
                                ai0 *= -1f;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, vector2_7.X, vector2_7.Y, shoot, Damage, KnockBack, i, ai0, ai1);
                        }
                        else if (sItem.itemId == 3019)
                        {
                            Vector2 vector2_4 = new Vector2(num7, num8);
                            float num9 = vector2_4.Length();
                            vector2_4.X += (float)((double)Main.rand.Next(-100, 101) * 0.00999999977648258 * (double)num9 * 0.150000005960464);
                            vector2_4.Y += (float)((double)Main.rand.Next(-100, 101) * 0.00999999977648258 * (double)num9 * 0.150000005960464);
                            float num10 = num7 + (float)Main.rand.Next(-40, 41) * 0.03f;
                            float num11 = num8 + (float)Main.rand.Next(-40, 41) * 0.03f;
                            vector2_4.Normalize();
                            Vector2 vector2_5 = vector2_4 * num9;
                            Vector2 vector2_6 = new Vector2(num10 * ((float)Main.rand.Next(50, 150) * 0.01f), num11 * ((float)Main.rand.Next(50, 150) * 0.01f));
                            vector2_6.X += (float)Main.rand.Next(-100, 101) * 0.025f;
                            vector2_6.Y += (float)Main.rand.Next(-100, 101) * 0.025f;
                            vector2_6.Normalize();
                            vector2_6 *= num9;
                            float SpeedX = vector2_6.X;
                            float SpeedY = vector2_6.Y;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, vector2_5.X, vector2_5.Y);
                        }
                        else if (sItem.itemId == 2797)
                        {
                            Vector2 vector2_4 = Vector2.Normalize(new Vector2(num7, num8)) * 40f * sItem.scale;
                            if (Collision.CanHit(vector2_1, 0, 0, vector2_1 + vector2_4, 0, 0))
                                vector2_1 += vector2_4;
                            float ai0 = Utils.ToRotation(new Vector2(num7, num8));
                            float num9 = 2.094395f;
                            int num10 = Main.rand.Next(4, 5);
                            if (Main.rand.Next(4) == 0)
                                ++num10;
                            for (int index1 = 0; index1 < num10; ++index1)
                            {
                                float num11 = (float)(Main.rand.NextDouble() * 0.200000002980232 + 0.0500000007450581);
                                Vector2 vector2_5 = Utils.RotatedBy(new Vector2(num7, num8), (double)num9 * Main.rand.NextDouble() - (double)num9 / 2.0, new Vector2()) * num11;
                                int index2 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, vector2_5.X, vector2_5.Y, 444, Damage, KnockBack, i, ai0, 0.0f);
                                Main.projectile[index2].localAI[0] = (float)shoot;
                                Main.projectile[index2].localAI[1] = speed;
                            }
                        }
                        else if (sItem.itemId == 2270)
                        {
                            float SpeedX = num7 + (float)Main.rand.Next(-40, 41) * 0.05f;
                            float SpeedY = num8 + (float)Main.rand.Next(-40, 41) * 0.05f;
                            if (Main.rand.Next(3) == 0)
                            {
                                SpeedX *= (float)(1.0 + (double)Main.rand.Next(-30, 31) * 0.0199999995529652);
                                SpeedY *= (float)(1.0 + (double)Main.rand.Next(-30, 31) * 0.0199999995529652);
                            }
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 1930)
                        {
                            int num9 = 2 + Main.rand.Next(3);
                            for (int index = 0; index < num9; ++index)
                            {
                                float num10 = num7;
                                float num11 = num8;
                                float num12 = 0.025f * (float)index;
                                float num13 = num10 + (float)Main.rand.Next(-35, 36) * num12;
                                float num14 = num11 + (float)Main.rand.Next(-35, 36) * num12;
                                float num15 = (float)Math.Sqrt((double)num13 * (double)num13 + (double)num14 * (double)num14);
                                float num16 = speed / num15;
                                float SpeedX = num13 * num16;
                                float SpeedY = num14 * num16;
                                Projectile.NewProjectile(vector2_1.X + (float)((double)num7 * (double)(num9 - index) * 1.75), vector2_1.Y + (float)((double)num8 * (double)(num9 - index) * 1.75), SpeedX, SpeedY, shoot, Damage, KnockBack, i, (float)Main.rand.Next(0, 10 * (index + 1)), 0.0f);
                            }
                        }
                        else if (sItem.itemId == 1931)
                        {
                            int num9 = 2;
                            for (int index = 0; index < num9; ++index)
                            {
                                vector2_1 = new Vector2((float)((double)this.position.X + (double)this.width * 0.5 + (double)(Main.rand.Next(201) * -this.direction) + ((double)Main.mouseX + (double)Main.screenPosition.X - (double)this.position.X)), this.MountedCenter.Y - 600f);
                                vector2_1.X = (float)(((double)vector2_1.X + (double)this.Center.X) / 2.0) + (float)Main.rand.Next(-200, 201);
                                vector2_1.Y -= (float)(100 * index);
                                float num10 = (float)Main.mouseX + Main.screenPosition.X - vector2_1.X;
                                float num11 = (float)Main.mouseY + Main.screenPosition.Y - vector2_1.Y;
                                if ((double)num11 < 0.0)
                                    num11 *= -1f;
                                if ((double)num11 < 20.0)
                                    num11 = 20f;
                                float num12 = (float)Math.Sqrt((double)num10 * (double)num10 + (double)num11 * (double)num11);
                                float num13 = speed / num12;
                                float num14 = num10 * num13;
                                float num15 = num11 * num13;
                                float SpeedX = num14 + (float)Main.rand.Next(-40, 41) * 0.02f;
                                float SpeedY = num15 + (float)Main.rand.Next(-40, 41) * 0.02f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, (float)Main.rand.Next(5));
                            }
                        }
                        else if (sItem.itemId == 2750)
                        {
                            int num9 = 1;
                            for (int index = 0; index < num9; ++index)
                            {
                                vector2_1 = new Vector2((float)((double)this.position.X + (double)this.width * 0.5 + (double)(Main.rand.Next(201) * -this.direction) + ((double)Main.mouseX + (double)Main.screenPosition.X - (double)this.position.X)), this.MountedCenter.Y - 600f);
                                vector2_1.X = (float)(((double)vector2_1.X + (double)this.Center.X) / 2.0) + (float)Main.rand.Next(-200, 201);
                                vector2_1.Y -= (float)(100 * index);
                                float num10 = (float)((double)Main.mouseX + (double)Main.screenPosition.X - (double)vector2_1.X + (double)Main.rand.Next(-40, 41) * 0.0299999993294477);
                                float num11 = (float)Main.mouseY + Main.screenPosition.Y - vector2_1.Y;
                                if ((double)num11 < 0.0)
                                    num11 *= -1f;
                                if ((double)num11 < 20.0)
                                    num11 = 20f;
                                float num12 = (float)Math.Sqrt((double)num10 * (double)num10 + (double)num11 * (double)num11);
                                float num13 = speed / num12;
                                float num14 = num10 * num13;
                                float num15 = num11 * num13;
                                float num16 = num14;
                                float num17 = num15 + (float)Main.rand.Next(-40, 41) * 0.02f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, num16 * 0.75f, num17 * 0.75f, shoot + Main.rand.Next(3), Damage, KnockBack, i, 0.0f, (float)(0.5 + Main.rand.NextDouble() * 0.300000011920929));
                            }
                        }
                        else if (sItem.itemId == 3570)
                        {
                            int num9 = 3;
                            for (int index = 0; index < num9; ++index)
                            {
                                vector2_1 = new Vector2((float)((double)this.position.X + (double)this.width * 0.5 + (double)(Main.rand.Next(201) * -this.direction) + ((double)Main.mouseX + (double)Main.screenPosition.X - (double)this.position.X)), this.MountedCenter.Y - 600f);
                                vector2_1.X = (float)(((double)vector2_1.X + (double)this.Center.X) / 2.0) + (float)Main.rand.Next(-200, 201);
                                vector2_1.Y -= (float)(100 * index);
                                float num10 = (float)Main.mouseX + Main.screenPosition.X - vector2_1.X;
                                float num11 = (float)Main.mouseY + Main.screenPosition.Y - vector2_1.Y;
                                float ai1 = num11 + vector2_1.Y;
                                if ((double)num11 < 0.0)
                                    num11 *= -1f;
                                if ((double)num11 < 20.0)
                                    num11 = 20f;
                                float num12 = (float)Math.Sqrt((double)num10 * (double)num10 + (double)num11 * (double)num11);
                                float num13 = speed / num12;
                                Vector2 vector2_4 = new Vector2(num10 * num13, num11 * num13) / 2f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, vector2_4.X, vector2_4.Y, shoot, Damage, KnockBack, i, 0.0f, ai1);
                            }
                        }
                        else if (sItem.itemId == 3065)
                        {
                            Vector2 vector2_4 = Main.screenPosition + new Vector2((float)Main.mouseX, (float)Main.mouseY);
                            float ai1 = vector2_4.Y;
                            if ((double)ai1 > (double)this.Center.Y - 200.0)
                                ai1 = this.Center.Y - 200f;
                            for (int index = 0; index < 3; ++index)
                            {
                                vector2_1 = this.Center + new Vector2((float)(-Main.rand.Next(0, 401) * this.direction), -600f);
                                vector2_1.Y -= (float)(100 * index);
                                Vector2 vector2_5 = vector2_4 - vector2_1;
                                if ((double)vector2_5.Y < 0.0)
                                    vector2_5.Y *= -1f;
                                if ((double)vector2_5.Y < 20.0)
                                    vector2_5.Y = 20f;
                                vector2_5.Normalize();
                                vector2_5 *= speed;
                                float num9 = vector2_5.X;
                                float num10 = vector2_5.Y;
                                float SpeedX = num9;
                                float SpeedY = num10 + (float)Main.rand.Next(-40, 41) * 0.02f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage * 2, KnockBack, i, 0.0f, ai1);
                            }
                        }
                        else if (sItem.itemId == 2624)
                        {
                            float num9 = 0.3141593f;
                            int num10 = 5;
                            Vector2 spinningpoint = new Vector2(num7, num8);
                            spinningpoint.Normalize();
                            spinningpoint *= 40f;
                            bool flag3 = Collision.CanHit(vector2_1, 0, 0, vector2_1 + spinningpoint, 0, 0);
                            for (int index1 = 0; index1 < num10; ++index1)
                            {
                                float num11 = (float)index1 - (float)(((double)num10 - 1.0) / 2.0);
                                Vector2 vector2_4 = Utils.RotatedBy(spinningpoint, (double)num9 * (double)num11, new Vector2());
                                if (!flag3)
                                    vector2_4 -= spinningpoint;
                                int index2 = Projectile.NewProjectile(vector2_1.X + vector2_4.X, vector2_1.Y + vector2_4.Y, num7, num8, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                                Main.projectile[index2].noDropItem = true;
                            }
                        }
                        else if (sItem.itemId == 1929)
                        {
                            float SpeedX = num7 + (float)Main.rand.Next(-40, 41) * 0.03f;
                            float SpeedY = num8 + (float)Main.rand.Next(-40, 41) * 0.03f;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 1553)
                        {
                            float SpeedX = num7 + (float)Main.rand.Next(-40, 41) * 0.005f;
                            float SpeedY = num8 + (float)Main.rand.Next(-40, 41) * 0.005f;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 518)
                        {
                            float num9 = num7;
                            float num10 = num8;
                            float SpeedX = num9 + (float)Main.rand.Next(-40, 41) * 0.04f;
                            float SpeedY = num10 + (float)Main.rand.Next(-40, 41) * 0.04f;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 1265)
                        {
                            float num9 = num7;
                            float num10 = num8;
                            float SpeedX = num9 + (float)Main.rand.Next(-30, 31) * 0.03f;
                            float SpeedY = num10 + (float)Main.rand.Next(-30, 31) * 0.03f;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 534)
                        {
                            int num9 = Main.rand.Next(4, 6);
                            for (int index = 0; index < num9; ++index)
                            {
                                float num10 = num7;
                                float num11 = num8;
                                float SpeedX = num10 + (float)Main.rand.Next(-40, 41) * 0.05f;
                                float SpeedY = num11 + (float)Main.rand.Next(-40, 41) * 0.05f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            }
                        }
                        else if (sItem.itemId == 2188)
                        {
                            int num9 = 4;
                            if (Main.rand.Next(3) == 0)
                                ++num9;
                            if (Main.rand.Next(4) == 0)
                                ++num9;
                            if (Main.rand.Next(5) == 0)
                                ++num9;
                            for (int index = 0; index < num9; ++index)
                            {
                                float num10 = num7;
                                float num11 = num8;
                                float num12 = 0.05f * (float)index;
                                float num13 = num10 + (float)Main.rand.Next(-35, 36) * num12;
                                float num14 = num11 + (float)Main.rand.Next(-35, 36) * num12;
                                float num15 = (float)Math.Sqrt((double)num13 * (double)num13 + (double)num14 * (double)num14);
                                float num16 = speed / num15;
                                float SpeedX = num13 * num16;
                                float SpeedY = num14 * num16;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            }
                        }
                        else if (sItem.itemId == 1308)
                        {
                            int num9 = 3;
                            if (Main.rand.Next(3) == 0)
                                ++num9;
                            for (int index = 0; index < num9; ++index)
                            {
                                float num10 = num7;
                                float num11 = num8;
                                float num12 = 0.05f * (float)index;
                                float num13 = num10 + (float)Main.rand.Next(-35, 36) * num12;
                                float num14 = num11 + (float)Main.rand.Next(-35, 36) * num12;
                                float num15 = (float)Math.Sqrt((double)num13 * (double)num13 + (double)num14 * (double)num14);
                                float num16 = speed / num15;
                                float SpeedX = num13 * num16;
                                float SpeedY = num14 * num16;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            }
                        }
                        else if (sItem.itemId == 1258)
                        {
                            float num9 = num7;
                            float num10 = num8;
                            float SpeedX = num9 + (float)Main.rand.Next(-40, 41) * 0.01f;
                            float SpeedY = num10 + (float)Main.rand.Next(-40, 41) * 0.01f;
                            vector2_1.X += (float)Main.rand.Next(-40, 41) * 0.05f;
                            vector2_1.Y += (float)Main.rand.Next(-45, 36) * 0.05f;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 964)
                        {
                            int num9 = Main.rand.Next(3, 5);
                            for (int index = 0; index < num9; ++index)
                            {
                                float num10 = num7;
                                float num11 = num8;
                                float SpeedX = num10 + (float)Main.rand.Next(-35, 36) * 0.04f;
                                float SpeedY = num11 + (float)Main.rand.Next(-35, 36) * 0.04f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            }
                        }
                        else if (sItem.itemId == 1569)
                        {
                            int num9 = 4;
                            if (Main.rand.Next(2) == 0)
                                ++num9;
                            if (Main.rand.Next(4) == 0)
                                ++num9;
                            if (Main.rand.Next(8) == 0)
                                ++num9;
                            if (Main.rand.Next(16) == 0)
                                ++num9;
                            for (int index = 0; index < num9; ++index)
                            {
                                float num10 = num7;
                                float num11 = num8;
                                float num12 = 0.05f * (float)index;
                                float num13 = num10 + (float)Main.rand.Next(-35, 36) * num12;
                                float num14 = num11 + (float)Main.rand.Next(-35, 36) * num12;
                                float num15 = (float)Math.Sqrt((double)num13 * (double)num13 + (double)num14 * (double)num14);
                                float num16 = speed / num15;
                                float SpeedX = num13 * num16;
                                float SpeedY = num14 * num16;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            }
                        }
                        else if (sItem.itemId == 1572 || sItem.itemId == 2366 || (sItem.itemId == 3571 || sItem.itemId == 3569))
                        {
                            int num9 = sItem.shoot;
                            for (int index = 0; index < 1000; ++index)
                            {
                                if (Main.projectile[index].owner == this.whoAmI && Main.projectile[index].type == num9)
                                    Main.projectile[index].Kill();
                            }
                            bool flag3 = sItem.itemId == 3571 || sItem.itemId == 3569;
                            int i1 = (int)((double)Main.mouseX + (double)Main.screenPosition.X) / 16;
                            int j = (int)((double)Main.mouseY + (double)Main.screenPosition.Y) / 16;
                            if ((double)this.gravDir == -1.0)
                                j = (int)((double)Main.screenPosition.Y + (double)Main.screenHeight - (double)Main.mouseY) / 16;
                            if (!flag3)
                            {
                                while (j < Main.maxTilesY - 10 && Main.tile[i1, j] != null && (!WorldGen.SolidTile2(i1, j) && Main.tile[i1 - 1, j] != null) && (!WorldGen.SolidTile2(i1 - 1, j) && Main.tile[i1 + 1, j] != null && !WorldGen.SolidTile2(i1 + 1, j)))
                                    ++j;
                                --j;
                            }
                            Projectile.NewProjectile((float)Main.mouseX + Main.screenPosition.X, (float)(j * 16 - 24), 0.0f, 15f, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 1244 || sItem.itemId == 1256)
                        {
                            int index = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, num7, num8, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            Main.projectile[index].ai[0] = (float)Main.mouseX + Main.screenPosition.X;
                            Main.projectile[index].ai[1] = (float)Main.mouseY + Main.screenPosition.Y;
                        }
                        else if (sItem.itemId == 1229)
                        {
                            int num9 = Main.rand.Next(2, 4);
                            if (Main.rand.Next(5) == 0)
                                ++num9;
                            for (int index1 = 0; index1 < num9; ++index1)
                            {
                                float SpeedX = num7;
                                float SpeedY = num8;
                                if (index1 > 0)
                                {
                                    SpeedX += (float)Main.rand.Next(-35, 36) * 0.04f;
                                    SpeedY += (float)Main.rand.Next(-35, 36) * 0.04f;
                                }
                                if (index1 > 1)
                                {
                                    SpeedX += (float)Main.rand.Next(-35, 36) * 0.04f;
                                    SpeedY += (float)Main.rand.Next(-35, 36) * 0.04f;
                                }
                                if (index1 > 2)
                                {
                                    SpeedX += (float)Main.rand.Next(-35, 36) * 0.04f;
                                    SpeedY += (float)Main.rand.Next(-35, 36) * 0.04f;
                                }
                                int index2 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                                Main.projectile[index2].noDropItem = true;
                            }
                        }
                        else if (sItem.itemId == 1121)
                        {
                            int num9 = Main.rand.Next(1, 4);
                            if (Main.rand.Next(6) == 0)
                                ++num9;
                            if (Main.rand.Next(6) == 0)
                                ++num9;
                            if (this.strongBees && Main.rand.Next(3) == 0)
                                ++num9;
                            for (int index1 = 0; index1 < num9; ++index1)
                            {
                                float num10 = num7;
                                float num11 = num8;
                                float SpeedX = num10 + (float)Main.rand.Next(-35, 36) * 0.02f;
                                float SpeedY = num11 + (float)Main.rand.Next(-35, 36) * 0.02f;
                                int index2 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, this.beeType(), this.beeDamage(Damage), this.beeKB(KnockBack), i, 0.0f, 0.0f);
                                Main.projectile[index2].magic = true;
                            }
                        }
                        else if (sItem.itemId == 1155)
                        {
                            int num9 = Main.rand.Next(2, 5);
                            if (Main.rand.Next(5) == 0)
                                ++num9;
                            if (Main.rand.Next(5) == 0)
                                ++num9;
                            for (int index = 0; index < num9; ++index)
                            {
                                float num10 = num7;
                                float num11 = num8;
                                float SpeedX = num10 + (float)Main.rand.Next(-35, 36) * 0.02f;
                                float SpeedY = num11 + (float)Main.rand.Next(-35, 36) * 0.02f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            }
                        }
                        else if (sItem.itemId == 1801)
                        {
                            int num9 = Main.rand.Next(1, 4);
                            for (int index = 0; index < num9; ++index)
                            {
                                float num10 = num7;
                                float num11 = num8;
                                float SpeedX = num10 + (float)Main.rand.Next(-35, 36) * 0.05f;
                                float SpeedY = num11 + (float)Main.rand.Next(-35, 36) * 0.05f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            }
                        }
                        else if (sItem.itemId == 679)
                        {
                            for (int index = 0; index < 6; ++index)
                            {
                                float num9 = num7;
                                float num10 = num8;
                                float SpeedX = num9 + (float)Main.rand.Next(-40, 41) * 0.05f;
                                float SpeedY = num10 + (float)Main.rand.Next(-40, 41) * 0.05f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            }
                        }
                        else if (sItem.itemId == 2623)
                        {
                            for (int index = 0; index < 3; ++index)
                            {
                                float num9 = num7;
                                float num10 = num8;
                                float SpeedX = num9 + (float)Main.rand.Next(-40, 41) * 0.1f;
                                float SpeedY = num10 + (float)Main.rand.Next(-40, 41) * 0.1f;
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            }
                        }
                        else if (sItem.itemId == 3210)
                        {
                            Vector2 vector2_4 = new Vector2(num7, num8);
                            vector2_4.X += (float)Main.rand.Next(-30, 31) * 0.04f;
                            vector2_4.Y += (float)Main.rand.Next(-30, 31) * 0.03f;
                            vector2_4.Normalize();
                            vector2_4 *= (float)Main.rand.Next(70, 91) * 0.1f;
                            vector2_4.X += (float)Main.rand.Next(-30, 31) * 0.04f;
                            vector2_4.Y += (float)Main.rand.Next(-30, 31) * 0.03f;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, vector2_4.X, vector2_4.Y, shoot, Damage, KnockBack, i, (float)Main.rand.Next(20), 0.0f);
                        }
                        else if (sItem.itemId == 434)
                        {
                            float SpeedX = num7;
                            float SpeedY = num8;
                            if (this.itemAnimation < 5)
                            {
                                float num9 = SpeedX + (float)Main.rand.Next(-40, 41) * 0.01f;
                                float num10 = SpeedY + (float)Main.rand.Next(-40, 41) * 0.01f;
                                SpeedX = num9 * 1.1f;
                                SpeedY = num10 * 1.1f;
                            }
                            else if (this.itemAnimation < 10)
                            {
                                float num9 = SpeedX + (float)Main.rand.Next(-20, 21) * 0.01f;
                                float num10 = SpeedY + (float)Main.rand.Next(-20, 21) * 0.01f;
                                SpeedX = num9 * 1.05f;
                                SpeedY = num10 * 1.05f;
                            }
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 1157)
                        {
                            shoot = Main.rand.Next(191, 195);
                            float SpeedX = 0.0f;
                            float SpeedY = 0.0f;
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            int index = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            Main.projectile[index].localAI[0] = 30f;
                        }
                        else if (sItem.itemId == 1802)
                        {
                            float SpeedX = 0.0f;
                            float SpeedY = 0.0f;
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 2364 || sItem.itemId == 2365)
                        {
                            float SpeedX = 0.0f;
                            float SpeedY = 0.0f;
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 2535)
                        {
                            float x = 0.0f;
                            float y = 0.0f;
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            Vector2 spinningpoint = new Vector2(x, y);
                            spinningpoint = Utils.RotatedBy(spinningpoint, 1.57079637050629, new Vector2());
                            Projectile.NewProjectile(vector2_1.X + spinningpoint.X, vector2_1.Y + spinningpoint.Y, spinningpoint.X, spinningpoint.Y, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            spinningpoint = Utils.RotatedBy(spinningpoint, -3.14159274101257, new Vector2());
                            Projectile.NewProjectile(vector2_1.X + spinningpoint.X, vector2_1.Y + spinningpoint.Y, spinningpoint.X, spinningpoint.Y, shoot + 1, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 2551)
                        {
                            float SpeedX = 0.0f;
                            float SpeedY = 0.0f;
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot + Main.rand.Next(3), Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 2584)
                        {
                            float SpeedX = 0.0f;
                            float SpeedY = 0.0f;
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot + Main.rand.Next(3), Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 2621)
                        {
                            float SpeedX = 0.0f;
                            float SpeedY = 0.0f;
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 2749 || sItem.itemId == 3249 || sItem.itemId == 3474)
                        {
                            float SpeedX = 0.0f;
                            float SpeedY = 0.0f;
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 3531)
                        {
                            int num9 = -1;
                            int index1 = -1;
                            for (int index2 = 0; index2 < 1000; ++index2)
                            {
                                if (Main.projectile[index2].active && Main.projectile[index2].owner == Main.myPlayer)
                                {
                                    if (num9 == -1 && Main.projectile[index2].type == 625)
                                        num9 = index2;
                                    if (index1 == -1 && Main.projectile[index2].type == 628)
                                        index1 = index2;
                                    if (num9 != -1 && index1 != -1)
                                        break;
                                }
                            }
                            if (num9 == -1 && index1 == -1)
                            {
                                float SpeedX = 0.0f;
                                float SpeedY = 0.0f;
                                vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                                vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                                int num10 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                                int num11 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot + 1, Damage, KnockBack, i, (float)num10, 0.0f);
                                int index2 = num11;
                                int num12 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot + 2, Damage, KnockBack, i, (float)num11, 0.0f);
                                Main.projectile[index2].localAI[1] = (float)num12;
                                int index3 = num12;
                                int num13 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot + 3, Damage, KnockBack, i, (float)num12, 0.0f);
                                Main.projectile[index3].localAI[1] = (float)num13;
                            }
                            else if (num9 != -1 && index1 != -1)
                            {
                                int num10 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, num7, num8, shoot + 1, Damage, KnockBack, i, Main.projectile[index1].ai[0], 0.0f);
                                int index2 = num10;
                                int index3 = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, num7, num8, shoot + 2, Damage, KnockBack, i, (float)num10, 0.0f);
                                Main.projectile[index2].localAI[1] = (float)index3;
                                Main.projectile[index3].localAI[1] = (float)index1;
                                Main.projectile[index1].ai[0] = (float)index3;
                                Main.projectile[index1].netUpdate = true;
                                Main.projectile[index1].ai[1] = 1f;
                            }
                        }
                        else if (sItem.itemId == 1309)
                        {
                            float SpeedX = 0.0f;
                            float SpeedY = 0.0f;
                            vector2_1.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_1.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.shoot > 0 && (Main.projPet[sItem.shoot] || sItem.shoot == 72 || (sItem.shoot == 18 || sItem.shoot == 500) || sItem.shoot == 650) && !sItem.summon)
                        {
                            for (int index = 0; index < 1000; ++index)
                            {
                                if (Main.projectile[index].active && Main.projectile[index].owner == this.whoAmI)
                                {
                                    if (sItem.shoot == 72)
                                    {
                                        if (Main.projectile[index].type == 72 || Main.projectile[index].type == 86 || Main.projectile[index].type == 87)
                                            Main.projectile[index].Kill();
                                    }
                                    else if (sItem.shoot == Main.projectile[index].type)
                                        Main.projectile[index].Kill();
                                }
                            }
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, num7, num8, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 3006)
                        {
                            Vector2 vector2_4;
                            vector2_4.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_4.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            while (Collision.CanHitLine(this.position, this.width, this.height, vector2_1, 1, 1))
                            {
                                vector2_1.X += num7;
                                vector2_1.Y += num8;
                                if ((double)(vector2_1 - vector2_4).Length() < 20.0 + (double)Math.Abs(num7) + (double)Math.Abs(num8))
                                {
                                    vector2_1 = vector2_4;
                                    break;
                                }
                            }
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, 0.0f, 0.0f, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 3014)
                        {
                            Vector2 vector2_4;
                            vector2_4.X = (float)Main.mouseX + Main.screenPosition.X;
                            vector2_4.Y = (float)Main.mouseY + Main.screenPosition.Y;
                            while (Collision.CanHitLine(this.position, this.width, this.height, vector2_1, 1, 1))
                            {
                                vector2_1.X += num7;
                                vector2_1.Y += num8;
                                if ((double)(vector2_1 - vector2_4).Length() < 20.0 + (double)Math.Abs(num7) + (double)Math.Abs(num8))
                                {
                                    vector2_1 = vector2_4;
                                    break;
                                }
                            }
                            bool flag3 = false;
                            int j1 = (int)vector2_1.Y / 16;
                            int i1 = (int)vector2_1.X / 16;
                            int num9 = j1;
                            while (j1 < Main.maxTilesY - 10 && j1 - num9 < 30 && !WorldGen.SolidTile(i1, j1))
                                ++j1;
                            if (!WorldGen.SolidTile(i1, j1))
                                flag3 = true;
                            float num10 = (float)(j1 * 16);
                            int j2 = num9;
                            while (j2 > 10 && num9 - j2 < 30 && !WorldGen.SolidTile(i1, j2))
                                --j2;
                            float num11 = (float)(j2 * 16 + 16);
                            float ai1 = num10 - num11;
                            int num12 = 10;
                            if ((double)ai1 > (double)(16 * num12))
                                ai1 = (float)(16 * num12);
                            float ai0 = num10 - ai1;
                            vector2_1.X = (float)((int)((double)vector2_1.X / 16.0) * 16);
                            if (!flag3)
                                Projectile.NewProjectile(vector2_1.X, vector2_1.Y, 0.0f, 0.0f, shoot, Damage, KnockBack, i, ai0, ai1);
                        }
                        else if (sItem.itemId == 3384)
                        {
                            int num9 = this.altFunctionUse == 2 ? 1 : 0;
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, num7, num8, shoot, Damage, KnockBack, i, 0.0f, (float)num9);
                        }
                        else if (sItem.itemId == 3473)
                        {
                            float ai1 = (float)(((double)Utils.NextFloat(Main.rand) - 0.5) * 0.785398185253143);
                            Vector2 vector2_4 = new Vector2(num7, num8);
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, vector2_4.X, vector2_4.Y, shoot, Damage, KnockBack, i, 0.0f, ai1);
                        }
                        else if (sItem.itemId == 3542)
                        {
                            float num9 = (float)(((double)Utils.NextFloat(Main.rand) - 0.5) * 0.785398185253143);
                            for (int index = 0; index < 10 && !Collision.CanHit(vector2_1, 0, 0, vector2_1 + Utils.RotatedBy(new Vector2(num7, num8), (double)num9, new Vector2()) * 100f, 0, 0); ++index)
                                num9 = (float)(((double)Utils.NextFloat(Main.rand) - 0.5) * 0.785398185253143);
                            Vector2 vector2_4 = Utils.RotatedBy(new Vector2(num7, num8), (double)num9, new Vector2()) * (float)(0.850000023841858 + (double)Utils.NextFloat(Main.rand) * 0.300000011920929);
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, vector2_4.X, vector2_4.Y, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                        }
                        else if (sItem.itemId == 3475)
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, num7, num8, 615, Damage, KnockBack, i, (float)(5 * Main.rand.Next(0, 20)), 0.0f);
                        else if (sItem.itemId == 3540)
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y, num7, num8, 630, Damage, KnockBack, i, 0.0f, 0.0f);
                        else if (sItem.itemId == 3546)
                        {
                            for (int index = 0; index < 2; ++index)
                            {
                                float num9 = num7;
                                float num10 = num8;
                                float num11 = num9 + (float)Main.rand.Next(-40, 41) * 0.05f;
                                float num12 = num10 + (float)Main.rand.Next(-40, 41) * 0.05f;
                                Vector2 vector2_4 = vector2_1 + Vector2.Normalize(Utils.RotatedBy(new Vector2(num11, num12), -1.57079637050629 * (double)this.direction, new Vector2())) * 6f;
                                Projectile.NewProjectile(vector2_4.X, vector2_4.Y, num11, num12, 167 + Main.rand.Next(4), Damage, KnockBack, i, 0.0f, 1f);
                            }
                        }
                        else if (sItem.itemId == 3350)
                        {
                            float num9 = num7;
                            float num10 = num8;
                            float num11 = num9 + (float)Main.rand.Next(-1, 2) * 0.5f;
                            float num12 = num10 + (float)Main.rand.Next(-1, 2) * 0.5f;
                            if (Collision.CanHitLine(this.Center, 0, 0, vector2_1 + new Vector2(num11, num12) * 2f, 0, 0))
                                vector2_1 += new Vector2(num11, num12);
                            Projectile.NewProjectile(vector2_1.X, vector2_1.Y - this.gravDir * 4f, num11, num12, shoot, Damage, KnockBack, i, 0.0f, (float)Main.rand.Next(12) / 6f);
                        }
                        else
                        {
                            int index = Projectile.NewProjectile(vector2_1.X, vector2_1.Y, num7, num8, shoot, Damage, KnockBack, i, 0.0f, 0.0f);
                            if (sItem.itemId == 726)
                                Main.projectile[index].magic = true;
                            if (sItem.itemId == 724 || sItem.itemId == 676)
                                Main.projectile[index].melee = true;
                            if (shoot == 80)
                            {
                                Main.projectile[index].ai[0] = (float)Player.tileTargetX;
                                Main.projectile[index].ai[1] = (float)Player.tileTargetY;
                            }
                            if (shoot == 442)
                            {
                                Main.projectile[index].ai[0] = (float)Player.tileTargetX;
                                Main.projectile[index].ai[1] = (float)Player.tileTargetY;
                            }
                            if ((this.thrownCost50 || this.thrownCost33) && this.inventory[this.selectedItem].thrown)
                                Main.projectile[index].noDropItem = true;
                            if (Main.projectile[index].aiStyle == 99)
                                AchievementsHelper.HandleSpecialEvent(this, 7);
                        }
                    }
                    else if (sItem.useStyle == 5)
                    {
                        this.itemRotation = 0.0f;
                        NetMessage.SendData(41, -1, -1, "", this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                    }
                }
                if (this.whoAmI == Main.myPlayer && (sItem.itemId == 509 || sItem.itemId == 510 || (sItem.itemId == 849 || sItem.itemId == 850) || sItem.itemId == 851) && ((double)this.position.X / 16.0 - (double)Player.tileRangeX - (double)sItem.tileBoost - (double)this.blockRange <= (double)Player.tileTargetX && ((double)this.position.X + (double)this.width) / 16.0 + (double)Player.tileRangeX + (double)sItem.tileBoost - 1.0 + (double)this.blockRange >= (double)Player.tileTargetX && ((double)this.position.Y / 16.0 - (double)Player.tileRangeY - (double)sItem.tileBoost - (double)this.blockRange <= (double)Player.tileTargetY && ((double)this.position.Y + (double)this.height) / 16.0 + (double)Player.tileRangeY + (double)sItem.tileBoost - 2.0 + (double)this.blockRange >= (double)Player.tileTargetY)))
                {
                    this.showItemIcon = true;
                    if (this.itemAnimation > 0 && this.itemTime == 0 && this.controlUseItem)
                    {
                        int i1 = Player.tileTargetX;
                        int j = Player.tileTargetY;

						var wireType = k_WireFlags.WIRE_NONE;
						if (sItem.itemId == 509)
							wireType = k_WireFlags.WIRE_RED;
						else if (sItem.itemId == 850)
							wireType = k_WireFlags.WIRE_GREEN;
						else if (sItem.itemId == 851)
							wireType = k_WireFlags.WIRE_BLUE;

                        if (wireType != k_WireFlags.WIRE_NONE)
                        {
                            int index1 = -1;
                            for (int index2 = 0; index2 < 58; ++index2)
                            {
                                if (this.inventory[index2].stack > 0 && this.inventory[index2].itemId == 530)
                                {
                                    index1 = index2;
                                    break;
                                }
                            }
                            if (index1 >= 0 && WorldGen.PlaceWire(i1, j, wireType))
                            {
                                --this.inventory[index1].stack;
                                if (this.inventory[index1].stack <= 0)
                                    this.inventory[index1].SetDefaults(0, false);
                                this.itemTime = sItem.useTime;
                                NetMessage.SendData(17, -1, -1, "", Tile.k_HACK_GetNetworkWirePlaceType(wireType), (float)Player.tileTargetX, (float)Player.tileTargetY, 0.0f, 0, 0, 0);
                            }
                        }
                        else if (sItem.itemId == 510)
                        {
							var flags = new k_WireFlags[] { k_WireFlags.WIRE_ACTUATOR, k_WireFlags.WIRE_BLUE, k_WireFlags.WIRE_GREEN, k_WireFlags.WIRE_RED };
							for (int flag = 0; flag < 4; ++flag)
							{
								if (WorldGen.KillWire(i1, j, flags[flag]))
								{
									this.itemTime = sItem.useTime;
									NetMessage.SendData(17, -1, -1, "", Tile.k_HACK_GetNetworkWireKillType(flags[flag]), (float)Player.tileTargetX, (float)Player.tileTargetY, 0.0f, 0, 0, 0);
									break;
								}
							}
                        }
                        else if (sItem.itemId == 849 && sItem.stack > 0 && WorldGen.PlaceWire(i1, j, k_WireFlags.WIRE_ACTUATOR))
                        {
                            this.itemTime = sItem.useTime;
                            NetMessage.SendData(17, -1, -1, "", 8, (float)Player.tileTargetX, (float)Player.tileTargetY, 0.0f, 0, 0, 0);
                            --sItem.stack;
                            if (sItem.stack <= 0)
                                sItem.SetDefaults(0, false);
                        }
                    }
                }
                if (this.itemAnimation > 0 && this.itemTime == 0 && (sItem.itemId == 507 || sItem.itemId == 508))
                {
                    this.itemTime = sItem.useTime;
                    Vector2 vector2 = new Vector2(this.position.X + (float)this.width * 0.5f, this.position.Y + (float)this.height * 0.5f);
                    float num4 = (float)Main.mouseX + Main.screenPosition.X - vector2.X;
                    float num5 = (float)Main.mouseY + Main.screenPosition.Y - vector2.Y;
                    float num6 = (float)Math.Sqrt((double)num4 * (double)num4 + (double)num5 * (double)num5) / (float)(Main.screenHeight / 2);
                    if ((double)num6 > 1.0)
                        num6 = 1f;
                    float number2 = (float)((double)num6 * 2.0 - 1.0);
                    if ((double)number2 < -1.0)
                        number2 = -1f;
                    if ((double)number2 > 1.0)
                        number2 = 1f;
                    Main.harpNote = number2;
                    int Style = 26;
                    if (sItem.itemId == 507)
                        Style = 35;
                    Main.PlaySound(2, (int)this.position.X, (int)this.position.Y, Style);
                    NetMessage.SendData(58, -1, -1, "", this.whoAmI, number2, 0.0f, 0.0f, 0, 0, 0);
                }
                if ((sItem.itemId >= 205 && sItem.itemId <= 207 || (sItem.itemId == 1128 || sItem.itemId == 3031) || sItem.itemId == 3032) && ((double)this.position.X / 16.0 - (double)Player.tileRangeX - (double)sItem.tileBoost <= (double)Player.tileTargetX && ((double)this.position.X + (double)this.width) / 16.0 + (double)Player.tileRangeX + (double)sItem.tileBoost - 1.0 >= (double)Player.tileTargetX && ((double)this.position.Y / 16.0 - (double)Player.tileRangeY - (double)sItem.tileBoost <= (double)Player.tileTargetY && ((double)this.position.Y + (double)this.height) / 16.0 + (double)Player.tileRangeY + (double)sItem.tileBoost - 2.0 >= (double)Player.tileTargetY)))
                {
                    this.showItemIcon = true;
                    if (this.itemTime == 0 && this.itemAnimation > 0 && this.controlUseItem)
                    {
                        if (sItem.itemId == 205 || sItem.itemId == 3032 && (int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType() == 0)
                        {
                            int num4 = (int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType();
                            int num5 = 0;
                            for (int index1 = Player.tileTargetX - 1; index1 <= Player.tileTargetX + 1; ++index1)
                            {
                                for (int index2 = Player.tileTargetY - 1; index2 <= Player.tileTargetY + 1; ++index2)
                                {
                                    if ((int)Main.tile[index1, index2].liquidType() == num4)
                                        num5 += (int)Main.tile[index1, index2].liquid;
                                }
                            }
                            if ((int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquid > 0 && (num5 > 100 || sItem.itemId == 3032))
                            {
                                int liquidType = (int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType();
                                if (sItem.itemId != 3032)
                                {
                                    if (!Main.tile[Player.tileTargetX, Player.tileTargetY].lava())
                                    {
                                        if (Main.tile[Player.tileTargetX, Player.tileTargetY].honey())
                                        {
                                            --sItem.stack;
                                            this.PutItemInInventory(1128, this.selectedItem);
                                        }
                                        else
                                        {
                                            --sItem.stack;
                                            this.PutItemInInventory(206, this.selectedItem);
                                        }
                                    }
                                    else
                                    {
                                        --sItem.stack;
                                        this.PutItemInInventory(207, this.selectedItem);
                                    }
                                }
                                Main.PlaySound(19, (int)this.position.X, (int)this.position.Y, 1);
                                this.itemTime = sItem.useTime;
                                int num6 = (int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquid;
                                Main.tile[Player.tileTargetX, Player.tileTargetY].liquid = (byte)0;
                                Main.tile[Player.tileTargetX, Player.tileTargetY].lava(false);
                                Main.tile[Player.tileTargetX, Player.tileTargetY].honey(false);
                                WorldGen.SquareTileFrame(Player.tileTargetX, Player.tileTargetY, false);
                                if (Main.netMode == 1)
                                    NetMessage.sendWater(Player.tileTargetX, Player.tileTargetY);
                                else
                                    Liquid.AddWater(Player.tileTargetX, Player.tileTargetY);
                                for (int index1 = Player.tileTargetX - 1; index1 <= Player.tileTargetX + 1; ++index1)
                                {
                                    for (int index2 = Player.tileTargetY - 1; index2 <= Player.tileTargetY + 1; ++index2)
                                    {
                                        if (num6 < 256 && (int)Main.tile[index1, index2].liquidType() == num4)
                                        {
                                            int num7 = (int)Main.tile[index1, index2].liquid;
                                            if (num7 + num6 > (int)byte.MaxValue)
                                                num7 = (int)byte.MaxValue - num6;
                                            num6 += num7;
                                            Main.tile[index1, index2].liquid -= (byte)num7;
                                            Main.tile[index1, index2].liquidType(liquidType);
                                            if ((int)Main.tile[index1, index2].liquid == 0)
                                            {
                                                Main.tile[index1, index2].lava(false);
                                                Main.tile[index1, index2].honey(false);
                                            }
                                            WorldGen.SquareTileFrame(index1, index2, false);
                                            if (Main.netMode == 1)
                                                NetMessage.sendWater(index1, index2);
                                            else
                                                Liquid.AddWater(index1, index2);
                                        }
                                    }
                                }
                            }
                        }
                        else if ((int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquid < 200 && (!Main.tile[Player.tileTargetX, Player.tileTargetY].nactive() || !Main.tileSolid[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type] || Main.tileSolidTop[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type]))
                        {
                            if (sItem.itemId == 207)
                            {
                                if ((int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquid == 0 || (int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType() == 1)
                                {
                                    Main.PlaySound(19, (int)this.position.X, (int)this.position.Y, 1);
                                    Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType(1);
                                    Main.tile[Player.tileTargetX, Player.tileTargetY].liquid = byte.MaxValue;
                                    WorldGen.SquareTileFrame(Player.tileTargetX, Player.tileTargetY, true);
                                    --sItem.stack;
                                    this.PutItemInInventory(205, this.selectedItem);
                                    this.itemTime = sItem.useTime;
                                    if (Main.netMode == 1)
                                        NetMessage.sendWater(Player.tileTargetX, Player.tileTargetY);
                                }
                            }
                            else if (sItem.itemId == 206 || sItem.itemId == 3031)
                            {
                                if ((int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquid == 0 || (int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType() == 0)
                                {
                                    Main.PlaySound(19, (int)this.position.X, (int)this.position.Y, 1);
                                    Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType(0);
                                    Main.tile[Player.tileTargetX, Player.tileTargetY].liquid = byte.MaxValue;
                                    WorldGen.SquareTileFrame(Player.tileTargetX, Player.tileTargetY, true);
                                    if (sItem.itemId != 3031)
                                    {
                                        --sItem.stack;
                                        this.PutItemInInventory(205, this.selectedItem);
                                    }
                                    this.itemTime = sItem.useTime;
                                    if (Main.netMode == 1)
                                        NetMessage.sendWater(Player.tileTargetX, Player.tileTargetY);
                                }
                            }
                            else if (sItem.itemId == 1128 && ((int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquid == 0 || (int)Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType() == 2))
                            {
                                Main.PlaySound(19, (int)this.position.X, (int)this.position.Y, 1);
                                Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType(2);
                                Main.tile[Player.tileTargetX, Player.tileTargetY].liquid = byte.MaxValue;
                                WorldGen.SquareTileFrame(Player.tileTargetX, Player.tileTargetY, true);
                                --sItem.stack;
                                this.PutItemInInventory(205, this.selectedItem);
                                this.itemTime = sItem.useTime;
                                if (Main.netMode == 1)
                                    NetMessage.sendWater(Player.tileTargetX, Player.tileTargetY);
                            }
                        }
                    }
                }
                if (!this.channel)
                {
                    this.toolTime = this.itemTime;
                }
                else
                {
                    --this.toolTime;
                    if (this.toolTime < 0)
                        this.toolTime = sItem.pick <= 0 ? (int)((double)sItem.useTime * (double)this.pickSpeed) : sItem.useTime;
                }
                if ((sItem.pick > 0 || sItem.axe > 0 || sItem.hammer > 0) && ((double)this.position.X / 16.0 - (double)Player.tileRangeX - (double)sItem.tileBoost <= (double)Player.tileTargetX && ((double)this.position.X + (double)this.width) / 16.0 + (double)Player.tileRangeX + (double)sItem.tileBoost - 1.0 >= (double)Player.tileTargetX && ((double)this.position.Y / 16.0 - (double)Player.tileRangeY - (double)sItem.tileBoost <= (double)Player.tileTargetY && ((double)this.position.Y + (double)this.height) / 16.0 + (double)Player.tileRangeY + (double)sItem.tileBoost - 2.0 >= (double)Player.tileTargetY)))
                {
                    int damageAmount1 = 0;
                    bool flag3 = true;
                    this.showItemIcon = true;
                    if (this.toolTime == 0 && this.itemAnimation > 0 && this.controlUseItem && (!Main.tile[Player.tileTargetX, Player.tileTargetY].active() || !Main.tileHammer[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type] && !Main.tileSolid[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type] && ((int)Main.tile[Player.tileTargetX, Player.tileTargetY].type != 314 && (int)Main.tile[Player.tileTargetX, Player.tileTargetY].type != 351)))
                        this.poundRelease = false;
                    if (Main.tile[Player.tileTargetX, Player.tileTargetY].active())
                    {
                        if (sItem.pick > 0 && !Main.tileAxe[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type] && !Main.tileHammer[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type] || (sItem.axe > 0 && Main.tileAxe[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type] || sItem.hammer > 0 && Main.tileHammer[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type]))
                            flag3 = false;
                        if (this.toolTime == 0 && this.itemAnimation > 0 && this.controlUseItem)
                        {
                            int tileId = this.hitTile.HitObject(Player.tileTargetX, Player.tileTargetY, 1);
                            if (Main.tileNoFail[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type])
                                damageAmount1 = 100;
                            if (Main.tileHammer[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type])
                            {
                                flag3 = false;
                                if (sItem.hammer > 0)
                                {
                                    damageAmount1 += sItem.hammer;
                                    if (!WorldGen.CanKillTile(Player.tileTargetX, Player.tileTargetY))
                                        damageAmount1 = 0;
                                    if ((int)Main.tile[Player.tileTargetX, Player.tileTargetY].type == 26 && (sItem.hammer < 80 || !Main.hardMode))
                                    {
                                        damageAmount1 = 0;
                                        this.Hurt(this.statLife / 2, -this.direction, false, false, Lang.deathMsg(-1, -1, -1, 4), false);
                                    }
                                    AchievementsHelper.CurrentlyMining = true;
                                    if (this.hitTile.AddDamage(tileId, damageAmount1, true) >= 100)
                                    {
                                        this.hitTile.Clear(tileId);
                                        WorldGen.KillTile(Player.tileTargetX, Player.tileTargetY, false, false, false);
                                        if (Main.netMode == 1)
                                            NetMessage.SendData(17, -1, -1, "", 0, (float)Player.tileTargetX, (float)Player.tileTargetY, 0.0f, 0, 0, 0);
                                    }
                                    else
                                    {
                                        WorldGen.KillTile(Player.tileTargetX, Player.tileTargetY, true, false, false);
                                        if (Main.netMode == 1)
                                            NetMessage.SendData(17, -1, -1, "", 0, (float)Player.tileTargetX, (float)Player.tileTargetY, 1f, 0, 0, 0);
                                    }
                                    if (damageAmount1 != 0)
                                        this.hitTile.Prune();
                                    this.itemTime = sItem.useTime;
                                    AchievementsHelper.CurrentlyMining = false;
                                }
                            }
                            else if (Main.tileAxe[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type])
                            {
                                if ((int)Main.tile[Player.tileTargetX, Player.tileTargetY].type == 80)
                                    damageAmount1 += sItem.axe * 3;
                                else
                                    damageAmount1 += sItem.axe;
                                if (sItem.axe > 0)
                                {
                                    AchievementsHelper.CurrentlyMining = true;
                                    if (!WorldGen.CanKillTile(Player.tileTargetX, Player.tileTargetY))
                                        damageAmount1 = 0;
                                    if (this.hitTile.AddDamage(tileId, damageAmount1, true) >= 100)
                                    {
                                        this.hitTile.Clear(tileId);
                                        WorldGen.KillTile(Player.tileTargetX, Player.tileTargetY, false, false, false);
                                        if (Main.netMode == 1)
                                            NetMessage.SendData(17, -1, -1, "", 0, (float)Player.tileTargetX, (float)Player.tileTargetY, 0.0f, 0, 0, 0);
                                    }
                                    else
                                    {
                                        WorldGen.KillTile(Player.tileTargetX, Player.tileTargetY, true, false, false);
                                        if (Main.netMode == 1)
                                            NetMessage.SendData(17, -1, -1, "", 0, (float)Player.tileTargetX, (float)Player.tileTargetY, 1f, 0, 0, 0);
                                    }
                                    if (damageAmount1 != 0)
                                        this.hitTile.Prune();
                                    this.itemTime = sItem.useTime;
                                    AchievementsHelper.CurrentlyMining = false;
                                }
                            }
                            else if (sItem.pick > 0)
                            {
                                this.PickTile(Player.tileTargetX, Player.tileTargetY, sItem.pick);
                                this.itemTime = (int)((double)sItem.useTime * (double)this.pickSpeed);
                            }
                            if (sItem.pick > 0)
                                this.itemTime = (int)((double)sItem.useTime * (double)this.pickSpeed);
                            if (sItem.hammer > 0 && Main.tile[Player.tileTargetX, Player.tileTargetY].active() && (Main.tileSolid[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type] && (int)Main.tile[Player.tileTargetX, Player.tileTargetY].type != 10 || ((int)Main.tile[Player.tileTargetX, Player.tileTargetY].type == 314 || (int)Main.tile[Player.tileTargetX, Player.tileTargetY].type == 351)) && this.poundRelease)
                            {
                                flag3 = false;
                                this.itemTime = sItem.useTime;
                                int num4 = damageAmount1 + (int)((double)sItem.hammer * 1.25);
                                damageAmount1 = 100;
                                if (Main.tile[Player.tileTargetX, Player.tileTargetY - 1].active() && (int)Main.tile[Player.tileTargetX, Player.tileTargetY - 1].type == 10)
                                    damageAmount1 = 0;
                                if (Main.tile[Player.tileTargetX, Player.tileTargetY + 1].active() && (int)Main.tile[Player.tileTargetX, Player.tileTargetY + 1].type == 10)
                                    damageAmount1 = 0;
                                if (this.hitTile.AddDamage(tileId, damageAmount1, true) >= 100)
                                {
                                    this.hitTile.Clear(tileId);
                                    if (this.poundRelease)
                                    {
                                        int i1 = Player.tileTargetX;
                                        int j = Player.tileTargetY;
                                        if ((int)Main.tile[i1, j].type == 19)
                                        {
                                            if (Main.tile[i1, j].halfBrick())
                                            {
                                                WorldGen.PoundTile(i1, j);
                                                if (Main.netMode == 1)
                                                    NetMessage.SendData(17, -1, -1, "", 7, (float)Player.tileTargetX, (float)Player.tileTargetY, 1f, 0, 0, 0);
                                            }
                                            else
                                            {
                                                int slope1 = 1;
                                                int slope2 = 2;
                                                if ((int)Main.tile[i1 + 1, j - 1].type == 19 || (int)Main.tile[i1 - 1, j + 1].type == 19 || WorldGen.SolidTile(i1 + 1, j) && !WorldGen.SolidTile(i1 - 1, j))
                                                {
                                                    slope1 = 2;
                                                    slope2 = 1;
                                                }
                                                if ((int)Main.tile[i1, j].slope() == 0)
                                                {
                                                    WorldGen.SlopeTile(i1, j, slope1);
                                                    int num5 = (int)Main.tile[i1, j].slope();
                                                    if (Main.netMode == 1)
                                                        NetMessage.SendData(17, -1, -1, "", 14, (float)Player.tileTargetX, (float)Player.tileTargetY, (float)num5, 0, 0, 0);
                                                }
                                                else if ((int)Main.tile[i1, j].slope() == slope1)
                                                {
                                                    WorldGen.SlopeTile(i1, j, slope2);
                                                    int num5 = (int)Main.tile[i1, j].slope();
                                                    if (Main.netMode == 1)
                                                        NetMessage.SendData(17, -1, -1, "", 14, (float)Player.tileTargetX, (float)Player.tileTargetY, (float)num5, 0, 0, 0);
                                                }
                                                else
                                                {
                                                    WorldGen.SlopeTile(i1, j, 0);
                                                    int num5 = (int)Main.tile[i1, j].slope();
                                                    if (Main.netMode == 1)
                                                        NetMessage.SendData(17, -1, -1, "", 14, (float)Player.tileTargetX, (float)Player.tileTargetY, (float)num5, 0, 0, 0);
                                                    WorldGen.PoundTile(i1, j);
                                                    if (Main.netMode == 1)
                                                        NetMessage.SendData(17, -1, -1, "", 7, (float)Player.tileTargetX, (float)Player.tileTargetY, 1f, 0, 0, 0);
                                                }
                                            }
                                        }
                                        else if ((int)Main.tile[i1, j].type == 314)
                                        {
                                            if (Minecart.FrameTrack(i1, j, true, false) && Main.netMode == 1)
                                                NetMessage.SendData(17, -1, -1, "", 15, (float)Player.tileTargetX, (float)Player.tileTargetY, 1f, 0, 0, 0);
                                        }
                                        else if ((int)Main.tile[i1, j].type == 137)
                                        {
                                            Main.tile[i1, j].frameX = (int)Main.tile[i1, j].frameX != 18 ? (short)18 : (short)0;
                                            if (Main.netMode == 1)
                                                NetMessage.SendTileSquare(-1, Player.tileTargetX, Player.tileTargetY, 1);
                                        }
                                        else if ((Main.tile[i1, j].halfBrick() || (int)Main.tile[i1, j].slope() != 0) && !Main.tileSolidTop[(int)Main.tile[Player.tileTargetX, Player.tileTargetY].type])
                                        {
                                            int num5 = 1;
                                            int slope1 = 1;
                                            int slope2 = 2;
                                            if ((WorldGen.SolidTile(i1 + 1, j) || (int)Main.tile[i1 + 1, j].slope() == 1 || (int)Main.tile[i1 + 1, j].slope() == 3) && !WorldGen.SolidTile(i1 - 1, j))
                                            {
                                                slope1 = 2;
                                                slope2 = 1;
                                            }
                                            if (WorldGen.SolidTile(i1, j - 1) && !WorldGen.SolidTile(i1, j + 1))
                                                num5 = -1;
                                            if (num5 == 1)
                                            {
                                                if ((int)Main.tile[i1, j].slope() == 0)
                                                    WorldGen.SlopeTile(i1, j, slope1);
                                                else if ((int)Main.tile[i1, j].slope() == slope1)
                                                    WorldGen.SlopeTile(i1, j, slope2);
                                                else if ((int)Main.tile[i1, j].slope() == slope2)
                                                    WorldGen.SlopeTile(i1, j, slope1 + 2);
                                                else if ((int)Main.tile[i1, j].slope() == slope1 + 2)
                                                    WorldGen.SlopeTile(i1, j, slope2 + 2);
                                                else
                                                    WorldGen.SlopeTile(i1, j, 0);
                                            }
                                            else if ((int)Main.tile[i1, j].slope() == 0)
                                                WorldGen.SlopeTile(i1, j, slope1 + 2);
                                            else if ((int)Main.tile[i1, j].slope() == slope1 + 2)
                                                WorldGen.SlopeTile(i1, j, slope2 + 2);
                                            else if ((int)Main.tile[i1, j].slope() == slope2 + 2)
                                                WorldGen.SlopeTile(i1, j, slope1);
                                            else if ((int)Main.tile[i1, j].slope() == slope1)
                                                WorldGen.SlopeTile(i1, j, slope2);
                                            else
                                                WorldGen.SlopeTile(i1, j, 0);
                                            int num6 = (int)Main.tile[i1, j].slope();
                                            if (Main.netMode == 1)
                                                NetMessage.SendData(17, -1, -1, "", 14, (float)Player.tileTargetX, (float)Player.tileTargetY, (float)num6, 0, 0, 0);
                                        }
                                        else
                                        {
                                            WorldGen.PoundTile(i1, j);
                                            if (Main.netMode == 1)
                                                NetMessage.SendData(17, -1, -1, "", 7, (float)Player.tileTargetX, (float)Player.tileTargetY, 1f, 0, 0, 0);
                                        }
                                        this.poundRelease = false;
                                    }
                                }
                                else
                                {
                                    WorldGen.KillTile(Player.tileTargetX, Player.tileTargetY, true, true, false);
                                    Main.PlaySound(0, Player.tileTargetX * 16, Player.tileTargetY * 16, 1);
                                }
                            }
                            else
                                this.poundRelease = false;
                        }
                    }
                    if (this.releaseUseItem)
                        this.poundRelease = true;
                    int index1 = Player.tileTargetX;
                    int index2 = Player.tileTargetY;
                    bool flag4 = true;
                    if ((int)Main.tile[index1, index2].wall > 0)
                    {
                        if (!Main.wallHouse[(int)Main.tile[index1, index2].wall])
                        {
                            for (int index3 = index1 - 1; index3 < index1 + 2; ++index3)
                            {
                                for (int index4 = index2 - 1; index4 < index2 + 2; ++index4)
                                {
                                    if ((int)Main.tile[index3, index4].wall != (int)Main.tile[index1, index2].wall)
                                    {
                                        flag4 = false;
                                        break;
                                    }
                                }
                            }
                        }
                        else
                            flag4 = false;
                    }
                    if (flag4 && !Main.tile[index1, index2].active())
                    {
                        int num4 = -1;
                        if (((double)Main.mouseX + (double)Main.screenPosition.X) / 16.0 < Math.Round(((double)Main.mouseX + (double)Main.screenPosition.X) / 16.0))
                            num4 = 0;
                        int num5 = -1;
                        if (((double)Main.mouseY + (double)Main.screenPosition.Y) / 16.0 < Math.Round(((double)Main.mouseY + (double)Main.screenPosition.Y) / 16.0))
                            num5 = 0;
                        for (int index3 = Player.tileTargetX + num4; index3 <= Player.tileTargetX + num4 + 1; ++index3)
                        {
                            for (int index4 = Player.tileTargetY + num5; index4 <= Player.tileTargetY + num5 + 1; ++index4)
                            {
                                if (flag4)
                                {
                                    index1 = index3;
                                    index2 = index4;
                                    if ((int)Main.tile[index1, index2].wall > 0)
                                    {
                                        if (!Main.wallHouse[(int)Main.tile[index1, index2].wall])
                                        {
                                            for (int index5 = index1 - 1; index5 < index1 + 2; ++index5)
                                            {
                                                for (int index6 = index2 - 1; index6 < index2 + 2; ++index6)
                                                {
                                                    if ((int)Main.tile[index5, index6].wall != (int)Main.tile[index1, index2].wall)
                                                    {
                                                        flag4 = false;
                                                        break;
                                                    }
                                                }
                                            }
                                        }
                                        else
                                            flag4 = false;
                                    }
                                }
                            }
                        }
                    }
                    if (flag3 && (int)Main.tile[index1, index2].wall > 0 && (!Main.tile[index1, index2].active() || index1 != Player.tileTargetX || index2 != Player.tileTargetY || !Main.tileHammer[(int)Main.tile[index1, index2].type] && !this.poundRelease) && (this.toolTime == 0 && this.itemAnimation > 0 && (this.controlUseItem && sItem.hammer > 0)))
                    {
                        bool flag5 = true;
                        if (!Main.wallHouse[(int)Main.tile[index1, index2].wall])
                        {
                            flag5 = false;
                            for (int index3 = index1 - 1; index3 < index1 + 2; ++index3)
                            {
                                for (int index4 = index2 - 1; index4 < index2 + 2; ++index4)
                                {
                                    if ((int)Main.tile[index3, index4].wall == 0 || Main.wallHouse[(int)Main.tile[index3, index4].wall])
                                    {
                                        flag5 = true;
                                        break;
                                    }
                                }
                            }
                        }
                        if (flag5)
                        {
                            int tileId = this.hitTile.HitObject(index1, index2, 2);
                            int damageAmount2 = damageAmount1 + (int)((double)sItem.hammer * 1.5);
                            if (this.hitTile.AddDamage(tileId, damageAmount2, true) >= 100)
                            {
                                this.hitTile.Clear(tileId);
                                WorldGen.KillWall(index1, index2, false);
                                if (Main.netMode == 1)
                                    NetMessage.SendData(17, -1, -1, "", 2, (float)index1, (float)index2, 0.0f, 0, 0, 0);
                            }
                            else
                            {
                                WorldGen.KillWall(index1, index2, true);
                                if (Main.netMode == 1)
                                    NetMessage.SendData(17, -1, -1, "", 2, (float)index1, (float)index2, 1f, 0, 0, 0);
                            }
                            if (damageAmount2 != 0)
                                this.hitTile.Prune();
                            this.itemTime = sItem.useTime / 2;
                        }
                    }
                }
                if (Main.myPlayer == this.whoAmI && sItem.itemId == 1326 && (this.itemAnimation > 0 && this.itemTime == 0))
                {
                    this.itemTime = sItem.useTime;
                    Vector2 vector2;
                    vector2.X = (float)Main.mouseX + Main.screenPosition.X;
                    vector2.Y = (double)this.gravDir != 1.0 ? Main.screenPosition.Y + (float)Main.screenHeight - (float)Main.mouseY : (float)Main.mouseY + Main.screenPosition.Y - (float)this.height;
                    vector2.X -= (float)(this.width / 2);
                    if ((double)vector2.X > 50.0 && (double)vector2.X < (double)(Main.maxTilesX * 16 - 50) && ((double)vector2.Y > 50.0 && (double)vector2.Y < (double)(Main.maxTilesY * 16 - 50)))
                    {
                        int index1 = (int)((double)vector2.X / 16.0);
                        int index2 = (int)((double)vector2.Y / 16.0);
                        if (((int)Main.tile[index1, index2].wall != 87 || (double)index2 <= Main.worldSurface || NPC.downedPlantBoss) && !Collision.SolidCollision(vector2, this.width, this.height))
                        {
                            this.Teleport(vector2, 1, 0);
                            NetMessage.SendData(65, -1, -1, "", 0, (float)this.whoAmI, vector2.X, vector2.Y, 1, 0, 0);
                            if (this.chaosState)
                            {
                                this.statLife -= this.statLifeMax2 / 7;
                                if (Lang.lang <= 1)
                                {
                                    string deathText = " didn't materialize";
                                    if (Main.rand.Next(2) == 0)
                                        deathText = !this.Male ? "'s legs appeared where her head should be" : "'s legs appeared where his head should be";
                                    if (this.statLife <= 0)
                                        this.KillMe(1.0, 0, false, deathText);
                                }
                                else if (this.statLife <= 0)
                                    this.KillMe(1.0, 0, false, "");
                                this.lifeRegenCount = 0;
                                this.lifeRegenTime = 0;
                            }
                            this.AddBuff(88, 360, true);
                        }
                    }
                }
                if (sItem.itemId == 29 && this.itemAnimation > 0 && (this.statLifeMax < 400 && this.itemTime == 0))
                {
                    this.itemTime = sItem.useTime;
                    this.statLifeMax += 20;
                    this.statLifeMax2 += 20;
                    this.statLife += 20;
                    if (Main.myPlayer == this.whoAmI)
                        this.HealEffect(20, true);
                    AchievementsHelper.HandleSpecialEvent(this, 0);
                }
                if (sItem.itemId == 1291 && this.itemAnimation > 0 && (this.statLifeMax >= 400 && this.statLifeMax < 500) && this.itemTime == 0)
                {
                    this.itemTime = sItem.useTime;
                    this.statLifeMax += 5;
                    this.statLifeMax2 += 5;
                    this.statLife += 5;
                    if (Main.myPlayer == this.whoAmI)
                        this.HealEffect(5, true);
                    AchievementsHelper.HandleSpecialEvent(this, 2);
                }
                if (sItem.itemId == 109 && this.itemAnimation > 0 && (this.statManaMax < 200 && this.itemTime == 0))
                {
                    this.itemTime = sItem.useTime;
                    this.statManaMax += 20;
                    this.statManaMax2 += 20;
                    this.statMana += 20;
                    if (Main.myPlayer == this.whoAmI)
                        this.ManaEffect(20);
                    AchievementsHelper.HandleSpecialEvent(this, 1);
                }
                if (sItem.itemId == 3335 && this.itemAnimation > 0 && (!this.extraAccessory && Main.expertMode) && this.itemTime == 0)
                {
                    this.itemTime = sItem.useTime;
                    this.extraAccessory = true;
                    NetMessage.SendData(4, -1, -1, Main.player[this.whoAmI].name, this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                }
                this.PlaceThing();
            }
            if (sItem.itemId == 3542)
            {
                Vector2 vector2_1 = Main.OffsetsPlayerOnhand[this.bodyFrame.Y / 56] * 2f;
                if (this.direction != 1)
                    vector2_1.X = (float)this.bodyFrame.Width - vector2_1.X;
                if ((double)this.gravDir != 1.0)
                    vector2_1.Y = (float)this.bodyFrame.Height - vector2_1.Y;
                vector2_1 -= new Vector2((float)(this.bodyFrame.Width - this.width), (float)(this.bodyFrame.Height - 42)) / 2f;
                Vector2 vector2_2 = this.RotatedRelativePoint(this.position + vector2_1, true) - this.velocity;
                for (int index = 0; index < 4; ++index)
                {
                    Dust dust = Main.dust[Dust.NewDust(this.Center, 0, 0, 242, (float)(this.direction * 2), 0.0f, 150, new Color(), 1.3f)];
                    dust.position = vector2_2;
                    dust.velocity *= 0.0f;
                    dust.noGravity = true;
                    dust.fadeIn = 1f;
                    dust.velocity += this.velocity;
                    if (Main.rand.Next(2) == 0)
                    {
                        dust.position += Utils.RandomVector2(Main.rand, -4f, 4f);
                        dust.scale += Utils.NextFloat(Main.rand);
                        if (Main.rand.Next(2) == 0)
                            dust.customData = (object)this;
                    }
                }
            }
            if ((sItem.damage >= 0 && sItem.itemId > 0 && !sItem.noMelee || (sItem.itemId == 1450 || sItem.itemId == 1991 || (sItem.itemId == 3183 || sItem.itemId == 3542))) && this.itemAnimation > 0)
            {
                bool flag2 = false;
                Microsoft.Xna.Framework.Rectangle r = new Microsoft.Xna.Framework.Rectangle((int)this.itemLocation.X, (int)this.itemLocation.Y, 32, 32);
                if (!Main.dedServ)
                    r = new Microsoft.Xna.Framework.Rectangle((int)this.itemLocation.X, (int)this.itemLocation.Y, Main.itemTexture[sItem.itemId].Width, Main.itemTexture[sItem.itemId].Height);
                r.Width = (int)((double)r.Width * (double)sItem.scale);
                r.Height = (int)((double)r.Height * (double)sItem.scale);
                if (this.direction == -1)
                    r.X -= r.Width;
                if ((double)this.gravDir == 1.0)
                    r.Y -= r.Height;
                if (sItem.useStyle == 1)
                {
                    if ((double)this.itemAnimation < (double)this.itemAnimationMax * 0.333)
                    {
                        if (this.direction == -1)
                            r.X -= (int)((double)r.Width * 1.4 - (double)r.Width);
                        r.Width = (int)((double)r.Width * 1.4);
                        r.Y += (int)((double)r.Height * 0.5 * (double)this.gravDir);
                        r.Height = (int)((double)r.Height * 1.1);
                    }
                    else if ((double)this.itemAnimation >= (double)this.itemAnimationMax * 0.666)
                    {
                        if (this.direction == 1)
                            r.X -= (int)((double)r.Width * 1.2);
                        r.Width = r.Width * 2;
                        r.Y -= (int)(((double)r.Height * 1.4 - (double)r.Height) * (double)this.gravDir);
                        r.Height = (int)((double)r.Height * 1.4);
                    }
                }
                else if (sItem.useStyle == 3)
                {
                    if ((double)this.itemAnimation > (double)this.itemAnimationMax * 0.666)
                    {
                        flag2 = true;
                    }
                    else
                    {
                        if (this.direction == -1)
                            r.X -= (int)((double)r.Width * 1.4 - (double)r.Width);
                        r.Width = (int)((double)r.Width * 1.4);
                        r.Y += (int)((double)r.Height * 0.6);
                        r.Height = (int)((double)r.Height * 0.6);
                    }
                }
                double num4 = (double)this.gravDir;
                if (sItem.itemId == 1450 && Main.rand.Next(3) == 0)
                {
                    int index = -1;
                    float x = (float)(r.X + Main.rand.Next(r.Width));
                    float y = (float)(r.Y + Main.rand.Next(r.Height));
                    if (Main.rand.Next(500) == 0)
                        index = Gore.NewGore(new Vector2(x, y), new Vector2(), 415, (float)Main.rand.Next(51, 101) * 0.01f);
                    else if (Main.rand.Next(250) == 0)
                        index = Gore.NewGore(new Vector2(x, y), new Vector2(), 414, (float)Main.rand.Next(51, 101) * 0.01f);
                    else if (Main.rand.Next(80) == 0)
                        index = Gore.NewGore(new Vector2(x, y), new Vector2(), 413, (float)Main.rand.Next(51, 101) * 0.01f);
                    else if (Main.rand.Next(10) == 0)
                        index = Gore.NewGore(new Vector2(x, y), new Vector2(), 412, (float)Main.rand.Next(51, 101) * 0.01f);
                    else if (Main.rand.Next(3) == 0)
                        index = Gore.NewGore(new Vector2(x, y), new Vector2(), 411, (float)Main.rand.Next(51, 101) * 0.01f);
                    if (index >= 0)
                    {
                        Main.gore[index].velocity.X += (float)(this.direction * 2);
                        Main.gore[index].velocity.Y *= 0.3f;
                    }
                }
                if (sItem.itemId == 3542)
                    flag2 = true;
                if (!flag2)
                {
                    if (sItem.itemId == 989 && Main.rand.Next(5) == 0)
                    {
                        int Type;
                        switch (Main.rand.Next(3))
                        {
                            case 0:
                                Type = 15;
                                break;
                            case 1:
                                Type = 57;
                                break;
                            default:
                                Type = 58;
                                break;
                        }
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, Type, (float)(this.direction * 2), 0.0f, 150, new Color(), 1.3f);
                        Main.dust[index].velocity *= 0.2f;
                    }
                    if (sItem.itemId == 2880 && Main.rand.Next(2) == 0)
                    {
                        int Type = Utils.SelectRandom<int>(Main.rand, 226, 229);
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, Type, (float)(this.direction * 2), 0.0f, 150, new Color(), 1f);
                        Main.dust[index].velocity *= 0.2f;
                        Main.dust[index].noGravity = true;
                    }
                    if ((sItem.itemId == 44 || sItem.itemId == 45 || (sItem.itemId == 46 || sItem.itemId == 103) || sItem.itemId == 104) && Main.rand.Next(15) == 0)
                        Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 14, (float)(this.direction * 2), 0.0f, 150, new Color(), 1.3f);
                    if (sItem.itemId == 273 || sItem.itemId == 675)
                    {
                        if (Main.rand.Next(5) == 0)
                            Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 14, (float)(this.direction * 2), 0.0f, 150, new Color(), 1.4f);
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 27, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 1.2f);
                        Main.dust[index].noGravity = true;
                        Main.dust[index].velocity.X /= 2f;
                        Main.dust[index].velocity.Y /= 2f;
                    }
                    if (sItem.itemId == 723 && Main.rand.Next(2) == 0)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 64, 0.0f, 0.0f, 150, new Color(), 1.2f);
                        Main.dust[index].noGravity = true;
                    }
                    if (sItem.itemId == 65)
                    {
                        if (Main.rand.Next(5) == 0)
                            Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 58, 0.0f, 0.0f, 150, new Color(), 1.2f);
                        if (Main.rand.Next(10) == 0)
                            Gore.NewGore(new Vector2((float)r.X, (float)r.Y), new Vector2(), Main.rand.Next(16, 18), 1f);
                    }
                    if (sItem.itemId == 3065)
                    {
                        int index1 = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 58, 0.0f, 0.0f, 150, new Color(), 1.2f);
                        Main.dust[index1].velocity *= 0.5f;
                        if (Main.rand.Next(8) == 0)
                        {
                            int index2 = Gore.NewGore(new Vector2((float)r.Center.X, (float)r.Center.Y), new Vector2(), 16, 1f);
                            Main.gore[index2].velocity *= 0.5f;
                            Main.gore[index2].velocity += new Vector2((float)this.direction, 0.0f);
                        }
                    }
                    if (sItem.itemId == 190)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 40, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 0, new Color(), 1.2f);
                        Main.dust[index].noGravity = true;
                    }
                    else if (sItem.itemId == 213)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 3, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 0, new Color(), 1.2f);
                        Main.dust[index].noGravity = true;
                    }
                    if (sItem.itemId == 121)
                    {
                        for (int index1 = 0; index1 < 2; ++index1)
                        {
                            int index2 = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 6, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 2.5f);
                            Main.dust[index2].noGravity = true;
                            Main.dust[index2].velocity.X *= 2f;
                            Main.dust[index2].velocity.Y *= 2f;
                        }
                    }
                    if (sItem.itemId == 122 || sItem.itemId == 217)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 6, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 1.9f);
                        Main.dust[index].noGravity = true;
                    }
                    if (sItem.itemId == 155)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 172, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 0.9f);
                        Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.1f;
                    }
                    if (sItem.itemId == 676 && Main.rand.Next(3) == 0)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 67, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 90, new Color(), 1.5f);
                        Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.2f;
                    }
                    if (sItem.itemId == 3063)
                    {
                        int index = Dust.NewDust(Utils.TopLeft(r), r.Width, r.Height, 66, 0.0f, 0.0f, 150, Color.Transparent, 0.85f);
                        Main.dust[index].color = Main.hslToRgb(Utils.NextFloat(Main.rand), 1f, 0.5f);
                        Main.dust[index].noGravity = true;
                        Main.dust[index].velocity /= 2f;
                    }
                    if (sItem.itemId == 724 && Main.rand.Next(5) == 0)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 67, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 90, new Color(), 1.5f);
                        Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.2f;
                    }
                    if (sItem.itemId >= 795 && sItem.itemId <= 802 && Main.rand.Next(3) == 0)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 115, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 140, new Color(), 1.5f);
                        Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.25f;
                    }
                    if (sItem.itemId == 367 || sItem.itemId == 368 || sItem.itemId == 674)
                    {
                        if (Main.rand.Next(3) == 0)
                        {
                            int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 57, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 1.1f);
                            Main.dust[index].noGravity = true;
                            Main.dust[index].velocity.X /= 2f;
                            Main.dust[index].velocity.Y /= 2f;
                            Main.dust[index].velocity.X += (float)(this.direction * 2);
                        }
                        if (Main.rand.Next(4) == 0)
                        {
                            int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 43, 0.0f, 0.0f, 254, new Color(), 0.3f);
                            Main.dust[index].velocity *= 0.0f;
                        }
                    }
                    if (sItem.itemId >= 198 && sItem.itemId <= 203)
                    {
                        float R = 0.5f;
                        float G = 0.5f;
                        float B = 0.5f;
                        if (sItem.itemId == 198)
                        {
                            R *= 0.1f;
                            G *= 0.5f;
                            B *= 1.2f;
                        }
                        else if (sItem.itemId == 199)
                        {
                            R *= 1f;
                            G *= 0.2f;
                            B *= 0.1f;
                        }
                        else if (sItem.itemId == 200)
                        {
                            R *= 0.1f;
                            G *= 1f;
                            B *= 0.2f;
                        }
                        else if (sItem.itemId == 201)
                        {
                            R *= 0.8f;
                            G *= 0.1f;
                            B *= 1f;
                        }
                        else if (sItem.itemId == 202)
                        {
                            R *= 0.8f;
                            G *= 0.9f;
                            B *= 1f;
                        }
                        else if (sItem.itemId == 203)
                        {
                            R *= 0.9f;
                            G *= 0.9f;
                            B *= 0.1f;
                        }
                        Lighting.AddLight((int)(((double)this.itemLocation.X + 6.0 + (double)this.velocity.X) / 16.0), (int)(((double)this.itemLocation.Y - 14.0) / 16.0), R, G, B);
                    }
                    if (this.frostBurn && sItem.melee && (!sItem.noMelee && !sItem.noUseGraphic) && Main.rand.Next(2) == 0)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 135, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 2.5f);
                        Main.dust[index].noGravity = true;
                        Main.dust[index].velocity *= 0.7f;
                        Main.dust[index].velocity.Y -= 0.5f;
                    }
                    if (sItem.melee && !sItem.noMelee && (!sItem.noUseGraphic && (int)this.meleeEnchant > 0))
                    {
                        if ((int)this.meleeEnchant == 1)
                        {
                            if (Main.rand.Next(3) == 0)
                            {
                                int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 171, 0.0f, 0.0f, 100, new Color(), 1f);
                                Main.dust[index].noGravity = true;
                                Main.dust[index].fadeIn = 1.5f;
                                Main.dust[index].velocity *= 0.25f;
                            }
                        }
                        else if ((int)this.meleeEnchant == 2)
                        {
                            if (Main.rand.Next(2) == 0)
                            {
                                int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 75, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 2.5f);
                                Main.dust[index].noGravity = true;
                                Main.dust[index].velocity *= 0.7f;
                                Main.dust[index].velocity.Y -= 0.5f;
                            }
                        }
                        else if ((int)this.meleeEnchant == 3)
                        {
                            if (Main.rand.Next(2) == 0)
                            {
                                int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 6, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 2.5f);
                                Main.dust[index].noGravity = true;
                                Main.dust[index].velocity *= 0.7f;
                                Main.dust[index].velocity.Y -= 0.5f;
                            }
                        }
                        else if ((int)this.meleeEnchant == 4)
                        {
                            if (Main.rand.Next(2) == 0)
                            {
                                int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 57, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 1.1f);
                                Main.dust[index].noGravity = true;
                                Main.dust[index].velocity.X /= 2f;
                                Main.dust[index].velocity.Y /= 2f;
                            }
                        }
                        else if ((int)this.meleeEnchant == 5)
                        {
                            if (Main.rand.Next(2) == 0)
                            {
                                int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 169, 0.0f, 0.0f, 100, new Color(), 1f);
                                Main.dust[index].velocity.X += (float)this.direction;
                                Main.dust[index].velocity.Y += 0.2f;
                                Main.dust[index].noGravity = true;
                            }
                        }
                        else if ((int)this.meleeEnchant == 6)
                        {
                            if (Main.rand.Next(2) == 0)
                            {
                                int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 135, 0.0f, 0.0f, 100, new Color(), 1f);
                                Main.dust[index].velocity.X += (float)this.direction;
                                Main.dust[index].velocity.Y += 0.2f;
                                Main.dust[index].noGravity = true;
                            }
                        }
                        else if ((int)this.meleeEnchant == 7)
                        {
                            if (Main.rand.Next(20) == 0)
                            {
                                int Type = Main.rand.Next(139, 143);
                                int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, Type, this.velocity.X, this.velocity.Y, 0, new Color(), 1.2f);
                                Main.dust[index].velocity.X *= (float)(1.0 + (double)Main.rand.Next(-50, 51) * 0.00999999977648258);
                                Main.dust[index].velocity.Y *= (float)(1.0 + (double)Main.rand.Next(-50, 51) * 0.00999999977648258);
                                Main.dust[index].velocity.X += (float)Main.rand.Next(-50, 51) * 0.05f;
                                Main.dust[index].velocity.Y += (float)Main.rand.Next(-50, 51) * 0.05f;
                                Main.dust[index].scale *= (float)(1.0 + (double)Main.rand.Next(-30, 31) * 0.00999999977648258);
                            }
                            if (Main.rand.Next(40) == 0)
                            {
                                int Type = Main.rand.Next(276, 283);
                                int index = Gore.NewGore(new Vector2((float)r.X, (float)r.Y), this.velocity, Type, 1f);
                                Main.gore[index].velocity.X *= (float)(1.0 + (double)Main.rand.Next(-50, 51) * 0.00999999977648258);
                                Main.gore[index].velocity.Y *= (float)(1.0 + (double)Main.rand.Next(-50, 51) * 0.00999999977648258);
                                Main.gore[index].scale *= (float)(1.0 + (double)Main.rand.Next(-20, 21) * 0.00999999977648258);
                                Main.gore[index].velocity.X += (float)Main.rand.Next(-50, 51) * 0.05f;
                                Main.gore[index].velocity.Y += (float)Main.rand.Next(-50, 51) * 0.05f;
                            }
                        }
                        else if ((int)this.meleeEnchant == 8 && Main.rand.Next(4) == 0)
                        {
                            int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 46, 0.0f, 0.0f, 100, new Color(), 1f);
                            Main.dust[index].noGravity = true;
                            Main.dust[index].fadeIn = 1.5f;
                            Main.dust[index].velocity *= 0.25f;
                        }
                    }
                    if (this.magmaStone && sItem.melee && (!sItem.noMelee && !sItem.noUseGraphic) && Main.rand.Next(3) != 0)
                    {
                        int index = Dust.NewDust(new Vector2((float)r.X, (float)r.Y), r.Width, r.Height, 6, this.velocity.X * 0.2f + (float)(this.direction * 3), this.velocity.Y * 0.2f, 100, new Color(), 2.5f);
                        Main.dust[index].noGravity = true;
                        Main.dust[index].velocity.X *= 2f;
                        Main.dust[index].velocity.Y *= 2f;
                    }
                    if (Main.myPlayer == i && (sItem.itemId == 1991 || sItem.itemId == 3183))
                    {
                        for (int i1 = 0; i1 < 200; ++i1)
                        {
                            if (Main.npc[i1].active && (int)Main.npc[i1].catchItem > 0)
                            {
                                Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle((int)Main.npc[i1].position.X, (int)Main.npc[i1].position.Y, Main.npc[i1].width, Main.npc[i1].height);
                                if (r.Intersects(rectangle) && (sItem.itemId == 3183 || Main.npc[i1].noTileCollide || Collision.CanHit(this.position, this.width, this.height, Main.npc[i1].position, Main.npc[i1].width, Main.npc[i1].height)))
                                    NPC.CatchNPC(i1, i);
                            }
                        }
                    }
                    if (Main.myPlayer == i && (sItem.damage > 0 || sItem.itemId == 3183))
                    {
                        int num5 = (int)((double)sItem.damage * (double)this.meleeDamage);
                        float num6 = sItem.knockBack;
                        float num7 = 1f;
                        if (this.kbGlove)
                            ++num7;
                        if (this.kbBuff)
                            num7 += 0.5f;
                        float num8 = num6 * num7;
                        if (this.inventory[this.selectedItem].itemId == 3106)
                            num8 += num8 * (1f - this.stealth);
                        List<ushort> list = (List<ushort>)null;
                        if (sItem.itemId == 213)
                            list = new List<ushort>((IEnumerable<ushort>)new ushort[17]
              {
                (ushort) 3,
                (ushort) 24,
                (ushort) 52,
                (ushort) 61,
                (ushort) 62,
                (ushort) 71,
                (ushort) 73,
                (ushort) 74,
                (ushort) 82,
                (ushort) 83,
                (ushort) 84,
                (ushort) 110,
                (ushort) 113,
                (ushort) 115,
                (ushort) 184,
                (ushort) 205,
                (ushort) 201
              });
                        int num9 = r.X / 16;
                        int num10 = (r.X + r.Width) / 16 + 1;
                        int num11 = r.Y / 16;
                        int num12 = (r.Y + r.Height) / 16 + 1;
                        for (int i1 = num9; i1 < num10; ++i1)
                        {
                            for (int j = num11; j < num12; ++j)
                            {
                                if (Main.tile[i1, j] != null && Main.tileCut[(int)Main.tile[i1, j].type] && (list == null || !list.Contains(Main.tile[i1, j].type)) && (Main.tile[i1, j + 1] != null && (int)Main.tile[i1, j + 1].type != 78 && (int)Main.tile[i1, j + 1].type != 380))
                                {
                                    if (sItem.itemId == 1786)
                                    {
                                        int num13 = (int)Main.tile[i1, j].type;
                                        WorldGen.KillTile(i1, j, false, false, false);
                                        if (!Main.tile[i1, j].active())
                                        {
                                            int Stack = 0;
                                            if (num13 == 3 || num13 == 24 || (num13 == 61 || num13 == 110) || num13 == 201)
                                                Stack = Main.rand.Next(1, 3);
                                            if (num13 == 73 || num13 == 74 || num13 == 113)
                                                Stack = Main.rand.Next(2, 5);
                                            if (Stack > 0)
                                            {
                                                int number = Item.NewItem(i1 * 16, j * 16, 16, 16, 1727, Stack, false, 0, false);
                                                if (Main.netMode == 1)
                                                    NetMessage.SendData(21, -1, -1, "", number, 1f, 0.0f, 0.0f, 0, 0, 0);
                                            }
                                        }
                                        if (Main.netMode == 1)
                                            NetMessage.SendData(17, -1, -1, "", 0, (float)i1, (float)j, 0.0f, 0, 0, 0);
                                    }
                                    else
                                    {
                                        WorldGen.KillTile(i1, j, false, false, false);
                                        if (Main.netMode == 1)
                                            NetMessage.SendData(17, -1, -1, "", 0, (float)i1, (float)j, 0.0f, 0, 0, 0);
                                    }
                                }
                            }
                        }
                        if (sItem.itemId != 3183)
                        {
                            for (int index1 = 0; index1 < 200; ++index1)
                            {
                                if (Main.npc[index1].active && Main.npc[index1].immune[i] == 0 && this.attackCD == 0)
                                {
                                    if (!Main.npc[index1].dontTakeDamage)
                                    {
                                        if (!Main.npc[index1].friendly || Main.npc[index1].type == 22 && this.killGuide || Main.npc[index1].type == 54 && this.killClothier)
                                        {
                                            Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle((int)Main.npc[index1].position.X, (int)Main.npc[index1].position.Y, Main.npc[index1].width, Main.npc[index1].height);
                                            if (r.Intersects(rectangle) && (Main.npc[index1].noTileCollide || Collision.CanHit(this.position, this.width, this.height, Main.npc[index1].position, Main.npc[index1].width, Main.npc[index1].height)))
                                            {
                                                bool crit = false;
                                                if (Main.rand.Next(1, 101) <= this.meleeCrit)
                                                    crit = true;
                                                int num13 = Main.DamageVar((float)num5);
                                                int index2 = Item.NPCtoBanner(Main.npc[index1].BannerID());
                                                if (index2 > 0 && this.NPCBannerBuff[index2])
                                                {
                                                    if (Main.expertMode)
                                                        num5 *= 2;
                                                    else
                                                        num5 = (int)((double)num5 * 1.5);
                                                }
                                                this.StatusNPC(sItem.itemId, index1);
                                                this.OnHit(Main.npc[index1].Center.X, Main.npc[index1].Center.Y, (Entity)Main.npc[index1]);
                                                if (this.armorPenetration > 0)
                                                    num13 += Main.npc[index1].checkArmorPenetration(this.armorPenetration);
                                                int num14 = (int)Main.npc[index1].StrikeNPC(num13, num8, this.direction, crit, false, false);
                                                if (this.inventory[this.selectedItem].itemId == 3211)
                                                {
                                                    Vector2 vector2_1 = new Vector2((float)(this.direction * 100 + Main.rand.Next(-25, 26)), (float)Main.rand.Next(-75, 76));
                                                    vector2_1.Normalize();
                                                    vector2_1 *= (float)Main.rand.Next(30, 41) * 0.1f;
                                                    Vector2 vector2_2 = new Vector2((float)(r.X + Main.rand.Next(r.Width)), (float)(r.Y + Main.rand.Next(r.Height)));
                                                    vector2_2 = (vector2_2 + Main.npc[index1].Center * 2f) / 3f;
                                                    Projectile.NewProjectile(vector2_2.X, vector2_2.Y, vector2_1.X, vector2_1.Y, 524, (int)((double)num5 * 0.7), num8 * 0.7f, this.whoAmI, 0.0f, 0.0f);
                                                }
                                                if (this.beetleOffense)
                                                {
                                                    this.beetleCounter += (float)num14;
                                                    this.beetleCountdown = 0;
                                                }
                                                if (sItem.itemId == 1826 && ((double)Main.npc[index1].value > 0.0 || Main.npc[index1].damage > 0 && !Main.npc[index1].friendly))
                                                    this.pumpkinSword(index1, (int)((double)num5 * 1.5), num8);
                                                if ((int)this.meleeEnchant == 7)
                                                    Projectile.NewProjectile(Main.npc[index1].Center.X, Main.npc[index1].Center.Y, Main.npc[index1].velocity.X, Main.npc[index1].velocity.Y, 289, 0, 0.0f, this.whoAmI, 0.0f, 0.0f);
                                                if (this.inventory[this.selectedItem].itemId == 3106)
                                                {
                                                    this.stealth = 1f;
                                                    if (Main.netMode == 1)
                                                        NetMessage.SendData(84, -1, -1, "", this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                                                }
                                                if (sItem.itemId == 1123)
                                                {
                                                    int num15 = Main.rand.Next(1, 4);
                                                    if (this.strongBees && Main.rand.Next(3) == 0)
                                                        ++num15;
                                                    for (int index3 = 0; index3 < num15; ++index3)
                                                    {
                                                        float num16 = (float)(this.direction * 2) + (float)Main.rand.Next(-35, 36) * 0.02f;
                                                        float num17 = (float)Main.rand.Next(-35, 36) * 0.02f;
                                                        float SpeedX = num16 * 0.2f;
                                                        float SpeedY = num17 * 0.2f;
                                                        Projectile.NewProjectile((float)(r.X + r.Width / 2), (float)(r.Y + r.Height / 2), SpeedX, SpeedY, this.beeType(), this.beeDamage(num13 / 3), this.beeKB(0.0f), i, 0.0f, 0.0f);
                                                    }
                                                }
                                                if ((double)Main.npc[index1].value > 0.0 && this.coins && Main.rand.Next(5) == 0)
                                                {
                                                    int Type = 71;
                                                    if (Main.rand.Next(10) == 0)
                                                        Type = 72;
                                                    if (Main.rand.Next(100) == 0)
                                                        Type = 73;
                                                    int number = Item.NewItem((int)Main.npc[index1].position.X, (int)Main.npc[index1].position.Y, Main.npc[index1].width, Main.npc[index1].height, Type, 1, false, 0, false);
                                                    Main.item[number].stack = Main.rand.Next(1, 11);
                                                    Main.item[number].velocity.Y = (float)Main.rand.Next(-20, 1) * 0.2f;
                                                    Main.item[number].velocity.X = (float)Main.rand.Next(10, 31) * 0.2f * (float)this.direction;
                                                    if (Main.netMode == 1)
                                                        NetMessage.SendData(21, -1, -1, "", number, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                                                }
                                                int num18 = Item.NPCtoBanner(Main.npc[index1].BannerID());
                                                if (num18 >= 0)
                                                    this.lastCreatureHit = num18;
                                                if (Main.netMode != 0)
                                                {
                                                    if (crit)
                                                        NetMessage.SendData(28, -1, -1, "", index1, (float)num13, num8, (float)this.direction, 1, 0, 0);
                                                    else
                                                        NetMessage.SendData(28, -1, -1, "", index1, (float)num13, num8, (float)this.direction, 0, 0, 0);
                                                }
                                                if (this.accDreamCatcher)
                                                    this.addDPS(num13);
                                                Main.npc[index1].immune[i] = this.itemAnimation;
                                                this.attackCD = (int)((double)this.itemAnimationMax * 0.33);
                                            }
                                        }
                                    }
                                    else if (Main.npc[index1].type == 63 || Main.npc[index1].type == 64 || (Main.npc[index1].type == 103 || Main.npc[index1].type == 242))
                                    {
                                        Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle((int)Main.npc[index1].position.X, (int)Main.npc[index1].position.Y, Main.npc[index1].width, Main.npc[index1].height);
                                        if (r.Intersects(rectangle))
                                        {
                                            this.Hurt((int)((double)Main.npc[index1].damage * 1.3), -this.direction, false, false, " was slain...", false);
                                            Main.npc[index1].immune[i] = this.itemAnimation;
                                            this.attackCD = (int)((double)this.itemAnimationMax * 0.33);
                                        }
                                    }
                                }
                            }
                            if (this.hostile)
                            {
                                for (int index1 = 0; index1 < (int)byte.MaxValue; ++index1)
                                {
                                    if (index1 != i && Main.player[index1].active && (Main.player[index1].hostile && !Main.player[index1].immune) && (!Main.player[index1].dead && (Main.player[i].team == 0 || Main.player[i].team != Main.player[index1].team)))
                                    {
                                        Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle((int)Main.player[index1].position.X, (int)Main.player[index1].position.Y, Main.player[index1].width, Main.player[index1].height);
                                        if (r.Intersects(rectangle) && Collision.CanHit(this.position, this.width, this.height, Main.player[index1].position, Main.player[index1].width, Main.player[index1].height))
                                        {
                                            bool Crit = false;
                                            if (Main.rand.Next(1, 101) <= 10)
                                                Crit = true;
                                            int Damage = Main.DamageVar((float)num5);
                                            this.StatusPvP(sItem.itemId, index1);
                                            this.OnHit(Main.player[index1].Center.X, Main.player[index1].Center.Y, (Entity)Main.player[index1]);
                                            int num13 = (int)Main.player[index1].Hurt(Damage, this.direction, true, false, "", Crit);
                                            if (this.inventory[this.selectedItem].itemId == 3211)
                                            {
                                                Vector2 vector2_1 = new Vector2((float)(this.direction * 100 + Main.rand.Next(-25, 26)), (float)Main.rand.Next(-75, 76));
                                                vector2_1.Normalize();
                                                vector2_1 *= (float)Main.rand.Next(30, 41) * 0.1f;
                                                Vector2 vector2_2 = new Vector2((float)(r.X + Main.rand.Next(r.Width)), (float)(r.Y + Main.rand.Next(r.Height)));
                                                vector2_2 = (vector2_2 + Main.player[index1].Center * 2f) / 3f;
                                                Projectile.NewProjectile(vector2_2.X, vector2_2.Y, vector2_1.X, vector2_1.Y, 524, (int)((double)num5 * 0.7), num8 * 0.7f, this.whoAmI, 0.0f, 0.0f);
                                            }
                                            if (this.beetleOffense)
                                            {
                                                this.beetleCounter += (float)num13;
                                                this.beetleCountdown = 0;
                                            }
                                            if ((int)this.meleeEnchant == 7)
                                                Projectile.NewProjectile(Main.player[index1].Center.X, Main.player[index1].Center.Y, Main.player[index1].velocity.X, Main.player[index1].velocity.Y, 289, 0, 0.0f, this.whoAmI, 0.0f, 0.0f);
                                            if (sItem.itemId == 1123)
                                            {
                                                int num14 = Main.rand.Next(1, 4);
                                                if (this.strongBees && Main.rand.Next(3) == 0)
                                                    ++num14;
                                                for (int index2 = 0; index2 < num14; ++index2)
                                                {
                                                    float num15 = (float)(this.direction * 2) + (float)Main.rand.Next(-35, 36) * 0.02f;
                                                    float num16 = (float)Main.rand.Next(-35, 36) * 0.02f;
                                                    float SpeedX = num15 * 0.2f;
                                                    float SpeedY = num16 * 0.2f;
                                                    Projectile.NewProjectile((float)(r.X + r.Width / 2), (float)(r.Y + r.Height / 2), SpeedX, SpeedY, this.beeType(), this.beeDamage(Damage / 3), this.beeKB(0.0f), i, 0.0f, 0.0f);
                                                }
                                            }
                                            if (this.inventory[this.selectedItem].itemId == 3106)
                                            {
                                                this.stealth = 1f;
                                                if (Main.netMode == 1)
                                                    NetMessage.SendData(84, -1, -1, "", this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                                            }
                                            if (sItem.itemId == 1826 && (double)Main.npc[index1].value > 0.0)
                                                this.pumpkinSword(index1, (int)((double)num5 * 1.5), num8);
                                            if (Main.netMode != 0)
                                            {
                                                if (Crit)
                                                    NetMessage.SendData(26, -1, -1, Lang.deathMsg(this.whoAmI, -1, -1, -1), index1, (float)this.direction, (float)Damage, 1f, 1, 0, 0);
                                                else
                                                    NetMessage.SendData(26, -1, -1, Lang.deathMsg(this.whoAmI, -1, -1, -1), index1, (float)this.direction, (float)Damage, 1f, 0, 0, 0);
                                            }
                                            this.attackCD = (int)((double)this.itemAnimationMax * 0.33);
                                        }
                                    }
                                }
                            }
                            if (sItem.itemId == 787 && (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.1) || this.itemAnimation == (int)((double)this.itemAnimationMax * 0.3) || (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.5) || this.itemAnimation == (int)((double)this.itemAnimationMax * 0.7)) || this.itemAnimation == (int)((double)this.itemAnimationMax * 0.9)))
                            {
                                float num13 = 0.0f;
                                float num14 = 0.0f;
                                float num15 = 0.0f;
                                float num16 = 0.0f;
                                if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.9))
                                    num13 = -7f;
                                if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.7))
                                {
                                    num13 = -6f;
                                    num14 = 2f;
                                }
                                if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.5))
                                {
                                    num13 = -4f;
                                    num14 = 4f;
                                }
                                if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.3))
                                {
                                    num13 = -2f;
                                    num14 = 6f;
                                }
                                if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.1))
                                    num14 = 7f;
                                if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.7))
                                    num16 = 26f;
                                if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.3))
                                {
                                    num16 -= 4f;
                                    num15 -= 20f;
                                }
                                if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.1))
                                    num15 += 6f;
                                if (this.direction == -1)
                                {
                                    if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.9))
                                        num16 -= 8f;
                                    if (this.itemAnimation == (int)((double)this.itemAnimationMax * 0.7))
                                        num16 -= 6f;
                                }
                                float num17 = num13 * 1.5f;
                                float num18 = num14 * 1.5f;
                                float num19 = num16 * (float)this.direction;
                                float num20 = num15 * this.gravDir;
                                Projectile.NewProjectile((float)(r.X + r.Width / 2) + num19, (float)(r.Y + r.Height / 2) + num20, (float)this.direction * num18, num17 * this.gravDir, 131, num5 / 2, 0.0f, i, 0.0f, 0.0f);
                            }
                        }
                    }
                }
            }
            if (this.itemTime == 0 && this.itemAnimation > 0)
            {
                if ((int)sItem.hairDye >= 0)
                {
                    this.itemTime = sItem.useTime;
                    if (this.whoAmI == Main.myPlayer)
                    {
                        this.hairDye = (byte)sItem.hairDye;
                        NetMessage.SendData(4, -1, -1, Main.player[this.whoAmI].name, this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                    }
                }
                if (sItem.healLife > 0)
                {
                    this.statLife += sItem.healLife;
                    this.itemTime = sItem.useTime;
                    if (Main.myPlayer == this.whoAmI)
                        this.HealEffect(sItem.healLife, true);
                }
                if (sItem.healMana > 0)
                {
                    this.statMana += sItem.healMana;
                    this.itemTime = sItem.useTime;
                    if (Main.myPlayer == this.whoAmI)
                    {
                        this.AddBuff(94, Player.manaSickTime, true);
                        this.ManaEffect(sItem.healMana);
                    }
                }
                if (sItem.buffType > 0)
                {
                    if (this.whoAmI == Main.myPlayer && sItem.buffType != 90 && sItem.buffType != 27)
                        this.AddBuff(sItem.buffType, sItem.buffTime, true);
                    this.itemTime = sItem.useTime;
                }
                if (sItem.itemId == 678)
                {
                    this.itemTime = sItem.useTime;
                    if (this.whoAmI == Main.myPlayer)
                    {
                        this.AddBuff(20, 216000, true);
                        this.AddBuff(22, 216000, true);
                        this.AddBuff(23, 216000, true);
                        this.AddBuff(24, 216000, true);
                        this.AddBuff(30, 216000, true);
                        this.AddBuff(31, 216000, true);
                        this.AddBuff(32, 216000, true);
                        this.AddBuff(33, 216000, true);
                        this.AddBuff(35, 216000, true);
                        this.AddBuff(36, 216000, true);
                        this.AddBuff(68, 216000, true);
                    }
                }
            }
            if (this.whoAmI == Main.myPlayer)
            {
                if (this.itemTime == 0 && this.itemAnimation > 0 && (sItem.itemId == 361 && Main.CanStartInvasion(1, true)))
                {
                    this.itemTime = sItem.useTime;
                    Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                    if (Main.netMode != 1)
                    {
                        if (Main.invasionType == 0)
                        {
                            Main.invasionDelay = 0;
                            Main.StartInvasion(1);
                        }
                    }
                    else
                        NetMessage.SendData(61, -1, -1, "", this.whoAmI, -1f, 0.0f, 0.0f, 0, 0, 0);
                }
                if (this.itemTime == 0 && this.itemAnimation > 0 && (sItem.itemId == 602 && Main.CanStartInvasion(2, true)))
                {
                    this.itemTime = sItem.useTime;
                    Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                    if (Main.netMode != 1)
                    {
                        if (Main.invasionType == 0)
                        {
                            Main.invasionDelay = 0;
                            Main.StartInvasion(2);
                        }
                    }
                    else
                        NetMessage.SendData(61, -1, -1, "", this.whoAmI, -2f, 0.0f, 0.0f, 0, 0, 0);
                }
                if (this.itemTime == 0 && this.itemAnimation > 0 && (sItem.itemId == 1315 && Main.CanStartInvasion(3, true)))
                {
                    this.itemTime = sItem.useTime;
                    Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                    if (Main.netMode != 1)
                    {
                        if (Main.invasionType == 0)
                        {
                            Main.invasionDelay = 0;
                            Main.StartInvasion(3);
                        }
                    }
                    else
                        NetMessage.SendData(61, -1, -1, "", this.whoAmI, -3f, 0.0f, 0.0f, 0, 0, 0);
                }
                if (this.itemTime == 0 && this.itemAnimation > 0 && (sItem.itemId == 1844 && !Main.dayTime) && (!Main.pumpkinMoon && !Main.snowMoon))
                {
                    this.itemTime = sItem.useTime;
                    Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                    if (Main.netMode != 1)
                    {
                        Main.NewText(Lang.misc[31], (byte)50, byte.MaxValue, (byte)130, false);
                        Main.startPumpkinMoon();
                    }
                    else
                        NetMessage.SendData(61, -1, -1, "", this.whoAmI, -4f, 0.0f, 0.0f, 0, 0, 0);
                }
                if (this.itemTime == 0 && this.itemAnimation > 0 && (sItem.itemId == 2767 && Main.dayTime) && !Main.eclipse)
                {
                    Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                    if (Main.netMode == 0)
                    {
                        this.itemTime = sItem.useTime;
                        Main.eclipse = true;
                        Main.NewText(Lang.misc[20], (byte)50, byte.MaxValue, (byte)130, false);
                    }
                    else
                        NetMessage.SendData(61, -1, -1, "", this.whoAmI, -6f, 0.0f, 0.0f, 0, 0, 0);
                }
                if (this.itemTime == 0 && this.itemAnimation > 0 && (sItem.itemId == 1958 && !Main.dayTime) && (!Main.pumpkinMoon && !Main.snowMoon))
                {
                    this.itemTime = sItem.useTime;
                    Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                    if (Main.netMode != 1)
                    {
                        Main.NewText(Lang.misc[34], (byte)50, byte.MaxValue, (byte)130, false);
                        Main.startSnowMoon();
                    }
                    else
                        NetMessage.SendData(61, -1, -1, "", this.whoAmI, -5f, 0.0f, 0.0f, 0, 0, 0);
                }
                if (this.itemTime == 0 && this.itemAnimation > 0 && ((int)sItem.makeNPC > 0 && this.controlUseItem) && ((double)this.position.X / 16.0 - (double)Player.tileRangeX - (double)sItem.tileBoost <= (double)Player.tileTargetX && ((double)this.position.X + (double)this.width) / 16.0 + (double)Player.tileRangeX + (double)sItem.tileBoost - 1.0 >= (double)Player.tileTargetX && ((double)this.position.Y / 16.0 - (double)Player.tileRangeY - (double)sItem.tileBoost <= (double)Player.tileTargetY && ((double)this.position.Y + (double)this.height) / 16.0 + (double)Player.tileRangeY + (double)sItem.tileBoost - 2.0 >= (double)Player.tileTargetY)))
                {
                    int x = Main.mouseX + (int)Main.screenPosition.X;
                    int y = Main.mouseY + (int)Main.screenPosition.Y;
                    this.itemTime = sItem.useTime;
                    if (!WorldGen.SolidTile(x / 16, y / 16))
                        NPC.ReleaseNPC(x, y, (int)sItem.makeNPC, sItem.placeStyle, this.whoAmI);
                }
                if (this.itemTime == 0 && this.itemAnimation > 0 && (sItem.itemId == 43 || sItem.itemId == 70 || (sItem.itemId == 544 || sItem.itemId == 556) || (sItem.itemId == 557 || sItem.itemId == 560 || (sItem.itemId == 1133 || sItem.itemId == 1331))) && this.SummonItemCheck())
                {
                    if (sItem.itemId == 560)
                    {
                        this.itemTime = sItem.useTime;
                        Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                        if (Main.netMode != 1)
                            NPC.SpawnOnPlayer(i, 50);
                        else
                            NetMessage.SendData(61, -1, -1, "", this.whoAmI, 50f, 0.0f, 0.0f, 0, 0, 0);
                    }
                    else if (sItem.itemId == 43)
                    {
                        if (!Main.dayTime)
                        {
                            this.itemTime = sItem.useTime;
                            Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                            if (Main.netMode != 1)
                                NPC.SpawnOnPlayer(i, 4);
                            else
                                NetMessage.SendData(61, -1, -1, "", this.whoAmI, 4f, 0.0f, 0.0f, 0, 0, 0);
                        }
                    }
                    else if (sItem.itemId == 70)
                    {
                        if (this.ZoneCorrupt)
                        {
                            this.itemTime = sItem.useTime;
                            Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                            if (Main.netMode != 1)
                                NPC.SpawnOnPlayer(i, 13);
                            else
                                NetMessage.SendData(61, -1, -1, "", this.whoAmI, 13f, 0.0f, 0.0f, 0, 0, 0);
                        }
                    }
                    else if (sItem.itemId == 544)
                    {
                        if (!Main.dayTime)
                        {
                            this.itemTime = sItem.useTime;
                            Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                            if (Main.netMode != 1)
                            {
                                NPC.SpawnOnPlayer(i, 125);
                                NPC.SpawnOnPlayer(i, 126);
                            }
                            else
                            {
                                NetMessage.SendData(61, -1, -1, "", this.whoAmI, 125f, 0.0f, 0.0f, 0, 0, 0);
                                NetMessage.SendData(61, -1, -1, "", this.whoAmI, 126f, 0.0f, 0.0f, 0, 0, 0);
                            }
                        }
                    }
                    else if (sItem.itemId == 556)
                    {
                        if (!Main.dayTime)
                        {
                            this.itemTime = sItem.useTime;
                            Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                            if (Main.netMode != 1)
                                NPC.SpawnOnPlayer(i, 134);
                            else
                                NetMessage.SendData(61, -1, -1, "", this.whoAmI, 134f, 0.0f, 0.0f, 0, 0, 0);
                        }
                    }
                    else if (sItem.itemId == 557)
                    {
                        if (!Main.dayTime)
                        {
                            this.itemTime = sItem.useTime;
                            Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                            if (Main.netMode != 1)
                                NPC.SpawnOnPlayer(i, (int)sbyte.MaxValue);
                            else
                                NetMessage.SendData(61, -1, -1, "", this.whoAmI, (float)sbyte.MaxValue, 0.0f, 0.0f, 0, 0, 0);
                        }
                    }
                    else if (sItem.itemId == 1133)
                    {
                        this.itemTime = sItem.useTime;
                        Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                        if (Main.netMode != 1)
                            NPC.SpawnOnPlayer(i, 222);
                        else
                            NetMessage.SendData(61, -1, -1, "", this.whoAmI, 222f, 0.0f, 0.0f, 0, 0, 0);
                    }
                    else if (sItem.itemId == 1331 && this.ZoneCrimson)
                    {
                        this.itemTime = sItem.useTime;
                        Main.PlaySound(15, (int)this.position.X, (int)this.position.Y, 0);
                        if (Main.netMode != 1)
                            NPC.SpawnOnPlayer(i, 266);
                        else
                            NetMessage.SendData(61, -1, -1, "", this.whoAmI, 266f, 0.0f, 0.0f, 0, 0, 0);
                    }
                }
            }
            if ((sItem.itemId == 50 || sItem.itemId == 3124 || sItem.itemId == 3199) && this.itemAnimation > 0)
            {
                if (Main.rand.Next(2) == 0)
                    Dust.NewDust(this.position, this.width, this.height, 15, 0.0f, 0.0f, 150, new Color(), 1.1f);
                if (this.itemTime == 0)
                    this.itemTime = sItem.useTime;
                else if (this.itemTime == sItem.useTime / 2)
                {
                    for (int index = 0; index < 70; ++index)
                        Dust.NewDust(this.position, this.width, this.height, 15, this.velocity.X * 0.5f, this.velocity.Y * 0.5f, 150, new Color(), 1.5f);
                    this.grappling[0] = -1;
                    this.grapCount = 0;
                    for (int index = 0; index < 1000; ++index)
                    {
                        if (Main.projectile[index].active && Main.projectile[index].owner == i && Main.projectile[index].aiStyle == 7)
                            Main.projectile[index].Kill();
                    }
                    this.Spawn();
                    for (int index = 0; index < 70; ++index)
                        Dust.NewDust(this.position, this.width, this.height, 15, 0.0f, 0.0f, 150, new Color(), 1.5f);
                }
            }
            if (sItem.itemId == 2350 && this.itemAnimation > 0)
            {
                if (this.itemTime == 0)
                    this.itemTime = sItem.useTime;
                else if (this.itemTime == 2)
                {
                    for (int index = 0; index < 70; ++index)
                        Main.dust[Dust.NewDust(this.position, this.width, this.height, 15, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 150, Color.Cyan, 1.2f)].velocity *= 0.5f;
                    this.grappling[0] = -1;
                    this.grapCount = 0;
                    for (int index = 0; index < 1000; ++index)
                    {
                        if (Main.projectile[index].active && Main.projectile[index].owner == i && Main.projectile[index].aiStyle == 7)
                            Main.projectile[index].Kill();
                    }
                    bool flag2 = this.immune;
                    int num4 = this.immuneTime;
                    this.Spawn();
                    this.immune = flag2;
                    this.immuneTime = num4;
                    for (int index = 0; index < 70; ++index)
                        Main.dust[Dust.NewDust(this.position, this.width, this.height, 15, 0.0f, 0.0f, 150, Color.Cyan, 1.2f)].velocity *= 0.5f;
                    if (sItem.stack > 0)
                        --sItem.stack;
                }
            }
            if (sItem.itemId == 2351 && this.itemAnimation > 0)
            {
                if (this.itemTime == 0)
                    this.itemTime = sItem.useTime;
                else if (this.itemTime == 2)
                {
                    if (Main.netMode == 0)
                        this.TeleportationPotion();
                    else if (Main.netMode == 1 && this.whoAmI == Main.myPlayer)
                        NetMessage.SendData(73, -1, -1, "", 0, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                    if (sItem.stack > 0)
                        --sItem.stack;
                }
            }
            if (sItem.itemId == 2756 && this.itemAnimation > 0)
            {
                if (this.itemTime == 0)
                    this.itemTime = sItem.useTime;
                else if (this.itemTime == 2)
                {
                    if (this.whoAmI == Main.myPlayer)
                    {
                        this.Male = !this.Male;
                        if (Main.netMode == 1)
                            NetMessage.SendData(4, -1, -1, this.name, this.whoAmI, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                    }
                    if (sItem.stack > 0)
                        --sItem.stack;
                }
                else
                {
                    float num4 = (float)sItem.useTime;
                    float num5 = (num4 - (float)this.itemTime) / num4;
                    float x = 15f;
                    float num6 = 44f;
                    float num7 = 9.424778f;
                    Vector2 vector2 = Utils.RotatedBy(new Vector2(x, 0.0f), (double)num7 * (double)num5, new Vector2());
                    vector2.X *= (float)this.direction;
                    for (int index1 = 0; index1 < 2; ++index1)
                    {
                        int Type = 221;
                        if (index1 == 1)
                        {
                            vector2.X *= -1f;
                            Type = 219;
                        }
                        Vector2 Position = new Vector2(vector2.X, num6 * (1f - num5) - num6 + (float)(this.height / 2));
                        Position += this.Center;
                        int index2 = Dust.NewDust(Position, 0, 0, Type, 0.0f, 0.0f, 100, new Color(), 1f);
                        Main.dust[index2].position = Position;
                        Main.dust[index2].noGravity = true;
                        Main.dust[index2].velocity = Vector2.Zero;
                        Main.dust[index2].scale = 1.3f;
                        Main.dust[index2].customData = (object)this;
                    }
                }
            }
            if (i != Main.myPlayer)
                return;
            if (this.itemTime == (int)((double)sItem.useTime * (double)this.tileSpeed) && sItem.tileWand > 0)
            {
                int num4 = sItem.tileWand;
                for (int index = 0; index < 58; ++index)
                {
                    if (num4 == this.inventory[index].itemId && this.inventory[index].stack > 0)
                    {
                        --this.inventory[index].stack;
                        if (this.inventory[index].stack <= 0)
                        {
                            this.inventory[index] = new Item();
                            break;
                        }
                        break;
                    }
                }
            }
            if (this.itemTime == (sItem.createTile < 0 ? (sItem.createWall <= 0 ? sItem.useTime : (int)((double)sItem.useTime * (double)this.wallSpeed)) : (int)((double)sItem.useTime * (double)this.tileSpeed)) && sItem.consumable)
            {
                bool flag2 = true;
                if (sItem.itemId == 2350 || sItem.itemId == 2351)
                    flag2 = false;
                if (sItem.itemId == 2756)
                    flag2 = false;
                if (sItem.ranged)
                {
                    if (this.ammoCost80 && Main.rand.Next(5) == 0)
                        flag2 = false;
                    if (this.ammoCost75 && Main.rand.Next(4) == 0)
                        flag2 = false;
                }
                if (sItem.thrown)
                {
                    if (this.thrownCost50 && Main.rand.Next(100) < 50)
                        flag2 = false;
                    if (this.thrownCost33 && Main.rand.Next(100) < 33)
                        flag2 = false;
                }
                if (sItem.itemId >= 71 && sItem.itemId <= 74)
                    flag2 = true;
                if (flag2)
                {
                    if (sItem.stack > 0)
                        --sItem.stack;
                    if (sItem.stack <= 0)
                    {
                        this.itemTime = this.itemAnimation;
                        Main.blockMouse = true;
                    }
                }
            }
            if (sItem.stack <= 0 && this.itemAnimation == 0)
                this.inventory[this.selectedItem] = new Item();
            if (this.selectedItem != 58 || this.itemAnimation == 0)
                return;
            Main.mouseItem = sItem.Clone();
        }
Player