Files

151 lines
4.5 KiB
C#

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<TranscendentItem>();
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<TooltipLine> 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<ControlledSingularity>(), 6)
.AddIngredient(ModContent.ItemType<SingularityAlloy>(), 10)
.AddIngredient(ModContent.ItemType<EnergyCore>(), 14)
.AddIngredient(ModContent.ItemType<MalfunctioningNanites>(), 18)
.AddIngredient(ModContent.ItemType<UnstableMatter>(), 6)
.AddTile(ModContent.TileType<SingularitySealingUnit>())
.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;
}
}
}