API-Referenz
Vollständige Referenz für die C# API von tModLoader mit Beispielen und bewährten Praktiken
Schnellzugriff
Kernklassen
ModItem
Die Basisklasse zum Erstellen benutzerdefinierter Items. Erben Sie von ModItem, um Waffen, Werkzeuge, Accessoires und Verbrauchsgegenstände zu erstellen.
Wichtige Methoden:
SetDefaults()
Item-Eigenschaften wie Schaden, Größe, Seltenheit und Verwendungsstil festlegen
AddRecipes()
Handwerksrezepte für Ihr Item definieren
UseItem(Player player)
Benutzerdefiniertes Verhalten bei Verwendung des Items
Beispielimplementierung:
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
Erstellen Sie benutzerdefinierte NPCs, einschließlich Gegner, Stadt-NPCs und Bosse mit benutzerdefinierter KI und Verhalten.
Essentielle Methoden:
SetDefaults()
NPC-Werte und Eigenschaften festlegen
AI()
Benutzerdefinierte KI-Verhaltenslogik
ModifyNPCLoot()
Drop-Tabellen und Beute definieren
OnKill()
Aktionen beim Tod des NPCs
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;
}
}
Gängige Entwicklungsmuster
Rezepte erstellen
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();
}
Rezepte werden automatisch im Mehrspieler synchronisiert und erscheinen in Rezept-Browsern.
Benutzerdefinierte Projektile
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);
}
}
}
Globale Modifikationen
Bestehende Spielinhalte mit Global-Klassen modifizieren:
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!"));
}
}
}
Bewährte Praktiken
Empfohlen
- ModContent.ItemType<T>() zum Referenzieren benutzerdefinierter Items verwenden
- Korrekte Null-Prüfungen implementieren
- Aussagekräftige Variablen- und Klassennamen verwenden
- In Mehrspieler-Umgebung testen
- C#-Namenskonventionen befolgen
- Code mit Kommentaren dokumentieren
Vermeiden
- Keine hartcodierten Item-IDs – Konstanten verwenden
- Nicht direkt auf Main.player im Mehrspieler zugreifen
- Randfälle nicht vergessen zu behandeln
- Keine aufwendigen Operationen in AI()-Methoden
- Vanilla-Inhalte nicht unnötig modifizieren
- Compiler-Warnungen nicht ignorieren
Nützliche Werkzeuge & Hilfsfunktionen
Gängige Hilfsmethoden
// 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);
Netzwerk-Hilfsfunktionen
// 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;
}
}