Skip to content

Chests/TEs with items unconditionally fail (in subworlds) #28

@GabeHasWon

Description

@GabeHasWon

We're adding structures into Path of Terraria, many of which formerly included chests, dressers or item frames. None of these are usable, as placing any of them down results in a guaranteed crash. The contents of the chest/slot are irrelevant.

For now, we've had to replace every chest/dresser/item frame with either nothing or an equivalent looking tile, but this sucks and means we cannot add anything to chests dynamically or display items.

Worth noting this only happens on subworlds.

Massive error:

[15:13:44.670] [Main Thread/WARN] [tML]: Silently Caught Exception: 
System.InvalidCastException: Unable to cast object of type 'StructureHelper.Models.NbtEntries.StaticChestNBTEntry' to type 'StructureHelper.Models.StructureNBTEntry'.
   at StructureHelper.Models.StructureNBTEntry.<>c.<.cctor>b__7_0(TagCompound tag)
   at Terraria.ModLoader.IO.TagSerializableSerializer`1.Deserialize(TagCompound tag) in tModLoader\Terraria\ModLoader\IO\TagSerializable.cs:line 53
   at System.Linq.Enumerable.SelectListIterator`2.Fill(ReadOnlySpan`1 source, Span`1 destination, Func`2 func)
   at System.Linq.Enumerable.SelectListIterator`2.ToList()
   at Terraria.ModLoader.IO.TagSerializer`2.DeserializeList(IList value) in tModLoader\Terraria\ModLoader\IO\TagSerializer.cs:line 115
   at Terraria.ModLoader.IO.TagIO.Deserialize(Type type, Object tag) in tModLoader\Terraria\ModLoader\IO\TagIO.cs:line 304
   at Terraria.ModLoader.IO.TagIO.Deserialize[T](Object tag) in tModLoader\Terraria\ModLoader\IO\TagIO.cs:line 243
   at Terraria.ModLoader.IO.TagCompound.TryGet[T](String key, T& value) in tModLoader\Terraria\ModLoader\IO\TagCompound.cs:line 57
   at Terraria.ModLoader.IO.TagCompound.Get[T](String key) in tModLoader\Terraria\ModLoader\IO\TagCompound.cs:line 32
   at StructureHelper.Models.StructureData.FromStream(BinaryReader reader)
   at StructureHelper.API.Generator.GetStructureData(String path, Mod mod, Boolean fullPath)
   at StructureHelper.API.Generator.GetStructureDimensions(String path, Mod mod, Boolean fullPath)
   at PathOfTerraria.Common.World.Generation.StructureTools.GetSize(String structure, Mod mod) in PathOfTerraria\Common\World\Generation\StructureTools.cs:line 18
   at PathOfTerraria.Common.World.Generation.StructureTools.PlaceByOrigin(String structure, Point16 position, Vector2 origin, Mod mod, Boolean cullAbove, Boolean noSync, GenFlags flags) in PathOfTerraria\Common\World\Generation\StructureTools.cs:line 36
   at PathOfTerraria.Common.Systems.StructureImprovementSystem.ImprovableStructure.Place() in PathOfTerraria\Common\Systems\StructureImprovementSystem\ImprovableStructure.cs:line 35
   at PathOfTerraria.Common.Subworlds.RavencrestContent.RavencrestSystem.RavencrestOneTimeChecks() in PathOfTerraria\Common\Subworlds\RavencrestContent\RavencrestSystem.cs:line 222
   at PathOfTerraria.Common.Subworlds.RavencrestContent.RavencrestSystem.PreUpdateTime() in PathOfTerraria\Common\Subworlds\RavencrestContent\RavencrestSystem.cs:line 120
   at Terraria.ModLoader.SystemLoader.PreUpdateTime() in tModLoader\Terraria\ModLoader\SystemLoader.cs:line 379
   at DMD<DMD<>?37598327::Terraria.Main::DoUpdateInWorld>(Main this, Stopwatch sw)
   at SyncProxy<System.Void Terraria.Main:DoUpdateInWorld(System.Diagnostics.Stopwatch)>(Main , Stopwatch )
   at DMD<DMD<>?23826719::Terraria.Main::DoUpdate>(Main this, GameTime& gameTime)
   at DragonLens.Content.Tools.Gameplay.FastForwardSystem.UpdateExtraTimes(orig_DoUpdate orig, Main self, GameTime& gameTime) in DragonLens\Content\Tools\Gameplay\FastForward.cs:line 93
   at Hook<System.Void DragonLens.Content.Tools.Gameplay.FastForwardSystem::UpdateExtraTimes(Terraria.On_Main+orig_DoUpdate,Terraria.Main,Microsoft.Xna.Framework.GameTime&)>(Main , GameTime& )
   at PathOfTerraria.Core.Time.TimeSystem.OnDoUpdate(orig_DoUpdate orig, Main main, GameTime& gameTime) in PathOfTerraria\Core\Time\TimeSystem.cs:line 44
   at Hook<System.Void PathOfTerraria.Core.Time.TimeSystem::OnDoUpdate(Terraria.On_Main+orig_DoUpdate,Terraria.Main,Microsoft.Xna.Framework.GameTime&)>(Main , GameTime& )
   at SyncProxy<System.Void Terraria.Main:DoUpdate(Microsoft.Xna.Framework.GameTime&)>(Main , GameTime& )
   at DMD<System.Void Terraria.Main:Update(Microsoft.Xna.Framework.GameTime)>(Main this, GameTime gameTime)
   at Hook<System.Void DragonLens.Content.GUI.Tooltip::Reset(Terraria.On_Main+orig_Update,Terraria.Main,Microsoft.Xna.Framework.GameTime)>(Main , GameTime )
   at PathOfTerraria.Common.Subworlds.BossDomains.Prehardmode.DeerDomain.DeerclopsDomainLightEdits.ResetLightMul(orig_Update orig, Main self, GameTime gameTime)
   at Hook<System.Void PathOfTerraria.Common.Subworlds.BossDomains.Prehardmode.DeerDomain.DeerclopsDomainLightEdits::ResetLightMul(Terraria.On_Main+orig_Update,Terraria.Main,Microsoft.Xna.Framework.GameTime)>(Main , GameTime )
   at PathOfTerraria.Common.Systems.VanillaModifications.AntiDespawnSystem.ForceNoDespawning.EarlyUnsetPlayerFlag(orig_Update orig, Main self, GameTime gameTime)
   at Hook<System.Void PathOfTerraria.Common.Systems.VanillaModifications.AntiDespawnSystem.ForceNoDespawning::EarlyUnsetPlayerFlag(Terraria.On_Main+orig_Update,Terraria.Main,Microsoft.Xna.Framework.GameTime)>(Main , GameTime )
   at SyncProxy<System.Void Terraria.Main:Update(Microsoft.Xna.Framework.GameTime)>(Main , GameTime )
   at Microsoft.Xna.Framework.Game.Tick()
   at Microsoft.Xna.Framework.Game.RunLoop()
   at Microsoft.Xna.Framework.Game.Run()
   at Terraria.Program.RunGame()
   at Terraria.Program.LaunchGame_(Boolean isServer)
   at Terraria.Program.LaunchGame(String[] args, Boolean monoArgs)
   at Terraria.MonoLaunch.Main_End(String[] args)
   at Terraria.MonoLaunch.<>c__DisplayClass1_0.<Main>b__1()

[15:13:44.849] [Main Thread/WARN] [tML]: Silently Caught Exception: 
System.IO.IOException: NBT Deserialization (type=System.Collections.Generic.List`1[StructureHelper.Models.StructureNBTEntry],entry=object "nbtEntries" [
  {
    int "x" = 12,
    int "y" = 40,
    object "contents" [
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      }
    ],
    string "<type>" = "StructureHelper.Models.NbtEntries.StaticChestNBTEntry"
  },
  {
    int "x" = 16,
    int "y" = 56,
    object "contents" [
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      },
      {
        string "<type>" = "Terraria.Item"
      }
    ],
    string "<type>" = "StructureHelper.Models.NbtEntries.StaticChestNBTEntry"
  },
  {
    int "x" = 17,
    int "y" = 55,
    string "tileEntityType" = "6",
    object "tileEntityData" {
      object "item" {
        string "mod" = "Terraria",
        int "id" = 4283
      }
    },
    string "<type>" = "StructureHelper.Models.NbtEntries.TileEntityNBTEntry"
  },
  {
    int "x" = 28,
    int "y" = 49,
    string "tileEntityType" = "1",
    object "tileEntityData" {
      object "item" {
        string "mod" = "Terraria",
        int "id" = 3517,
        object "globalData" [
          {
            string "mod" = "PathOfTerraria",
            string "name" = "GearGlobalItem",
            object "data" {
              int "socketCount" = 0
            }
          },
          {
            string "mod" = "PathOfTerraria",
            string "name" = "PoTGlobalItem",
            object "data" {
              int "type" = 1,
              int "rarity" = 0,
              int "influence" = 0,
              int "implicits" = 0,
              string "name" = "Gold Hammer",
              int "ItemLevel" = 5,
              byte "corrupt" = 0,
              byte "cloned" = 0,
              object "affixes" []
            }
          }
        ]
      }
    },
    string "<type>" = "StructureHelper.Models.NbtEntries.TileEntityNBTEntry"
  },
  {
    int "x" = 38,
    int "y" = 39,
    string "tileEntityType" = "3",
    object "tileEntityData" {},
    string "<type>" = "StructureHelper.Models.NbtEntries.TileEntityNBTEntry"
  },
  {
    int "x" = 41,
    int "y" = 49,
    string "tileEntityType" = "1",
    object "tileEntityData" {
      object "item" {}
    },
    string "<type>" = "StructureHelper.Models.NbtEntries.TileEntityNBTEntry"
  },
  {
    int "x" = 50,
    int "y" = 54,
    string "tileEntityType" = "1",
    object "tileEntityData" {
      object "item" {}
    },
    string "<type>" = "StructureHelper.Models.NbtEntries.TileEntityNBTEntry"
  }
])
   at Terraria.ModLoader.IO.TagCompound.TryGet[T](String key, T& value) in tModLoader\Terraria\ModLoader\IO\TagCompound.cs:line 57
   at Terraria.ModLoader.IO.TagCompound.Get[T](String key) in tModLoader\Terraria\ModLoader\IO\TagCompound.cs:line 32
   at StructureHelper.Models.StructureData.FromStream(BinaryReader reader)
   at StructureHelper.API.Generator.GetStructureData(String path, Mod mod, Boolean fullPath)
   at StructureHelper.API.Generator.GetStructureDimensions(String path, Mod mod, Boolean fullPath)
   at PathOfTerraria.Common.World.Generation.StructureTools.GetSize(String structure, Mod mod) in PathOfTerraria\Common\World\Generation\StructureTools.cs:line 18
   at PathOfTerraria.Common.World.Generation.StructureTools.PlaceByOrigin(String structure, Point16 position, Vector2 origin, Mod mod, Boolean cullAbove, Boolean noSync, GenFlags flags) in PathOfTerraria\Common\World\Generation\StructureTools.cs:line 36
   at PathOfTerraria.Common.Systems.StructureImprovementSystem.ImprovableStructure.Place() in PathOfTerraria\Common\Systems\StructureImprovementSystem\ImprovableStructure.cs:line 35
   at PathOfTerraria.Common.Subworlds.RavencrestContent.RavencrestSystem.RavencrestOneTimeChecks() in PathOfTerraria\Common\Subworlds\RavencrestContent\RavencrestSystem.cs:line 222
   at PathOfTerraria.Common.Subworlds.RavencrestContent.RavencrestSystem.PreUpdateTime() in PathOfTerraria\Common\Subworlds\RavencrestContent\RavencrestSystem.cs:line 120
   at Terraria.ModLoader.SystemLoader.PreUpdateTime() in tModLoader\Terraria\ModLoader\SystemLoader.cs:line 379
   at DMD<DMD<>?37598327::Terraria.Main::DoUpdateInWorld>(Main this, Stopwatch sw)
   at SyncProxy<System.Void Terraria.Main:DoUpdateInWorld(System.Diagnostics.Stopwatch)>(Main , Stopwatch )
   at DMD<DMD<>?23826719::Terraria.Main::DoUpdate>(Main this, GameTime& gameTime)
   at DragonLens.Content.Tools.Gameplay.FastForwardSystem.UpdateExtraTimes(orig_DoUpdate orig, Main self, GameTime& gameTime) in DragonLens\Content\Tools\Gameplay\FastForward.cs:line 93
   at Hook<System.Void DragonLens.Content.Tools.Gameplay.FastForwardSystem::UpdateExtraTimes(Terraria.On_Main+orig_DoUpdate,Terraria.Main,Microsoft.Xna.Framework.GameTime&)>(Main , GameTime& )
   at PathOfTerraria.Core.Time.TimeSystem.OnDoUpdate(orig_DoUpdate orig, Main main, GameTime& gameTime) in PathOfTerraria\Core\Time\TimeSystem.cs:line 44
   at Hook<System.Void PathOfTerraria.Core.Time.TimeSystem::OnDoUpdate(Terraria.On_Main+orig_DoUpdate,Terraria.Main,Microsoft.Xna.Framework.GameTime&)>(Main , GameTime& )
   at SyncProxy<System.Void Terraria.Main:DoUpdate(Microsoft.Xna.Framework.GameTime&)>(Main , GameTime& )
   at DMD<System.Void Terraria.Main:Update(Microsoft.Xna.Framework.GameTime)>(Main this, GameTime gameTime)
   at Hook<System.Void DragonLens.Content.GUI.Tooltip::Reset(Terraria.On_Main+orig_Update,Terraria.Main,Microsoft.Xna.Framework.GameTime)>(Main , GameTime )
   at PathOfTerraria.Common.Subworlds.BossDomains.Prehardmode.DeerDomain.DeerclopsDomainLightEdits.ResetLightMul(orig_Update orig, Main self, GameTime gameTime)
   at Hook<System.Void PathOfTerraria.Common.Subworlds.BossDomains.Prehardmode.DeerDomain.DeerclopsDomainLightEdits::ResetLightMul(Terraria.On_Main+orig_Update,Terraria.Main,Microsoft.Xna.Framework.GameTime)>(Main , GameTime )
   at PathOfTerraria.Common.Systems.VanillaModifications.AntiDespawnSystem.ForceNoDespawning.EarlyUnsetPlayerFlag(orig_Update orig, Main self, GameTime gameTime)
   at Hook<System.Void PathOfTerraria.Common.Systems.VanillaModifications.AntiDespawnSystem.ForceNoDespawning::EarlyUnsetPlayerFlag(Terraria.On_Main+orig_Update,Terraria.Main,Microsoft.Xna.Framework.GameTime)>(Main , GameTime )
   at SyncProxy<System.Void Terraria.Main:Update(Microsoft.Xna.Framework.GameTime)>(Main , GameTime )
   at Microsoft.Xna.Framework.Game.Tick()
   at Microsoft.Xna.Framework.Game.RunLoop()
   at Microsoft.Xna.Framework.Game.Run()
   at Terraria.Program.RunGame()
   at Terraria.Program.LaunchGame_(Boolean isServer)
   at Terraria.Program.LaunchGame(String[] args, Boolean monoArgs)
   at Terraria.MonoLaunch.Main_End(String[] args)
   at Terraria.MonoLaunch.<>c__DisplayClass1_0.<Main>b__1()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions