using System.Collections.Generic; using System.IO; using Terraria; using Terraria.Audio; using Terraria.ID; using Terraria.ModLoader; using ForgottenWawiTech.Content.Items.Materials; using ForgottenWawiTech.Content.Rarities; using ForgottenWawiTech.Content.Tiles.CraftingStations; using Terraria.ModLoader.IO; using Terraria.Localization; namespace ForgottenWawiTech.Content.Items.Tools.Transcendent { public class TranscendentOmnitool : ModItem { private bool hammerMode; private const int PickaxePower = 420; private const int HammerPower = 350; private const int AxePower = 80; protected override bool CloneNewInstances => true; public override void SetDefaults() { Item.width = 42; Item.height = 42; Item.damage = 220; Item.DamageType = DamageClass.Melee; Item.knockBack = 6f; Item.useTime = 5; Item.useAnimation = 10; Item.pick = PickaxePower; Item.axe = AxePower; Item.hammer = 0; Item.tileBoost += 6; Item.useTurn = true; Item.autoReuse = true; Item.useStyle = ItemUseStyleID.Swing; Item.UseSound = SoundID.Item15; Item.value = Item.sellPrice(platinum: 260); Item.rare = ModContent.RarityType(); ApplyMode(); } public override bool AltFunctionUse(Player player) => true; public override bool CanUseItem(Player player) { if (player.altFunctionUse == 2) { ToggleMode(player); return false; } ApplyMode(); return base.CanUseItem(player); } public override void HoldItem(Player player) { ApplyMode(); player.blockRange += 3; player.pickSpeed -= 0.25f; if (player.pickSpeed < 0.35f) { player.pickSpeed = 0.35f; } player.AddBuff(BuffID.Dangersense, 2); player.AddBuff(BuffID.Shine, 2); } public override void ModifyHitNPC(Player player, NPC target, ref NPC.HitModifiers modifiers) { modifiers.SourceDamage *= 1.25f; } public override void ModifyTooltips(List tooltips) { string modeText = hammerMode ? "Hammer" : "Pickaxe"; tooltips.Add(new TooltipLine(Mod, "TranscendentOmnitoolMode", $"Current Mode: {modeText}")); } public override void SaveData(TagCompound tag) { tag["HammerMode"] = hammerMode; } public override void LoadData(TagCompound tag) { hammerMode = tag.GetBool("HammerMode"); ApplyMode(); } public override void NetSend(BinaryWriter writer) { writer.Write(hammerMode); } public override void NetReceive(BinaryReader reader) { hammerMode = reader.ReadBoolean(); ApplyMode(); } public override void AddRecipes() { CreateRecipe() .AddIngredient(ModContent.ItemType(), 6) .AddIngredient(ModContent.ItemType(), 10) .AddIngredient(ModContent.ItemType(), 14) .AddIngredient(ModContent.ItemType(), 18) .AddIngredient(ModContent.ItemType(), 6) .AddTile(ModContent.TileType()) .Register(); } private void ToggleMode(Player player) { hammerMode = !hammerMode; ApplyMode(); if (Main.myPlayer == player.whoAmI) { string itemName = Lang.GetItemNameValue(Item.type); string modeText = hammerMode ? "Hammer" : "Pickaxe"; Main.NewText($"{itemName} switched to {modeText} mode.", 120, 255, 225); } SoundEngine.PlaySound(SoundID.MenuTick, player.Center); } private void ApplyMode() { if (hammerMode) { Item.pick = 0; Item.hammer = HammerPower; } else { Item.pick = PickaxePower; Item.hammer = 0; } Item.axe = AxePower; } } }