using System.Collections.Generic; using Microsoft.Xna.Framework; using Terraria; using Terraria.ID; using Terraria.ModLoader; namespace YHTMod.Items; public class KatanaRedo : GlobalItem { public override void ModifyTooltips(Item item, List tooltips) { if (item.type != ItemID.Katana) return; tooltips.Insert(5, new TooltipLine(YHTMod.GetInstance(), "flavor", "Nothing personel kid.")); tooltips.Insert(6, new TooltipLine(YHTMod.GetInstance(), "usage", "Right click to teleport behind them.")); } public override bool AltFunctionUse(Item item, Player player) { return item.type == ItemID.Katana || base.AltFunctionUse(item, player); } public override bool? UseItem(Item item, Player player) { if (item.type != ItemID.Katana || player.altFunctionUse != 2) return null; var yhtPlayer = player.GetModPlayer(); if (yhtPlayer.katanaTeleportCooldown > 0) return null; yhtPlayer.katanaTeleportCooldown = 300; for (var i = 0; i < Main.maxNPCs; i++) { var npc = Main.npc[i]; if (!npc.CanBeChasedBy()) continue; var between = Vector2.Distance(npc.Center, player.Center); var inRange = between < 650; var lineOfSight = Collision.CanHitLine(player.position, player.width, player.height, npc.position, npc.width, npc.height); if (!inRange || !lineOfSight) continue; var tpPos = npc.position; tpPos.X += -(npc.direction * npc.width + (player.width * 2)); if (Collision.TileCollision(tpPos, Vector2.Zero, player.width, player.height) != Vector2.Zero) return true; player.Teleport(tpPos, TeleportationStyleID.RodOfDiscord); player.velocity = Vector2.Zero; player.NinjaDodge(); return true; } return null; } }