Référence API
Référence complète de l'API C# de tModLoader avec exemples et bonnes pratiques
Accès rapide
Classes principales
ModItem
La classe de base pour créer des objets personnalisés. Héritez de ModItem pour créer des armes, outils, accessoires et consommables.
Méthodes clés :
SetDefaults()
Définir les propriétés de l'objet comme les dégâts, la taille, la rareté et le style d'utilisation
AddRecipes()
Définir les recettes d'artisanat pour votre objet
UseItem(Player player)
Comportement personnalisé lorsque l'objet est utilisé
Exemple d'implémentation :
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
Créez des PNJ personnalisés incluant des ennemis, des PNJ de ville et des boss avec une IA et un comportement personnalisés.
Méthodes essentielles :
SetDefaults()
Définir les statistiques et propriétés du PNJ
AI()
Logique de comportement IA personnalisée
ModifyNPCLoot()
Définir les tables de butin et le loot
OnKill()
Actions quand le PNJ est tué
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;
}
}
Modèles de développement courants
Créer des recettes
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();
}
Les recettes sont automatiquement synchronisées en multijoueur et apparaissent dans les navigateurs de recettes.
Projectiles personnalisés
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);
}
}
}
Modifications globales
Modifiez le contenu existant du jeu en utilisant les classes 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!"));
}
}
}
Bonnes pratiques
À faire
- Utilisez ModContent.ItemType<T>() pour référencer les objets personnalisés
- Implémentez une vérification correcte des null
- Utilisez des noms de variables et de classes significatifs
- Testez en environnement multijoueur
- Suivez les conventions de nommage C#
- Documentez votre code avec des commentaires
À ne pas faire
- Ne codez pas en dur les IDs d'objets - utilisez des constantes
- N'accédez pas directement à Main.player en multijoueur
- N'oubliez pas de gérer les cas limites
- N'utilisez pas d'opérations lourdes dans les méthodes AI()
- Ne modifiez pas le contenu vanilla inutilement
- N'ignorez pas les avertissements du compilateur
Utilitaires et helpers utiles
Méthodes d'aide courantes
// 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);
Helpers réseau
// 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;
}
}