TModLoader编译Mod报错CS1061:LocalizedText无SetDefault方法
问题原因与解决方案
核心原因
你的代码基于TModLoader旧版API编写,但你使用的**TModLoader 2023.9.3.3(适配Terraria 1.4.4.9)**已对API做了多处破坏性更新,导致旧代码无法兼容:
LocalizedText类型(对应DisplayName、Tooltip成员)移除了SetDefault方法,改用新的文本设置逻辑- 原实例字段
item被替换为属性Item(首字母大写) ModRecipe的构造参数规范变更,不再直接接受旧的mod字段
修复步骤
针对代码中的问题,逐一修改如下:
- 替换文本设置方式:将
DisplayName.SetDefault(...)和Tooltip.SetDefault(...)改为DisplayName.Set(...)和Tooltip.Set(...) - 替换实例访问成员:所有
item.xxx调用替换为Item.xxx - 修正ModRecipe构造:将
new ModRecipe(mod)改为new ModRecipe(Mod)(利用ModItem内置的Mod属性)
完整修复代码
using Terraria; using Terraria.ID; using Terraria.ModLoader; namespace FastPickaxe.Items { public class FastPickaxe : ModItem { public override void SetStaticDefaults() { DisplayName.Set("Sixty-Nine Thousand Four Hundred Twenty times 2 Pickaxe"); Tooltip.Set("Even the Damage is worth it! Hopefully your PC won't crash..."); } public override void SetDefaults() { Item.damage = 69420; Item.melee = true; Item.width = 64; Item.height = 64; Item.useTime = 2; Item.useAnimation = 10; Item.pick = 69420; Item.useStyle = ItemUseStyleID.Swing; Item.knockBack = 2; Item.value = Item.buyPrice(0, 10, 0, 0); Item.rare = ItemRarityID.Purple; Item.UseSound = SoundID.Item1; Item.autoReuse = true; } public override void AddRecipes() { ModRecipe recipe = new ModRecipe(Mod); recipe.AddIngredient(ItemID.LifeCrystal, 99); recipe.AddIngredient(ItemID.LifeFruit, 99); recipe.AddTile(TileID.LunarCraftingStation); recipe.SetResult(this); recipe.AddRecipe(); } } }
额外优化:将硬编码数字替换为官方枚举常量,提升代码可读性与版本兼容性。
内容的提问来源于stack exchange,提问作者epicness tv
相关产品推荐
相关产品推荐

