Справочник API

Полный справочник C# API tModLoader с примерами и лучшими практиками

Справочник API Все уровни v2025.07.3.0

Основные классы

ModItem

Базовый класс для создания пользовательских предметов. Наследуйтесь от ModItem для создания оружия, инструментов, аксессуаров и расходных материалов.

Ключевые методы:

SetDefaults()

Настройка свойств предмета: урон, размер, редкость и стиль использования

AddRecipes()

Определение рецептов крафта для предмета

UseItem(Player player)

Пользовательское поведение при использовании предмета

Пример реализации:

public class MagicSword : ModItem
{
    public override void SetDefaults()
    {
        Item.damage = 80;
        Item.DamageType = DamageClass.Magic;
        Item.mana = 10;
        Item.width = 44;
        Item.height = 44;
        Item.useTime = 25;
        Item.useAnimation = 25;
        Item.useStyle = ItemUseStyleID.Shoot;
        Item.knockBack = 5;
        Item.value = Item.buyPrice(gold: 5);
        Item.rare = ItemRarityID.Pink;
        Item.UseSound = SoundID.Item20;
        Item.autoReuse = true;
        Item.shoot = ProjectileID.MagicMissile;
        Item.shootSpeed = 16f;
    }
}

ModNPC

Создание пользовательских NPC, включая врагов, городских NPC и боссов с пользовательским ИИ и поведением.

Основные методы:

SetDefaults()

Настройка характеристик и свойств NPC

AI()

Пользовательская логика поведения ИИ

ModifyNPCLoot()

Определение таблиц добычи и лута

OnKill()

Действия при убийстве NPC

public class ExampleEnemy : ModNPC
{
    public override void SetDefaults()
    {
        NPC.width = 40;
        NPC.height = 56;
        NPC.damage = 15;
        NPC.defense = 6;
        NPC.lifeMax = 100;
        NPC.HitSound = SoundID.NPCHit1;
        NPC.DeathSound = SoundID.NPCDeath2;
        NPC.value = 60f;
        NPC.knockBackResist = 0.5f;
        NPC.aiStyle = NPCAIStyleID.Fighter;
        AIType = NPCID.Zombie;
    }
}

Распространённые паттерны разработки

Создание рецептов

public override void AddRecipes()
{
    Recipe recipe = CreateRecipe();
    recipe.AddIngredient(ItemID.IronBar, 5);
    recipe.AddIngredient(ItemID.Wood, 10);
    recipe.AddIngredient(ModContent.ItemType<CustomItem>(), 1);
    recipe.AddTile(TileID.WorkBenches);
    recipe.AddCondition(Recipe.Condition.InGraveyard);
    recipe.Register();
}

Рецепты автоматически синхронизируются в мультиплеере и отображаются в браузерах рецептов.

Пользовательские снаряды

public class MagicBolt : ModProjectile
{
    public override void SetDefaults()
    {
        Projectile.width = 16;
        Projectile.height = 16;
        Projectile.friendly = true;
        Projectile.penetrate = 3;
        Projectile.timeLeft = 600;
        Projectile.light = 0.5f;
        Projectile.DamageType = DamageClass.Magic;
    }

    public override void AI()
    {
        // Custom movement and visual effects
        Projectile.rotation += 0.4f;

        if (Main.rand.NextBool(3))
        {
            Dust.NewDust(Projectile.position, Projectile.width,
                        Projectile.height, DustID.Electric);
        }
    }
}

Глобальные модификации

Модификация существующего игрового контента с помощью Global-классов:

public class GlobalItemChanges : GlobalItem
{
    public override void SetStaticDefaults()
    {
        // Modify all items of a specific type
    }

    public override void ModifyTooltips(Item item, List<TooltipLine> tooltips)
    {
        if (item.type == ItemID.TerraBlade)
        {
            tooltips.Add(new TooltipLine(Mod, "CustomTooltip",
                        "Enhanced by YourMod!"));
        }
    }
}

Лучшие практики

Рекомендуется

  • Use ModContent.ItemType<T>() for referencing custom items
  • Реализуйте правильную проверку на null
  • Используйте осмысленные имена переменных и классов
  • Тестируйте в мультиплеерной среде
  • Следуйте соглашениям об именовании C#
  • Документируйте код комментариями

Не рекомендуется

  • Не хардкодьте ID предметов — используйте константы
  • Не обращайтесь к Main.player напрямую в мультиплеере
  • Не забывайте обрабатывать граничные случаи
  • Не используйте тяжёлые операции в методах AI()
  • Не модифицируйте ванильный контент без необходимости
  • Не игнорируйте предупреждения компилятора

Полезные утилиты и помощники

Общие вспомогательные методы

// Get item type from mod item class
int itemType = ModContent.ItemType<MyCustomItem>();

// Check if mod is loaded
bool calamityLoaded = ModLoader.HasMod("CalamityMod");

// Create dust effects
Dust.NewDust(position, width, height, DustID.Electric);

// Spawn projectiles
Projectile.NewProjectile(source, position, velocity, type, damage, knockback);

// Play sounds
SoundEngine.PlaySound(SoundID.Item1, position);

Сетевые помощники

// Send data to server
ModPacket packet = Mod.GetPacket();
packet.Write((byte)MessageType.ExampleMessage);
packet.Write(someData);
packet.Send();

// Handle received packets
public override void HandlePacket(BinaryReader reader, int whoAmI)
{
    MessageType msgType = (MessageType)reader.ReadByte();
    switch (msgType)
    {
        case MessageType.ExampleMessage:
            // Handle message
            break;
    }
}

Внешние ресурсы