Standalone [1.3] tModLoader - A Modding API

just joined the discord, got it answered there. Didn't know i needed to get rid of the enabled.json to clear that list. apparently Itemlist mod was crashing it.
Do you know any other mods that would cause that problem? I'm getting the same issue and I don't have Itemlist.
"CalamityMod",
"imkSushisMod",
"Fargowiltas",
"MagicStorage",
"FlyingMinionsIgnoreTerrain",
"YoyoAttackSpeedWorkaround",
"Infinity",
"WhatAmmoDoesItShoot",
"ReducedGrinding",
"BouncyCoins",
"dropyourweapon",
"ItemChecklist",
"VariablePotionSickness",
"PillarItemsPlus",
"ExpeditionsContent",
"Expeditions",
"BossChecklist",
"RecipeBrowser",
"ShorterRespawn",
"ShinyRedBalloonToPufferfish",
"CompactUI",
"QLS_Updated",
"MoreAccessories",
"WheresMyItems",
"WorldGenPreviewer",
"HelpfulHotkeys",
"AutoTrash",
"AllTheWalls",
"TapeMeasure",
"SatisfyingCoins",
"BossLootPlus",
"VanillaTweaks",
"imkSushisNaturallyOccuringMoonsMod",
"LootBags",
"AlchemistNPC",
"MaxStackPlus",
"WMITF",
"VisualRadar",
"AdditionalUtilities",
"PlayerHealthManaBar",
"DualWielding",
"Luiafk",
"tgwaifus",
"WingSlotUp",
"CraftableTryHardItems",
"SimpleAutoChests",
"ReforgeArmor",
"FKBossHealthBar",
"TheDeconstructor",
"RainbowRain",
"BetterYoyos"
All mods are on the latest version as of today.

EDIT: I fixed my problem; Even though it wasn't enabled, Itemlist was in the Enabled file. Deleting it fixed the problem.
 
Last edited:
I'm trying to update to 10.2, which I managed successfully, but I seem to have put it in the wrong spot, because now my unmodded terraria link leads to it. Where exactly is it supposed to go?\

Nevermind, I fixed that, but now the modded terraria isn't working:

System.DIINotFoundException: Unable to load DLL 'CSteamworks': The specified
module could not be found. (Exception from HRESULT: 0x8007007E)
at Steamworks.NativeMethods.SteamAPI_RestartAppIfNecessary(Appld_t
unOwnAppID)
at Terraria.Social.Steam.CoreSocialModule.Initialize()
at Terraria.Social.SocialAPI.Initialize(Nullable'1 mode)
at Terraria.Program.LaunchGame(String[] args, Boolean monoArgs)
 
Last edited:
My mods used to work and I need help fixing them. At the moment I get this error.

Its says the mod has been automatically disabled as it was made for version v0.8.2.1

Mod Error

You tried to add 2 ModItems with the same name: RedDungeonChest. Maybe 2 classes share a classname but in different namespaces while autoloading or you manually called AddItem with 2 items of the same name.
at Terraria.ModLoader.Mod.AddItem(String name, ModItem item)
at Terraria.ModLoader.Mod.AutoloadItem(Type type)
at Terraria.ModLoader.Mod.Autoload()
at Terraria.ModLoader.ModLoader.do_Load(Object threadContext)

Next Mod

Field not found: 'Terraria.Entity.name'.
at GameofThrones.Items.Anvils.BrownValyrianSteelAnvil.SetDefaults()
at Terraria.ModLoader.ItemLoader.SetDefaults(Item item, Boolean createModItem)
at Terraria.ModLoader.Mod.SetupContent()
at Terraria.ModLoader.ModLoader.do_Load(Object threadContext)

Next build + reload errors

c:\Users\James Turlan\Documents\My Games\Terraria\ModLoader\Mod Sources\DarkArmorReforged\Items\Armor\AirArmor\AirCrystalHelmet.cs(10,26) : error CS0115: 'DarkArmorReforged.Items.Armor.AirArmor.AirCrystalHelmet.Autoload(ref string, ref string, System.Collections.Generic.IList<Terraria.ModLoader.EquipType>)': no suitable method found to override

c:\Users\James Turlan\Documents\My Games\Terraria\ModLoader\Mod Sources\DarkArmorReforged\Items\Armor\AirArmor\AirCrystalPlateBody.cs(10,26) : error CS0115: 'DarkArmorReforged.Items.Armor.AirArmor.AirCrystalPlateBody.Autoload(ref string, ref string, System.Collections.Generic.IList<Terraria.ModLoader.EquipType>)': no suitable method found to override

c:\Users\James Turlan\Documents\My Games\Terraria\ModLoader\Mod Sources\DarkArmorReforged\Items\Armor\AirArmor\AirCrystalPlateLegs.cs(10,26) : error CS0115: 'DarkArmorReforged.Items.Armor.AirArmor.AirCrystalPlateLegs.Autoload(ref string, ref string, System.Collections.Generic.IList<Terraria.ModLoader.EquipType>)': no suitable method found to override
 
I don't know if this is where I should bring this up for assistance but every time I try to install this on my mac it always downloads .exe files.
I've tried everything. If anybody could give some advice that would be great!
 
@Solo-Ion now it gives me this error:
Die beste Übereinstimmung für die überladene 'Terraria.NetMessage.SendData(int, int, int, Terraria.Localization.NetworkText, int, float, float, float, int, int, int)'-Methode hat einige ungültige Argumente.

and with google translator in english:
The best match for the overloaded 'Terraria.NetMessage.SendData (int, int, int, terraria.Localization.NetworkText, int, float, float, float, int, int, int)' method has some invalid arguments.


EDIT: It also tells me to replace the old lang array system: Lang arrays have been replaced with the new Language.GetText system. What should I put there instead
That's odd. If you have null after your third comma, you shouldn't have any problems with Language.GetText. You only need something there if you are sending text over the message. Can I see the code that's causing the error?
 
That's odd. If you have null after your third comma, you shouldn't have any problems with Language.GetText. You only need something there if you are sending text over the message. Can I see the code that's causing the error?
Like I said, this mod isn't actually from me but I'm triying to update it.
And I don't understand everythin in this code.
But here's the code for one file(the error happens in all tile files, because they are simmilar):
using System;
using Microsoft.Xna.Framework;
using Terraria;
using Terraria.DataStructures;
using Terraria.Enums;
using Terraria.ID;
using Terraria.ModLoader;
using Terraria.ObjectData;
using Itemtronics.Util;

namespace Itemtronics.Tiles
{
public class AutomaticChest : ModTile
{
public override void SetDefaults()
{
Main.tileSpelunker[Type] = true;
Main.tileContainer[Type] = true;
Main.tileShine2[Type] = true;
Main.tileShine[Type] = 1200;
Main.tileFrameImportant[Type] = true;
Main.tileNoAttach[Type] = true;
Main.tileValue[Type] = 5000;
Main.tileLavaDeath[Type] = false;
TileObjectData.newTile.CopyFrom(TileObjectData.Style2x2);
TileObjectData.newTile.Origin = new Point16(0, 1);
TileObjectData.newTile.CoordinateHeights = new int[] { 16, 18 };
TileObjectData.newTile.HookCheck = new PlacementHook(Chest.FindEmptyChest, -1, 0, true);
TileObjectData.newTile.HookPostPlaceMyPlayer = new PlacementHook(Chest.AfterPlacement_Hook, -1, 0, false);
TileObjectData.newTile.AnchorInvalidTiles = new int[] { 127 };
TileObjectData.newTile.StyleHorizontal = true;
TileObjectData.newTile.LavaDeath = false;
TileObjectData.newTile.AnchorBottom = new AnchorData(AnchorType.SolidTile | AnchorType.SolidWithTop | AnchorType.SolidSide, TileObjectData.newTile.Width, 0);
TileObjectData.addTile(Type);
//AddMapEntry(new Color(200, 200, 200), "Automatic Chest", MapChestName);
ModTranslation name = CreateMapEntryName();
name.SetDefault("Automatic Chest");
AddMapEntry(new Color(200, 200, 200),name);
dustType = mod.DustType("Sparkle");
disableSmartCursor = true;
adjTiles = new int[] { TileID.Containers };
chest = "Automatic Chest";
chestDrop = mod.ItemType("AutomaticChest");
}

public override void HitWire(int x, int y)
{
int chestID = ChestUtils.GetChestID(x, y);
int ownerID = Main.netMode == 2 ? Chest.UsingChest(chestID) : -1;
Chest chest = Main.chest[chestID];

Wiring.SkipWire(chest.x, chest.y);
Wiring.SkipWire(chest.x+1, chest.y);
Wiring.SkipWire(chest.x, chest.y+1);
Wiring.SkipWire(chest.x+1, chest.y+1);

for (int i = 0; i < 400; ++i)
{
if (Main.item.type != 0 && !ItemID.Sets.NebulaPickup[Main.item.type] && Main.item.type != 58 && Main.item.type != 184 && Main.item.type != 1867 && Main.item.type != 1868 && Main.item.type != 1734 && Main.item.type != 1735 && new Rectangle(chest.x * 16, chest.y * 16, 32, 32).Intersects(new Rectangle((int)Main.item.position.X, (int)Main.item.position.Y, Main.item.width, Main.item.height)))
{
ItemState state = ChestUtils.DepositItem(chestID, ownerID, chest.item, Main.item);

if (state != ItemState.SAME)
{
if (state == ItemState.EMPTY)
{
Main.item = new Item();
//Main.item.SetDefaults(0, false);
}
if (Main.netMode == 2)
{
NetMessage.SendData(21, -1, -1, null, i, 0f, 0f, 0f, 0, 0, 0);
}
}
}
}
}

public string MapChestName(string name, int i, int j)
{
string chestName = ChestUtils.GetChest(i, j).name;
if (chestName == "")
{
return name;
}
else
{
return name + ": " + chestName;
}
}

public override void NumDust(int i, int j, bool fail, ref int num)
{
num = 1;
}

public override void KillMultiTile(int i, int j, int frameX, int frameY)
{
Item.NewItem(i * 16, j * 16, 32, 32, chestDrop);
Chest.DestroyChest(i, j);
}

public override void RightClick(int i, int j)
{
Player player = Main.player[Main.myPlayer];
Tile tile = Main.tile[i, j];
Main.mouseRightRelease = false;
int left = i;
int top = j;
if (tile.frameX != 0)
{
left--;
}
if (tile.frameY != 0)
{
top--;
}

if (player.sign >= 0)
{
Main.PlaySound(11, -1, -1, 1);
player.sign = -1;
Main.editSign = false;
Main.npcChatText = "";
}
if (Main.editChest)
{
Main.PlaySound(12, -1, -1, 1);
Main.editChest = false;
Main.npcChatText = "";
}
if (player.editedChestName)
{
NetMessage.SendData(33, -1, -1, Main.chest[player.chest].name, player.chest, 1f, 0f, 0f, 0, 0, 0);
player.editedChestName = false;
}
if (Main.netMode == 1)
{
if (left == player.chestX && top == player.chestY && player.chest >= 0)
{
player.chest = -1;
Recipe.FindRecipes();
Main.PlaySound(11, -1, -1, 1);
}
else
{
NetMessage.SendData(31, -1, -1, "", left, (float)top, 0f, 0f, 0, 0, 0);
Main.stackSplit = 600;
}
}
else
{
int chest = Chest.FindChest(left, top);
if (chest >= 0)
{
Main.stackSplit = 600;
if (chest == player.chest)
{
player.chest = -1;
Main.PlaySound(11, -1, -1, 1);
}
else
{
player.chest = chest;
Main.playerInventory = true;
Main.recBigList = false;
player.chestX = left;
player.chestY = top;
Main.PlaySound(player.chest < 0 ? 10 : 12, -1, -1, 1);
}
Recipe.FindRecipes();
}
}
}

public override void MouseOver(int i, int j)
{
Player player = Main.player[Main.myPlayer];
Chest chest = ChestUtils.GetChestSafe(i, j);
player.showItemIcon2 = -1;
if (chest == null)
{
player.showItemIconText = Lang.chestType[0];
}
else
{
player.showItemIconText = chest.name.Length > 0 ? chest.name : "Automatic Chest";
if (player.showItemIconText == "Automatic Chest")
{
player.showItemIcon2 = mod.ItemType("AutomaticChest");
player.showItemIconText = "";
}
}
player.noThrow = 2;
player.showItemIcon = true;
}

public override void MouseOverFar(int i, int j)
{
MouseOver(i, j);
Player player = Main.player[Main.myPlayer];
if (player.showItemIconText == "")
{
player.showItemIcon = false;
player.showItemIcon2 = 0;
}
}
}
}
 
I said something about this a while ago and I was hoping that updating would fix it, but that was not the case. My mod browser is not working. Opening or reloading it gives this error:
Sequence contains more than one matching element
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at Terraria.ModLoader.UI.UIModBrowser.PopulateFromJSON(TmodFile[] installedMods, String json)

This means I have to manually download and update any mods I want to use, which tends to be annoying when a download is not given or updated.
 
I seem to have this problem when i try to load up the Mod Download Page in Terraria.---->

Sequence contains more than one matching element
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at Terraria.ModLoader.UI.UIModBrowser.PopulateFromJSON(TmodFile[] installedMods, String json)
 
hello I get an error when trying to install the new version when I try to run it this pops up Unable to find an entry point named "init" in DLL 'CSteamworks' plz help
 
did someone managed to run tModLoader server in a linux machine? tried to run the tModLoadServer.exe on mono and tried to run the tModLoaderServer.bin.x86_64, both returning errors.
 
A bit late maybe, but why doesn't tModLoader accept these lines:
Code:
item.name = "NameOfItem";
item.toolTip = "ItemDescription";
Here's the error I get:
c:\Users\Joshua\Documents\My Games\Terraria\ModLoader\Mod Sources\JoshuasMod\Items\Weapons\CosmicCataclysm\CosmicCataclysm.cs(14,9) : error CS1061: 'Terraria.Item' does not contain a definition for 'name' and no extension method 'name' accepting a first argument of type 'Terraria.Item' could be found (are you missing a using directive or an assembly reference?)

c:\Users\Joshua\Documents\My Games\Terraria\ModLoader\Mod Sources\JoshuasMod\Items\Weapons\CosmicCataclysm\CosmicCataclysm.cs(20,9) : error CS1061: 'Terraria.Item' does not contain a definition for 'toolTip' and no extension method 'toolTip' accepting a first argument of type 'Terraria.Item' could be found (are you missing a using directive or an assembly reference?)
They worked (For me at least) in the 0.9.2.3 version, but they don't in the 0.10.0.1 version, did the TML Team change it?
 
Like I said, this mod isn't actually from me but I'm triying to update it.
And I don't understand everythin in this code.
But here's the code for one file(the error happens in all tile files, because they are simmilar):
using System;
using Microsoft.Xna.Framework;
using Terraria;
using Terraria.DataStructures;
using Terraria.Enums;
using Terraria.ID;
using Terraria.ModLoader;
using Terraria.ObjectData;
using Itemtronics.Util;

namespace Itemtronics.Tiles
{
public class AutomaticChest : ModTile
{
public override void SetDefaults()
{
Main.tileSpelunker[Type] = true;
Main.tileContainer[Type] = true;
Main.tileShine2[Type] = true;
Main.tileShine[Type] = 1200;
Main.tileFrameImportant[Type] = true;
Main.tileNoAttach[Type] = true;
Main.tileValue[Type] = 5000;
Main.tileLavaDeath[Type] = false;
TileObjectData.newTile.CopyFrom(TileObjectData.Style2x2);
TileObjectData.newTile.Origin = new Point16(0, 1);
TileObjectData.newTile.CoordinateHeights = new int[] { 16, 18 };
TileObjectData.newTile.HookCheck = new PlacementHook(Chest.FindEmptyChest, -1, 0, true);
TileObjectData.newTile.HookPostPlaceMyPlayer = new PlacementHook(Chest.AfterPlacement_Hook, -1, 0, false);
TileObjectData.newTile.AnchorInvalidTiles = new int[] { 127 };
TileObjectData.newTile.StyleHorizontal = true;
TileObjectData.newTile.LavaDeath = false;
TileObjectData.newTile.AnchorBottom = new AnchorData(AnchorType.SolidTile | AnchorType.SolidWithTop | AnchorType.SolidSide, TileObjectData.newTile.Width, 0);
TileObjectData.addTile(Type);
//AddMapEntry(new Color(200, 200, 200), "Automatic Chest", MapChestName);
ModTranslation name = CreateMapEntryName();
name.SetDefault("Automatic Chest");
AddMapEntry(new Color(200, 200, 200),name);
dustType = mod.DustType("Sparkle");
disableSmartCursor = true;
adjTiles = new int[] { TileID.Containers };
chest = "Automatic Chest";
chestDrop = mod.ItemType("AutomaticChest");
}

public override void HitWire(int x, int y)
{
int chestID = ChestUtils.GetChestID(x, y);
int ownerID = Main.netMode == 2 ? Chest.UsingChest(chestID) : -1;
Chest chest = Main.chest[chestID];

Wiring.SkipWire(chest.x, chest.y);
Wiring.SkipWire(chest.x+1, chest.y);
Wiring.SkipWire(chest.x, chest.y+1);
Wiring.SkipWire(chest.x+1, chest.y+1);

for (int i = 0; i < 400; ++i)
{
if (Main.item.type != 0 && !ItemID.Sets.NebulaPickup[Main.item.type] && Main.item.type != 58 && Main.item.type != 184 && Main.item.type != 1867 && Main.item.type != 1868 && Main.item.type != 1734 && Main.item.type != 1735 && new Rectangle(chest.x * 16, chest.y * 16, 32, 32).Intersects(new Rectangle((int)Main.item.position.X, (int)Main.item.position.Y, Main.item.width, Main.item.height)))
{
ItemState state = ChestUtils.DepositItem(chestID, ownerID, chest.item, Main.item);

if (state != ItemState.SAME)
{
if (state == ItemState.EMPTY)
{
Main.item = new Item();
//Main.item.SetDefaults(0, false);
}
if (Main.netMode == 2)
{
NetMessage.SendData(21, -1, -1, null, i, 0f, 0f, 0f, 0, 0, 0);
}
}
}
}
}

public string MapChestName(string name, int i, int j)
{
string chestName = ChestUtils.GetChest(i, j).name;
if (chestName == "")
{
return name;
}
else
{
return name + ": " + chestName;
}
}

public override void NumDust(int i, int j, bool fail, ref int num)
{
num = 1;
}

public override void KillMultiTile(int i, int j, int frameX, int frameY)
{
Item.NewItem(i * 16, j * 16, 32, 32, chestDrop);
Chest.DestroyChest(i, j);
}

public override void RightClick(int i, int j)
{
Player player = Main.player[Main.myPlayer];
Tile tile = Main.tile[i, j];
Main.mouseRightRelease = false;
int left = i;
int top = j;
if (tile.frameX != 0)
{
left--;
}
if (tile.frameY != 0)
{
top--;
}

if (player.sign >= 0)
{
Main.PlaySound(11, -1, -1, 1);
player.sign = -1;
Main.editSign = false;
Main.npcChatText = "";
}
if (Main.editChest)
{
Main.PlaySound(12, -1, -1, 1);
Main.editChest = false;
Main.npcChatText = "";
}
if (player.editedChestName)
{
NetMessage.SendData(33, -1, -1, Main.chest[player.chest].name, player.chest, 1f, 0f, 0f, 0, 0, 0);
player.editedChestName = false;
}
if (Main.netMode == 1)
{
if (left == player.chestX && top == player.chestY && player.chest >= 0)
{
player.chest = -1;
Recipe.FindRecipes();
Main.PlaySound(11, -1, -1, 1);
}
else
{
NetMessage.SendData(31, -1, -1, "", left, (float)top, 0f, 0f, 0, 0, 0);
Main.stackSplit = 600;
}
}
else
{
int chest = Chest.FindChest(left, top);
if (chest >= 0)
{
Main.stackSplit = 600;
if (chest == player.chest)
{
player.chest = -1;
Main.PlaySound(11, -1, -1, 1);
}
else
{
player.chest = chest;
Main.playerInventory = true;
Main.recBigList = false;
player.chestX = left;
player.chestY = top;
Main.PlaySound(player.chest < 0 ? 10 : 12, -1, -1, 1);
}
Recipe.FindRecipes();
}
}
}

public override void MouseOver(int i, int j)
{
Player player = Main.player[Main.myPlayer];
Chest chest = ChestUtils.GetChestSafe(i, j);
player.showItemIcon2 = -1;
if (chest == null)
{
player.showItemIconText = Lang.chestType[0];
}
else
{
player.showItemIconText = chest.name.Length > 0 ? chest.name : "Automatic Chest";
if (player.showItemIconText == "Automatic Chest")
{
player.showItemIcon2 = mod.ItemType("AutomaticChest");
player.showItemIconText = "";
}
}
player.noThrow = 2;
player.showItemIcon = true;
}

public override void MouseOverFar(int i, int j)
{
MouseOver(i, j);
Player player = Main.player[Main.myPlayer];
if (player.showItemIconText == "")
{
player.showItemIcon = false;
player.showItemIcon2 = 0;
}
}
}
}
Looking through that code, I can see that you corrected this line,
Code:
NetMessage.SendData(21, -1, -1, null, i, 0f, 0f, 0f, 0, 0, 0);
but not this one,
Code:
NetMessage.SendData(31, -1, -1, "", left, (float)top, 0f, 0f, 0, 0, 0);
You need to replace "" with null in all NetMessages... unless you actually want to sent some text in the message. I don't know how this is done, but thankfully BlushieMagic has updated the Migration Guide with that info.

hello I get an error when trying to install the new version when I try to run it this pops up Unable to find an entry point named "init" in DLL 'CSteamworks' plz help
Sounds like you need to verify Terraria's game cache through Steam.

A bit late maybe, but why doesn't tModLoader accept these lines:
Code:
item.name = "NameOfItem";
item.toolTip = "ItemDescription";
Here's the error I get:
c:\Users\Joshua\Documents\My Games\Terraria\ModLoader\Mod Sources\JoshuasMod\Items\Weapons\CosmicCataclysm\CosmicCataclysm.cs(14,9) : error CS1061: 'Terraria.Item' does not contain a definition for 'name' and no extension method 'name' accepting a first argument of type 'Terraria.Item' could be found (are you missing a using directive or an assembly reference?)

c:\Users\Joshua\Documents\My Games\Terraria\ModLoader\Mod Sources\JoshuasMod\Items\Weapons\CosmicCataclysm\CosmicCataclysm.cs(20,9) : error CS1061: 'Terraria.Item' does not contain a definition for 'toolTip' and no extension method 'toolTip' accepting a first argument of type 'Terraria.Item' could be found (are you missing a using directive or an assembly reference?)
They worked (For me at least) in the 0.9.2.3 version, but they don't in the 0.10.0.1 version, did the TML Team change it?
Yes, check the Example Mod for the new way to do toolTips and other things. Also have a look at the Migration Guide for a complete list of things that changed.
 
Back
Top Bottom