• For issues you find with the Switch and Console releases, please follow this link and give as much detail as possible. This is the speediest way to get info to Pipeworks and get a hotfix in the works.
  • For issues you find with the Mobile 1.3 update, please follow this link and give as much detail as possible. This is the speediest way to get info to DR Studios to look at your issue. Also, some troubleshooting hints here.

tModLoader Mod Helpers

hamstar

Steampunker

Mod Helpers

v5.2.0.1

Mirror

Overview

This is a library/helper mod designed to offload redundant code from other mods (mainly my own) into a central place, and also to act as a general "helper" mod for users to help manage their mods or search for other mods.

See the wiki page for feature overviews.

Guides are now also available for using advanced features. More planned.

Library API documentation is also now available.



Library API Features

It features an eclectic (and always growing) collection of assorted functions and utilities available freely for use. To list just a few:


User Features

As of v1.2.0, this mod now comes with an in-game control panel. You can view all loaded mods, change their config files (if they're enabled for doing so) in-game, or even submit feedback or bug reports for specific mods! If you want any other control panel options to be added, let me know.

As of v1.2.6, a mod locking button has been added to the control panel. With this, all currently active mods on the current world are locked; you cannot play that world without all of these mods active.

New (v3.0) Mod tags may be supplied for any given mod, or used to search existing mods in the mod browser.



For modders
New to v1.2+ is the ability to enable github issues in-game. No mod dependency required!
  • To receive in-game issue reports from players: Your Mod overriding class must include the following properties (with your respective github user name and your mod's project name):
    Code:
    public static string GithubUserName => "hamstar0";
    public static string GithubProjectName => "tml-hamstarhelpers-mod";



 
Last edited:

hamstar

Steampunker
v5.2.0.1
  • Fixed bad references to ModLoader.UI.Interface
v5.2.0
  • Finished updating to TML11.5
  • Added some missing docs
  • Set docs XML file to be included with project
  • Added Classes.UI.Config.FloatInputElement
  • Added ILoadable (untested)
  • Restructured TmlHelpers and added SafelyGetRand()
  • Refactored timers to use value tuples instead of KeyValuePairs
  • Fixed stack overflow with TileFinderHelpers.GetTilesInWorldRectangle(Rectangle, TilePattern )
  • Changed TileFinderHelpers.GetTilesInWorldRectangle(Rectangle, TilePattern, Action<int, int, bool>) to (Rectangle, TilePattern, Func<int, int, bool, bool>)
  • Added BTree (WIP)
  • Fixed possible issue with error handling for WebConnectionHelpers.HandleResponse(...)
  • Renamed UITextField and UITextArea to UITextInputFieldPanel and UITextInputAreaPanel
  • Added UITextInputElement
  • Added UITheme.ApplyInput bindings for UIPanel
  • Modified UI text input classes OnChange hooks to allow changing or rejecting input text
  • Added OnUnfocus to UI text input classes
  • Added missing docs
  • Obsoleted ItemIdentityHelpers and ProjectileIdentityHelpers GetItemDefinition(string)
  • Updated PrimitiveDefinitions to use FloatInputElement
v5.1.0
  • Split most of RecipeIdentityHelpers into RecipeFinderHelpers
  • Added "Any Heavy Armor" item entity group
  • Added TileBiomeHelpers.GetVanillaBiomePercentsOf(...)
  • Added missing Meteor entry to VanillaBiomes
  • Added TilePattern.CombinePositive and CombineNegative
  • Added minimum and maximum brightness fields for TilePattern
  • Added AnimatedTexture service
  • Added RockCave biome to VanillaBiome
  • Tweaked AnimatedColors to use mod unload hook
  • Fixed paint color matching (PaintHelpers.GetNearestPaintType(...))
  • Added XNAColorHelpers.DistanceRGBA(Color, Color) and DistanceRGB
  • Defined TileCollisionType and a TilePattern.Check(...) overload to return also the collision type
  • Fixed TileHelpers.IsSolid(...) to dismiss non-active tiles (!!!)
  • Added WorldHelpers.DropToGround(Vector2, bool, TilePattern, int, out Vector2)
  • Added TilePattern.CheckBrightness(...)
  • Improved air tile checks for TilePattern
  • Minor internal restructure to TileHelpers.IsAir(...)
  • Added TilePattern.AreaFromCenter
  • Added TilePattern.Check(int, int, out TileCollideType, out Point), CheckPoint(int, int, out TileCollideType), CheckArea(int, int, int, int, out TileCollideType, out Point)
  • Added failsafe against control panel load failure
  • Fixed TilePattern.CheckArea(...)
  • Removed air from TilePattern check
  • Added WorldHelpers.IsRockLayer(...)
  • Added WorldRegionFlags enum (replaces VanillaSectionalBiome)
  • Renamed WorldHelpers definitions to specify TileX or TileY
  • Added WorldHelpers.GetRegion(Vector2)
  • Added WorldRegionFlags.CavePreRock
  • Obsoleted WorldRegionFlags.Cold; use Snow instead
  • Added WorldHelpers.IsPreRockLayer(Vector2)
  • Added Magical mod tag
  • Corrected biome/world enum flags to not use 0
  • Added some 2D DictionaryExtentions (Count2D, Set2D for hashes)
  • Restructured 2D DictionaryExtentions
  • Fixed WorldHelpers.UnderworldLayerBottomTileY value
  • Added tile types (OR) to TilePattern via. IsAnyOfType
  • Added DictionaryExtentions for Count2D, Remove2D
  • Added PlayerWarpHelpers constants for teleport styles
  • Added TileFinderHelpers.FindTopLeft( TilePattern, int, int, int, int )
  • Refactored WebConnectionHelpers to use WebClient
  • Removed non-async WebConnectionHelpers methods
  • Fixed TileFinderHelpers.FindTopLeftOfSquare(...) (again?)
  • Fixed refactored WebConnectionHelpers GET
  • (Re)-added web request headers
v5.0.1
  • Changed some mod tags (Town NPCs -> Friendly NPCs, Decorative Emphasis -> Decorative Emph.)
  • Added Projectile Emphasis mod tag
  • Added DebugHelpers.GetContextSliceint, bool, int, string)
  • Added LogHelpers.LogContext(string, bool, int, string, string)
  • Added HUDElementHelpers
  • Added PlayerItemHelpers.GetCurrentVanillaMaxAccessories(Player)
  • Fixed mod tag Modify and Submit button weirdness (including blocked mod tag editing)
  • Assorted internal mod tags refactoring
  • Begun implemented WebRequests.GetGlobalInbox (WIP)
v5.0.0.4
  • Added error handling for NetPlayHelpers.LoadIPAsync()
v5.0.0.3
  • Fixed issue with player connect sync checking for configs that are no longer present (were upgraded to ModConfig)
v5.0.0.2
  • Fixed an instance of invalid CustomLoadHooks (via. PlayerLogic.OnServerConnect)
v5.0.0
  • Revised nearly all Helpers, Services, Classes (formerly Components), and just about everything under the hood
  • Removed Custom Entities; they'll get their own mod (eventually)
  • Revised mod tags UI
  • Added 'Cleanup unused mod tiles' button to control panel
  • Added documentation
v4.4.0.2
  • Added tML 11 failsafes to remove control panel and mod tags (until properly adjusted)
  • Added BuffIdentityHelpers.GetBuffName(int)
  • Fixed an exception with CommandsHelpers.GetQuotedStringFromArgsAt(...)
v4.4.0.1
  • Fixed "Any Food Ingredient" recipe group
  • Rearranged some mod tags in the display
  • Disabled default tag auto filter with mod browser
v4.4.0
  • Added TmlHelpers.ModHelpers.ModIdentityHelpers
  • Renamed ModListHelpers.GetModsByAuthor() -> GetLoadedModsByAuthor(), GetModsByBuildInfo() -> GetLoadedModsByBuildInfo()
  • Moved ModListHelpers.PromptModDownloads(...) -> MenuModHelpers.LoadMenuModDownloads(...)
  • Moved TmlHelpers.GetModUniqueName(Mod), FindDependencyModMajorVersionMismatches(...), ReportBadDependencyMods(...) -> ModIdentityHelpers
  • Added error failsafe for InboxMessages.CountUnreadMessages()
  • Changed MenuModHelper to ModMenuHelpers
  • Moved LoadMenuModDownloads from MenuModHelper to MainMenuHelpers
  • Implemented ModIdentityHelpers.IsProperlyPresented(...)
  • Moved/renamed ModMetaData to ModHelpers/ModFeaturesHelpers
  • Added ModListHelpers.GetLoadedModNamesWithBuildProps() + refactored other GetLoaded functions
  • Refactored GetModVersion into GetModInfo
  • Assorted refactoring cleanups
  • Added MiscHelpers.WebHelpers
  • Fixed ModListHelpers.GetModsByAuthor() to handle multi-author mods
  • Added 'bad mods' promise and web request with GetModInfo
  • Refactored structure of GetModInfo
  • Set "Misleading Info" button tag to default to "unfiltered" for mod browser
  • Further restructured GetModInfo web stuff
  • Restructured GetModTags
  • Updated GetModInfo.ModInfoUrl
  • Added possible crash failsafe for InboxMessages.SetMessage(...)
  • Set mod tags submit UI to always force "Misleading Info" for 'bad mods'
  • Restructured RecipeGroupHelpers code layout
  • Added EntityGroups "Any Food" and "Any Food Ingredient"
  • Tweaked "Misleading Info" tag description
  • Added debug output for mod tag filter results
  • Added failsafe against double calling for mod info
  • Fixed mod browser filtering incorrectly against unfilters-only
v4.3.0
  • Repositioned internal 'Inbox' stuff away from 'ControlPanel' code files
  • Refactored ModListCommand
  • Added exceptions to ModListHelpers.GetModsByAuthor() and GetModByBuildInfo() lists to not show the "tModLoader" mod
  • Begun revising UIControlPanel to allow for alternate tabs
  • Added DataDumper.DumpToLocalFile(string, out string)
  • Set DebugModeHelpersInfo to false by default
  • Separated control panel inner container (now a tab) into its own class and subfolder
  • Added ControlPanelTabs
  • Added Control Panel tab buttons
  • Modified UIWebUrl to implement proper resizing of underline via. its own SetText method
  • Added PlayerHelpers.GetTeamName(int, out Color)
  • Renamed Services/PlayerState to Services/ExtendedPlayerHooks
  • Added player-kills-NPC hooks
  • Finished implementing ExtendedPlayerHooks for NPC kills
  • Fixed issue with ControlPanelTabs.OpenTab(...) with a closed control panel
  • Added PingUpdateDelay config setting
  • Fixed issue of closing control panel with escape key causing it to think it's still open
v4.2.7
  • Added RecipeIdentityHelpers.GetRecipeIndicesOfItem(int)
  • Added RecipeHelpers.GetAvailableRecipesOfIngredients(Player, IEnumerable)
  • Fixed issue with RecipeHack possibly not obtaining all recipes and added significant optimizations
  • Removed april fools crap
  • Relocated ReflectionHelpers to subfolder
  • Begun adding Services/ModCompatibilities
  • Implemented ModCompatiblities service code form (and ExtensibleInventory vs kRPG in particular)
  • Renamed obsolete ReflectionHelpers code files
  • Added ArrayExtensions.Copy(...)
  • Added ReflectionHelpers.GetDeep(...) and SetDeep(...)
  • Re-implemented RecipeHack.GetAvailableRecipesOfIngredients(Player, IEnumerable) (mysterious disappearance!)
  • Added caching to BuildPropertiesEditor.GetBuildPropertiesClassType()
  • Added caching for ReflectionHelpers.GetTypesFromAssembly(...)
  • Internally corrected references to ReflectionHelpers
  • Restructured DataStructures.Extensions into separate partial classes and class files
  • Added DataStructures.DictionaryExtentions 2D stuff for lists and arrays
  • Added DictionaryExtensions.Append2D<...>(...)
v4.2.6.1
  • Added a fun surprise
  • Added some optimizations to RecipeHack
v4.2.6
  • Restructured Services code files to better separate API and singleton instance code
  • Added RecipeHack service
  • Begun RecipeHelpers.CanRecipeBeCrafted(Player, Recipe)
  • Added RecipeHelpers.GetRecipeCraftReason(...) and Equals(Recipe, Recipe)
  • Added DataStructures.ArrayExtensions (just a RemoveAt function for now)
  • Added DictionaryExtensions.Add2D<...>(...)
  • Added DictionaryExtension.AddOrSet<...>(...)
  • Added PlayerItemHelpers.GetCurrentlyOpenChest(Player, out bool?)
  • Improved RecipeHelpers.GetRecipeFailReason(...)
  • Minor internal code restructuring within ModHelpersMod
  • Added ItemHelpers.ConsumeItems( IDictionary<int,int>, Item[] )
  • Renamed code files of tmod basic classes
  • Slightly restructured RecipeHelpers
  • Restructured RecipeHelpers to add RecipeGroupHelpers and RecipeIdentityHelpers
  • Condensed support info panel slightly
v4.2.5
  • Refactored mod tags data structure to use an ordered list + pivot point
  • Added failsafe against possible MusicHelpers crash
  • Added better debug context info from LoadHelpers.IsWorldSafelyBeingPlayed()
  • Added failsafe against possible SupportInfo crash
  • Restructured helpers classes to separate singleton instance code into separate code files (including some relevant internal reorg)
  • Added XnaHelpers.DrawBatch(Action, out bool, bool=true) (and also its SpriteBatch.Begin parameter-rich variation)
  • Implemented internal use of DrawBatch (more testing needed)
  • Changed ModLockHelpers to ModLockService
  • Added "Unimaginative" mod tag (a "judgmental" tag)
  • Set mod list "mod browser version" indicators to use a different color for older versions
  • Recolored + added colors for some control panel tags
  • Added TmlHelpers.SafelyGetModPlayer(Player)
v4.2.4.2
  • Refactored mod tags data structure to use an ordered list + pivot point
  • Attempted fix/handling for SupportInfo draw errors
  • Added failsafe against possible MusicHelpers crash
  • Added better debug context info from LoadHelpers.IsWorldSafelyBeingPlayed()
v4.2.4.1
  • Fixed QuadTree.GetAll() (will test soon)
  • Modified QuadTree to correctly (?) chart tree during GetNearestElements(...) call
  • Added TmlHelpers.SafelyGetModPlayer(Player, Mod, string) (used exclusively for Main.LocalPlayer.GetModPlayer(...) to avoid possible bug)
v4.2.4
  • Added LogHelpers.AlertOnce(string) and WarnOnce(string)
  • Added debug outputs from LoadHelpers.IsWorldSafelyBeingPlayed() (via new config setting DebugModeHelpersInfo; defaults true)
  • Set mod tags and version info to only be requested for download in single player and client MP
  • Restructured+relocated QuadTree files to own subfolder
  • Further refined QuadTree
  • Changed DictionaryExtensions.HardGet to GetOrDefault
  • Added "Any Vanilla Alchemy Herb", "Any Vanilla Alchemy Fish", "Any Vanilla Alchemy Misc", "Any Vanilla Alchemy Ingredient" entity groups
  • Added some error catching for Promises.TriggerValidatedPromise(...)
  • Added "Any Equipment" checks for each category of equipment
  • Restructured DefineItemMiscGroupsN(...)
  • Corrected definition of "Any Vanilla Alchemy Ingredient" (untested)
  • Restructured Entity Group definition files
  • Added "Any Garment" EG, corrected "Any Vanity Garment"
  • Restructured UIModData code files
  • Added mod tags display to control panel mod list (via UIModData)
  • Added some (maybe redundant?) LogHelpers locks
  • Added inbox message alerting to control panel changes
v4.2.3.2
  • Reverted WorldHelpers.GetUniqueIdWithSeed() to GetUniqueId(bool)
  • Tweaked UIModData to (hopefully) remove silent exceptions with sortion
  • Replaced occurrences of TagCompound.Set with indexers
  • Added random Support messages to control panel
  • Tweaked Informational tag description
  • Fixed issue with DataDumpProtocol not returning a reply to resolve retry spam
  • Corrected markdown sanitization for issue reports
  • Switched internal occurrences of LINQ's Select to MH's SafeSelect
v4.2.3.1
  • Fixed issue (suddenly?! no changed code?!) with ReflectionHelpers.RunMethod causing other mods to not load
v4.2.3
  • Added paranoia to ItemHelpers.ReduceStack(...)
  • Add GetProperUniqueId(int) and (NPC) to ItemIdentityHelpers, NPCIdentityHelpers, and ProjectileIdentityHelpers
  • Improved error outputs for ModBoilerplateHelpers.HandleModCall(...)
  • Increased "Mod recommendations" limit from 6 to 8
  • Tweaked support info text
  • Restructured InfoHelpers code files
  • Changed InfoHelpers.GetCurrentPlayerInfo and GetCurrentPlayerEquipment to GetPlayerInfo and GetPlayerEquipment
  • Changed InfoHelpers.RenderModTable to RenderMarkdownModTable
  • Added InfoHelpers.RenderMarkdownPlayerTable and RenderMarkdownPlayerEquipsTable
  • Added support for menu logo repositioning for Overhaul v3.3+
  • Refactored ReflectionHelpers file structure further
  • Obsoleted ReflectionHelpers.GetTypeFromMod(...)
  • Changed ReflectionHelpers.GetAllAvailableSubTypes(...) to GetAllAvailableSubTypesFromMods
  • Changed ReflectionHelpers.GetAllAvailableSubTypes to GetAllAvailableSubTypesFromMods
  • Obsoleted all Field and Property-specific methods from ReflectionHelpers (just use Set and Get)
  • Restructured ReflectionHelpers code files
  • Added caching for ReflectionHelpers Get and Set
  • Fixed incorrect WorldHelpers helpers checks for world positions
  • Added FormattingHelpers
  • Changed player data into markdown tables (player data, player equips) for issue reports
  • Properly sanitized issue reports for markdown use
v4.2.2.1
  • Fixed logic error with ReflectionHelpers.SafeCall(...)
  • Added PlayerModHelpers.ModdedExtensionsReset(Player, ISet)
  • Improved error output for ModBoilerplateHelpers.HandleModCall(...)
  • Traded Multi-faceted mod tag for Has Documentation
v4.2.2
  • Added error handling for PlayerModHelpers.ModdedExtensionsReset's "ResetPlayerModData" Mod.Call
  • Added TmlHelpers.ModHelpers.ModBoilerplateHelpers
  • Restructured TmlHelpers.ModHelpers into multiple code files
  • Changed ModHelpers.GetAllPlayableModsPreferredOrder() to ModListHelpers.GetAllLoadedModsPreferredOrder()
  • Changed ModHelpers.PromptModDownloads(...) to ModListHelpers.PromptModDownloads(...)
  • Assorted internal renaming for clarity
  • Obsoleted LoadHelpers.IsPlayerLoaded(Player)
  • Added debugging info to EntityGroups constructor (gonna find this slippery :red: someday!)
  • Removed link to mods-in-dev in support tab
  • Added UIHiddenPanel
  • Changed TagsMenuContextBase.GetModDescriptionFromActiveMod(string) to GetModDataFromActiveMod(string, string)
  • Set mods to show their homepage URL in the status bar on mouse hover
v4.2.1.4
  • Fixed XnaHelpers ctor calling graphics code without checking if server mode
v4.2.1.3 (<- ERROR: PREVENTS SERVER HOSTING!)
  • Restructured ReflectionHelpers code files
  • Added ReflectionHelpers.Set(...)
  • Added Thorium support and general mod support (Mod.Call("ResetPlayerModData", Player)) for PlayerModHelpers.ModdedExtensionsReset()
  • Improved some mod tag descriptions
  • Fixed issue with support info not appearing
  • Fixed XnaHelpers.IsMainSpriteBatchBegun(...)
v4.2.1.1
  • Wrapped exceptions with log outputters
  • Fixed broken backwards compatibility with PacketProtocolData classes (using the old "default" constructor type)
v4.2.1
  • Changed default issue report log output of code lines from 35 to 50
  • Added lock protect for PacketProtocolManager
  • Fixed missing HasSyncedWorldData flag for player (and player syncing in general)
  • Added ModInfoTagsMenuContext.SetCurrentMod(...) missing arguments error catching
  • Added DataStore.GetAll() and Add(object, double) (and a non-API Serialize() method)
  • Added assorted helpful error catchers
  • Implemented proper queuing of Packet Protocol requests
  • Removed some fluff code with player connecting/entering world
  • Added redundant sending+requesting of player ids on server connect
v4.2.0
  • Changed CustomEntity.SyncFromClientServer to SyncFromClient and SyncFromServer, separately
  • Refactored HamstarException to output context automatically
  • Added DebugHelpers.GetCurrentContext()
  • NPCHelpers.Hurt(...) is now RawHurt(...)
  • Added entity group "Any Boss"
  • Added LogHelpers.Alert and Warn (supplies context prefix to log message)
  • Added locking for HamstarException
  • Added EntityData service
  • Attempted fix for EntityGroups API RO dicts being empty (untested)
  • Corrected some occurrences of PacketProtocolData's OnInitialize calls
  • Restructured custom entity component code files
  • Sorted custom entity components into subfolders
  • Added ShootsAtPlayerEntityComponent (untested)
  • Fixed some factory Create methods of components failing to invoke OnInitialize
  • Added OnEntityInitialize hook to CustomEntityComponent
  • Restructured CustomEntity code files
  • Reverted PacketProtocolData to plain constructors (factory obsolete)
  • Renamed PacketProtocolData OnInitialize to OnClone
  • Updated issue report to make mod list into a table (among other tweaks)
  • Renamed Custom Entity's 'Draw' component methods + added GetFx()
  • Implemented shader support for custom entity overlay
  • Added WorldHelpers.IsRockLayer, IsDirtLayer, IsOverworld, IsSky, IsBeach, IsBeachRegion
  • Added QuadTree data structure (untested; WIP)
  • Added ReflectionHelpers.GetClassTypeFromMod(string, string) (obsoletes GetClassTypeFrom(...))
  • Added TileFinderHelpers.GetPlayerRangeTilesAt(int, int) (untested)
  • Added TileBiomeHelpers
  • Removed excess mod recommendations
  • Changed ReflectionHelpers.GetClassTypeFromMod(...) to GetTypeFromMod(...)
  • Added ReflectionHelpers.GetTypesFromAssembly(string, string)
  • Added TileBiomeHelpers minimum tile-per-biome fields
  • Added TileBiomeHelpers.GetBiomesNear(int, int)
  • Changed TileWallHelpers.IsDungeon(Tile) to IsDungeon(Tile, out bool)
  • Added XnaContractResolver (fixed issue with Rectangles as config settings)
  • Restructured JsonConfig code files
  • Changed TileBiomeHelpers.GetBiomesNear to GetVanillaBiomesNear
  • Changed TileBiomeHelpers.GetVanillaBiomesNear(...) to GetVanillaBiomePercentsNear( int, int out int, out int)
  • Fixed TileFinderHelpers.GetPlayerRangeTilesAt(...)
  • Added WorldHelpers constants for world sizes
  • Added Dictionary extension method HardGet<TKey, TValue>( this IDictionary<TKey, TValue>, TKey )
  • Added JsonConfig.LoadFileAsync(Action) and SaveFileAsync(Action)
  • Set player "proper" ids to reset between game sessions (fixes player data incorrect persistence bug)
  • Added IsAsync overrideable property to PacketProtocol
  • Fixed PacketProtocolData incorrect default ctor check (?!)
  • Added retries param to all PacketProtocol Request functions (requests are now counted)
  • Centralized PacketProtocol hash code mapping
  • Fixed attempting to sync CustomEntities if none exist
  • Refactored PacketDataProtocol's way of making an ordered list of fields (now omits fields with PacketProtocolIgnoreAttribute better)
  • Added DebugModePacketInfo config option
  • Added DotNetHelpers.StringifyDict(...) (replaces DictToString) and Stringify(object, int)
  • Added JsonConfig.Deserialize( string, Type, JsonSerializerSettings )
  • Set PacketProtocolData to handle XNA Color correctly, now
  • Further improved debug output for packet protocol
  • Numerous assorted tweaks
  • Changed Control Panel UI to use vanilla UI's colors instead of red theme
  • Replaced 'Rated R' tag with 'Misleading Info'
  • Slight tweaks to mod tags UI layout
  • Updated mod description
v4.1.0.1
  • Fixed crash with CustomEntityManager._PostDrawAll
  • Updated XnaHelpers.IsMainSpriteBatchBegun() to IsMainSpriteBatchBegun(out bool)
  • Enabled .NET version restriction
v4.1.0
  • Added alert message for not having .NET Framework 4.6 or higher
  • Added coal tile via. vanilla's Coal item (credit: Nvar)
  • Added LinqHelpers
  • Made ReflectionHelpers.GetAllAvailableSubTypes safer
  • Added HitRadiusPlayerEntityComponent
  • Added PlayerHelpers.RawHurt(Player, PlayerDeathReason, int damage, int direction, ...)
  • Added ReflectionHelpers.SafeCall( MethodInfo, object, object[] )
  • Added ReflectionHelpers.NullableAttribute (allows params for SafeCall to be nullable)
  • Restructures CustomEntity, CustomEntityComponent, and CustomEntityManager files
  • Added overrideable CustomEntityComponent.OnAddToWorld( CustomEntity )
  • Modified general ReflectionHelpers methods to enable broader gets and sets (accesses public, non-public, static, instanced)
  • Added TmlHelpers.FindDependencyModMajorVersionMismatches( Mod ) and ReportBadDependencyMods( Mod )
  • Added properties to BuildPropertiesEditor for each build.txt field (including internal-only fields)
  • Added Services.GameData.BossData (WIP)
  • Modified internal framework reference to v4.5.2
  • Fixed ReflectionHelpers.RunMethod to properly handle method arguments
v4.0.1
  • Fixed inbox crash (hopefully)
  • Fixed custom entity loading crash (hopefully)
  • Removed tag 'Item Sets', re-added 'Weapons', added 'Tools'
v4.0.0
  • Added Min and Max screen dimension constants to UIHelpers
  • Restructured WorldHelpers (added WorldStateHelpers)
  • Removed 'Injects Code' tag and added 'Accesses Web' tag
  • Added TileHelpers.TileType and TileWorldFinderHelpers
  • Added TileType presets
  • Added common Entity fields-as-properties for CustomEntityCore (placeholder for maybe eventually abstracting away the core Entity)
  • Secured against async issues with custom entity spawning
  • Fixed lighting origin for custom entity sprites
  • Fixed map icons not lining up with game objects
  • Fixed issue with serializing custom entities without player owners
  • Upgraded HudMapHelpers API to indicate if map object is off the map (for all maps
  • Added HudMapHelpers.GetSizeOnFullMap, GetSizeOnOverlay, GetSizeOnMinimap
  • Added UIHelpers.GetScreenSize
  • Fixed custom entity map icon positioning
  • Changed HudMapHelpers functions to use Tuples instead of out returns
  • Begun implementing draw layers for custom entities
  • Fixed mod recommendations list incorrectly rendering and displaying hover text
  • (WIP) Switching to Overlays.Scene for custom entity rendering layers
  • Normalized encoding to UTF8 (was mix ASCII and "Default")
  • Innumerable minor fixes
  • Restructured DrawsInGameEntityComponent drawing
  • Removed Initialize() calls from component constructors; must be called explicitly
  • Added CustomEntity.IsInitialized
  • Removed custom entity templates
  • Set CustomEntity to be an abstract class; must be implemented for each CustomEntity type
  • Refactored CustomEntityManager to handle entity creation, retrieval, type id-ing, etc.
  • Custom entities now handle their own creation via. factory
  • Properly (re)implemented ids for custom entity types
  • Removed 'IsInitialized' flags for components; custom entities will ensure these are setup properly
  • Removed behavior of auto-adding new CustomEntity instances to the world
  • Changed CustomEntityManager.SetEntityByWho to AddToWorld
  • Removed CustomEntityCore properties from network and json sync
  • Added restrictive PacketProtocol interfaces for the primary types of protocols
  • Added proper abstract methods for PacketProtocol interface classes
  • Added new information to github report
  • Attempted to failsafe BuildPropertiesEditor.GetBuildPropertiesClassType against exceptions
  • Attempted fix for tag load crash
  • Upgraded HamstarException to accept an inner exception
  • Finished implementing factory subclass for all PacketProtocolData classes
  • Added contexts to PacketProtocolDataConstructorLock
  • Renamed CustomEntity files
  • Fixed PacketProtocolData's constructor to allow CreateRaw properly
  • Altered PacketProtocol interfaces to force-obsolete underlying methods
  • Fixed CustomEntity json deserializer
  • Fixed CustomEntityComponent json deserialization (failed to acquire constructor)
  • Compressed main menu support info box
  • Fixed (!) issue with finding players by UID
  • Added DotNetHelpers.IsSubclassOfRawGeneric( Type, Type )
  • Modified SupportInfoDisplay box to be clickable entirely
  • Discovered a way for subclasses to handle successive overrides, but preserve abstract methods (e.g. PostPostInitialize)
  • Added info to uses of NotImplementedException
  • Restructured CustomEntity json and net code a bit
  • Altered PacketProtocol interfaces to use sealed instead of obsoleting
  • Added, edited, and removed assorted mod tags and descriptions
  • Removed 'Esoteric' tag
  • Restructured CustomEntity internals
  • Added some error checking for SerializableCustomEntity and relegated networking exclusively to it
  • Added CreateCore, CreateComponents, CreateCoreTemplate, and CreateComponentsTemplate abstract methods to CustomEntity
  • Restructured CustomEntityManager layout
  • Deferred stream (de)serialization to SerializableCustomEntity
  • Fixed CustomEntity PacketProtocolData read issue
  • Set entity owners to refresh on server when player joins
  • Updated to next major version (other mods have to be updated accordingly)
  • Prevented entity sync until all entities have been loaded
  • Added CustomEntityManager.GetEntitiesForPlayer( Player )
  • DataStore.Get now returns bool and outs its value by its generic parameter's Type
  • Set CustomEntity.OwnerPlayerUID to not transmit from server -> client
  • Set CustomEntity.ToString() to output Type name
  • Added exception catching for PacketProtocol.Send stuff
  • Set mods using default descriptions to be auto-tagged as 'Low Effort'
  • Added Magi-Tech Scrap item
  • Implemented hit radius entity component
  • Updated hit radius component into 2 components
  • Refactored from snake case to camel case
  • Modified mod tags UI overlays to be more unified
  • Added 'Restrictions' tag, renamed 'Nerfs' to 'Easings'
  • Added NPCHelpers.Hurt(NPC, int)
  • Fixed incorrect mod tag submit URL (damn you, camel case refactoring!)
  • Added ProjectileHelpers.Hit(Projectile)
  • Added CustomEntityManager.IsInWorld( CustomEntity )
  • Added AttributeUsage to PacketProtocol attributes
  • Added CustomEntity.SyncFromClientServer property to define client and/or server sync behavior
  • Tightened up PacketProtocol interfaces to seal and deny use of non-relevant PacketProtocol override methods
  • Set PacketProtocol interfaces to force existence of respective initializers
  • Set DataDumper to include old player UID with new
  • Added Promises.IsPromiseValidated( PromiseValidator )
  • Added exception handling for a CacheAllModTags error
  • Improved internal code consistency of CustomEntityProtocol
  • Added LogHelpers.LogOnceReset( string )
  • Set LogHelpers.LogOnce to output repeat attempts every log 10 whole integer amount
  • Fixed issue with endless entity sync loops via CustomEntityManager.AddToWorld
  • Updated PeriodicSync component to use wider random duration time amounts
  • Fixed issue with CustomEntityAllProtocol not respecting entity sync (client, server, both, or none) properties
v3.1.0.4
  • Failsafed (further) and fixed an issue with ProcessTriggers
v3.1.0.3
  • Added some tags
  • Added some failsafes for ProcessTriggers errors
  • Changed DataDumper.DumpToFile(out bool) to (out string)
  • Set dark color for 'Priviledge' tags
  • Added tip for mod recommendations use
  • Added blank panels to the mod browser where mod recommendations ordinarily would go
v3.1.0.2
  • Fixed player id sync issue again
  • Disabled PlayerData component (for now; WIP)
  • Added exception catching for player save and load
v3.1.0
  • Added indication of + and - tags to mod browser filters title
  • Fixed (?) possible crash involving Promises on load
  • Added DotNetHelpers.FlagsToList( int )
  • Fixed GetProperUniqueId(Player) for current player
  • Added PlayerData service (unfinished)
  • Added default info for all menu contexts with the info bar
  • KNOWN ISSUE: Recommendations list calls from the web, and may display incorrect recommendations within the Mod Info context once the set has been loaded
  • Changed mod recommendations to extract mod recommendation info from mod description (description.txt) instead of its own dedicated file (recommendations.txt = discontinued)
  • Implemented better hover URL texts for control panel
  • Restructured control panel code files
  • Fixed (properly) hover URL texts for control panel
  • Invented MenuContext class to replace anonymous delegates for menu context show and hide
  • Added some crash failsafes for mod reloading
  • Fixed mod browser tag displays for mods in Mod Info loading
  • Added mod browser tag crash failsafe (cause unknown)
  • Fixed player id protocol not being synced correctly for new ids
v3.0.2
  • Added config options to disable main menu UI stuffs
  • Added 'judgmental' mod tags; available by config only
  • Refactored Entity Groups for groups to use new mechanism for group dependencies
  • Refactored ModHelpersMod load stuff into new files
  • Added PlayerIdentityHelpers.GetProperUniqueId( Player ); replaces GetUniqueId(...)
  • Add config setting DebugModeDisableSilentLogging (default false)
v3.0.1.4
  • Fixed Reset Tags button disabling with negative tags
  • Refactored Modify/Submit button context info
  • Removed some scary (but harmless?) code in UITagButton
  • Tweaked a tag typo
  • Adjusted support info size
v3.0.1.3
  • Added and tweaked some tags
  • Prevented submitting mod tags without changes
  • Added new and better context information
v3.0.1.2
  • Possible fix for in-game UI render obstruction
  • Assorted minor fixes & tweaks (WIP)
v3.0.1.1
  • Tweaked support info
  • Added more tags and altered some tag descriptions
  • Downgraded to C#6 properly 🤷
  • Updated description.txt and README.md
  • Fixed support links incorrectly stacking hover text
v3.0.0
  • Added mod tag viewing and input interface for mods within the Mod Info page
  • Added mod tag filtering interface for mod browser's mod list
  • Added title screen urls for Mod Helpers support
  • Added mods list update indicators to mods menu
  • Added assorted menu failsafes
  • Added disco AnimatedColors
  • Added config option to disable title screen info
  • Added some failsafes to ReflectionHelpers getters
  • Added UIWebUrl.RefreshTheme()
  • Added XnaHelpers.IsMainSpriteBatchBegun()
  • Added AnimatedColors.Ether
  • Added MenuContextService.ContainsMenuLoaders(string) and ContainsMenuLoader(string, string)
  • Updated NPCInvasionHelpers with GetEventTypeOfInvasionType(int) and GetCurrentEventTypeSet()
  • Added ServerInfo service (re-implements InfoHelpers.GetAveragePingOfServer() )
  • Relocated internal menu stuff
  • Altered ReflectionHelpers to use generics
  • Added more ReflectionHelpers stuff
  • Added MenuModHelpers.ApplyModBrowserFilter(string, IList )
  • Added ModHelpers.PromptModDownloads(string, IList)
  • Renamed ModHelpers.GetAllMods() to GetAllPlayerModsPreferredOrder()
  • Added TmlHelpers.Menus.MenuModHelper
  • Added ModHelpers.UnsafeLoadFileFromMod(TmodFile, string)
  • Added Services.Menus.MenuContextService (used to be MenuUI)
  • Added possible crash fix for using Timers near mod load/reload
  • Refactored ReflectionHelpers to return bools instead of objects (WIP)
  • Added UI menu controls UIMenuButton and UIMenuPanel (previous version)
  • Implemented UIPromptPanel (unused)
  • Added WorldDictionary
  • Added RecipeHelpers.GetRecipesOfItem
  • Added Overhaul mod logo shifting when viewing mod info (for later Overhaul version)
  • Exposed Theme as a property for UI elements (except UIDialog; compatibility issues)
  • Added a failsafe against player id load failure
  • Refactored MenuUI to use loaders and unloaders simply from switching menus
  • Changed Mod Version and Mod Tag getters to use Promises internally
  • Modified "Any Vanilla Item" groups to filter non-vanilla for correctness
  • Refactored main menu loader code to use more generalizeable methods for inserting into existing UI panels
  • Fixed errors with GET request errors
v2.1.0.2
  • Fixed PlayerItemHelpers.DropInventoryItem (for good this time)
  • Added net code to do it
  • Attempted to control for web request exceptions
v2.1.0
  • Set JsonConfig to be restricted to reference types
  • Updated config settings for custom entity debugging
  • Updated config to use mod version for indicating need to update
  • Restructured SaveableEntityComponents
  • Refactored custom entity to now manage its own player owner data
  • Removed PacketProtocolReadIgnoreClientAttribute and PacketProtocolReadIgnoreServerAttribute
  • Added PlayerIdentityHelpers.GetPlayerById(string, out bool)
  • Added another attempt to prevent Entity Group load errors
  • Renamed base classes
  • Fixed entity sync
  • Added entity net code debug outputs
  • Improve entity ToString
  • Fixed more entity sync issues
  • Added LogHelpers.LogOnce(string)
  • Softened default PlayerHelpers.Teleport noise
v2.0.3.2
  • Added an ugly failsafe against 'no player UID' crashes
v2.0.3.1
  • Added no grab delay for PlayerItemHelpers.DropInventoryItem
  • Added PlayerItemHelpers.DropInventoryItem(Player, int, int, out int)
  • Added Promises.UntriggerValidatedPromise(PromiseValidator, object)
v2.0.3
  • Attempted to fix Main.OnTick throttler (via Timers.MainOnTickGoGet() )
  • Added PacketProtocolReadIgnoreClientAttribute, PacketProtocolReadIgnoreServerAttribute, PacketProtocolWriteIgnoreClientAttribute, and PacketProtocolWriteIgnoreServerAttribute
  • Changed Timers.MainOnTickGoGet to MainOnTickGet (int to bool; fixes a crash)
  • Added zoom remove flag for CustomEntity map drawing
  • Added SafeWorldLoad Promise
  • Fixed DataDumper when dump folder is not explicitly pre-existing
  • Added SafeWorldLoad promise for player connect
  • Fixed possible EntityGroups load fail due to deadlock (but still not fixed...?)
  • Refactored LoadHelpers to properly reset load state between games
  • Restructured PlayerLogic for better concern separations
  • Restructured LoadHelpers files
  • Added WorldInPlay Promises
  • Renamed HamstarHelpersMod class to ModHelpersMod
  • Changed PacketProtocol.SetServerDefaults() to SetServerDefaults(int)
  • Added LoadHelpers.IsPlayerLoaded(Player)
v2.0.2.2
  • Implemented Timers.MainOnTickGo as 60fps rate limiter for use with Main.OnTick events
  • Fixed DataDumper (AKA text file FileHelpers fixed)
  • Added abort messages for running Timers on world end
  • Added DataDumper bindings for world and current play IDs
  • Updated Promises to resist async errors
  • Updated validated Promises with a way to formally accept an argument with each triggering (via an overridden PromiseArguments class)
  • Set DataDumper to trigger server to perform data dumps when DebugModeDumpAlsoServer enabled
  • Internally restructured Promises class files layout
  • Fixed missing setting use for disabling mod version updates
v2.0.2
  • Modified Promises.ClearValidatedPromise to require key
  • Added PlayerHelpers.LockdownPlayerPerTick(Player)
  • Added OnLoad hooks for SaveableEntityComponent
  • Merged from v1.6.6.4
  • Renamed commands
  • Restructured custom entity templates (now uses a dedicated template class)
  • Removed some redundant ctors
  • Added debug indication of RailBound entity rail attachment point
  • Internalized CustomEntityComponent clone method and exposed override
  • Altered DataDumper to use proper text files
  • Added text file IO to FileHelpers
  • Set all PacketProtocolData subclasses to require a private constructor with a PacketProtocolDataConstructorLock parameter
  • Added string rendering of entities
  • Fixed basic custom entity net code (for good?)
  • Added 'IsInitialized' property to PacketProtocolData; now requires confirmation of initialization
  • Tweaked RainBound component heights
  • Fixed entity save and load from JSON file
  • Removed Custom Promises; Validated Promises only
  • Added width and height to entity constructor
  • Set entity ID unserializeable and non-publicly changeable
  • Entites are now exclusively acquired via CustomEntityManager.CreateEntityFromTemplate(int)
  • Refactored PacketProtocolData to now own ReadStream and WriteStream from PacketProtocol
  • Restructured CustomEntity so the Entity now exists as a CustomEntityCore field
  • Added debug highlighting of entities (untested)
  • SaveableEntityComponent fires an event (LoadAllHook) after loading all entities
  • Added HudHelpers.DrawBorderedRect alternatives to omit border of fill rects
  • Modified custom object Promises to require a validator via a PromiseTrigger class
  • Changed component PerWorldSave to Saveable
  • Fixed drawing code crashing servers
v1.6.6.3
  • Removed display of config file buttons in control panel mod list in non-single player mode
  • Improved modal log file output naming convention and consolidation
v1.6.6.2
  • Added error handling for certain broadcast packets
  • Included Any Weapons in the Any Equipment group (?!?)
v1.6.6
  • Added a very rudimentary 'privileged user' concept (see PrivilegedUserId config setting)
  • Added /mhmyuserid chat command for seeing one's own user id
  • Added UserHelpers
  • Set all ModCommands that would ordinarily only work in the console (or else single player) to also work for privileged users via. chat on server
  • Set privileged user id to NOT be synced to clients
v1.6.5.4
  • Minor internal refactoring
  • Fixed possible server-side LoadHelper issue
v1.6.5.3
  • Added PlayerModHelpers (deconsolidated from PlayerHelpers)
  • Fixed PlayerModHelpers .ModdedExtensionsReset to correctly recognize Wing Slot mod
v1.6.5.2
  • Added locking to config file operations (internal change)
v1.6.5.1
  • Fixed possible crash from ItemFinderHelpers.GetCurrentAmmo
v1.6.5
  • Added better error reporting from PlayerDataProtocol invalid players (!)
  • Added failsafes to server browser announcing
  • Cleaned up some error messages
  • Added better error catching for config loading
  • Added ItemAttributeHelpers.GetContainerContext(Item) and GetContainerItemTypes(string)
  • Added ItemFinderHelpers.FindMatches(Item[], Func<Item, bool>)
  • Added assorted failsafes
v1.6.4
  • Fixed console commands ('hhmodcall', 'hhmodlockworldtoggle')
  • Added PlayerHelpers.ModdedExtensionsReset(Player)
  • Fixed entity groups projectile pool crash (I hope?)
v1.6.3
  • Renamed config file (don't get mad at me!)
  • Restructured LoadHelpers into TmlHelpers.LoadHelpers and Services.Promises
  • Fixed UI scaling issue in HudMapHelpers.GetFullMapPosition ( @brianide )
  • Changed ItemMusicBoxHelpers -> MusicBoxHelpers
  • Added MiscHelpers.PaintHelpers
  • Changed XnaColorHelpers.FlattenColor(Color) -> FlattenColor(Color, Color)
v1.6.2
  • Updated config file version
  • Restructured ModMetaData code files
  • Added Components.UI.Menu.MenuUI
  • Added mod meta data property detector for ResetConfigFromDefaults (see TCF thread)
  • Moved TmlLoadHelpers to LoadHelpers
  • Implementing mod config reset buttons
  • Renamed TileHelpers.IsNotBombable(...) to IsNotVanillaBombable
  • Renamed TileHelpers.IsNotBombableType(...) to IsNotVanillaBombableType
  • Added XnaColorHelpers.DifferenceRGB(Color, Color), SumRGB(Color), AvgRGB(Color), and FlattenColor(Color)
v1.6.1
  • Changed display name to Mod Helpers
  • Updated to C# 6
  • Moved Control Panel (with Inbox), Logic, Net Protools, and Web Requests to an Internals folder
v1.6.0
  • Finished separating Utilities into Services or Components
  • Moved UI elements to Components/UI/Elements
  • Moved UITheme to Components/UI
  • Moved SystemHelpers to DotNetHelpers
  • Moved MusicHelpers to MiscHelpers
  • Moved PlayerIdentityHelpers to PlayerHelpers
  • Moved FileHelpers to DotNetHelpers
  • Added DotNetHelpers.ReflectionHelpers
  • Added a loading crash prevention measure with entity groups computing
  • Added some more basic npc entity groups
  • Added new ent groups
  • Fixed internal obsoletes
v1.5.0
  • Created EntityGroups
  • Added EntityHelpers.GetQualififedName(Entity)
  • Added ProjectileHelpers.GetQualifiedName(Projectile)
  • Added RecipeHelpers.ItemHasIngredients(Item, ISet, int)
  • Added MusicHelpers
  • Set EntityGroups to not load unless a mod needs them (improves loading times)
  • Added ItemAttributeHelpers.RarityColor, RarityColorText, and RarityLabel
  • Added PlayerItemHelpers.DropEquippedMiscItem(Player, int)
  • Restructured TmlLoadHelpers
  • Added TmlLoadHelpers.AddPostWorldUnloadOncePromise(Action) and AddPostWorldUnloadEachPromise
  • Minor tweak to reduce error log spam
v1.4.18
  • Added PlayerItemFinderHelpers.GetCurrentAmmo(Player, Item)
  • Added WorldHelpers.GetUniqueIdWithSeed()
  • Fixed inbox sometimes not showing messages when invoked at world start
v1.4.17
  • Added ItemHelpers.ReduceWorldItemStack(int, int)
  • Added further attempted improvements to player data net code
  • Added Timers.GetTimerTickDuration(string)
  • Added better error reporting and failsafes for web request stuff
  • Added TmlLoadHelp.ers.AddPostWorldLoadOncePromise(Action)
  • Added TmlLoadHelpers.AddCustomPromise(string, Func)
  • Added TmlLoadHelpers.TriggerCustomPromise(string)
  • Added TmlLoadHelpers.ClearCustomPromise(string)
  • Added TmlLoadHelpers.AddWorldUnloadOncePromise(Action) and AddWorldUnloadEachPromise(Action)
v1.4.16
  • Set web request errors to not be needlessly verbose
  • Fixed World Load promise spam server side
  • Fixed needlessly looping server announcing
  • Assorted tweaks
v1.4.15.1
  • Added HudHelpers.DrawBorderedRect(SpriteBatch, Color, Color, Rectangle, int)
  • Corrected TileHelpers.IsAir(Tile) to exclude wall tiles
  • Refactored net code to replace ModWorld.Net functions
  • Added XnaColorHelpers.BrightnessRGB(Color), DiferenceRGBA(Color, Color), SumRGBA(Color), and AvgRGBA(Color)
  • Fixed inbox message persistence (now uses JSON)
  • Added DataFileHelpers.GetFullPath(Mod)
  • Added TmlLoadHelpers.AddPostWorldLoadEachPromise(Action)
  • Fixed crash with inbox messages loading between games
v1.4.14
  • Added TmlLoadHelpers.AddModUnloadPromise(Action)
  • Added NPCIdentityHelpers.GetQualifiedName(NPC/int)
  • Added ItemIdentityHelpers.GetQualifiedName(int)
v1.4.12
  • Added custom function option to entity groups (utility is still WIP, though)
  • Fixed minor bug with ItemAttributeHelpers.IsGameplayRelevant(...)
v1.4.11
  • Added EntityGroups
  • Added ItemIdentityHelpers.GetQualifiedName(Item)
  • Fixed possible crash with loading binary files
  • Improved HamstarException to prevent logging excessive redundant errors
v1.4.10.2
  • Implemented manual player sync to try to solve server join issue
v1.4.10.1
  • Re-added renamed recipe groups
v1.4.10
  • Removed TmlLoadHelpers.AddWorldLoadPromises
  • Added TmlLoadHelpers.AddWorldLoadOncePromise and AddWorldLoadEachPromise
  • Removed TmlLoadHelpers.AddPostGameLoadPromise
  • Modified player data to (hopefully) sync properly
  • Internal refactoring
v1.4.9
  • Set control panel to only indicate New! when there's actually mod updates (read: status stored as mod data, not player data)
  • Added InboxMessages.ReadMessage(string, bool)
  • Properly implemented inbox messages actions (untested)
v1.4.8
  • Added ItemAttributeHelpers (adds new methods and obsoletes some ItemIdentityHelpers methods)
  • Added ItemIdentityHelpers.GetTypeByName(string, Mod=null)
  • Added ItemFinderHelpers.CountTotalOfEach(Item[], ISet)
  • Added PlayerItemHelpers.RemoveInventoryItemQuantity(Player, int, int)
  • Further refactored item groups to use ISet instead of int[]
  • Assorted internal refactoring
v1.4.7.1
  • Fixed improperly-named recipe groups (breaks some mods)
  • Added ItemIdentityHelpers.GetCommonItemGroups()
v1.4.7
  • Slightly improved argument handling of ModCallCommand
  • Refactored ItemIdentifyHelpers to use Tuples fields instead of int arrays (adds string labels, as if to be made into recipe groups)
  • Refactored RecipeHelpers to use a single dictionary (RecipeHelpers.Groups) to map strings to recipe groups
  • Refactored PacketProtocol to better clarify some functions and separate client and server
  • Fixed PacketProtocol design errors
  • Added counter measure to 'silent exception' spam
v1.4.6.1
  • Fixed crash from BuildPropertiesEditor
  • Also added IsCheckingModVersions setting to disable mod version checks
v1.4.6
  • Added config option to suppress ping gauging on servers
  • Minor improvement to debug info for mod version checking
  • Fixed Utilities.MenuItem to not produce duplicate menu items
v1.4.5
  • Added an inbox function for mods to post lingering messages for players
  • Extensively refactored PacketProtocol (now with commenting!)
  • Refactored net protocol layout and updated to new PacketProtocol model
  • Added UIHelpers.MouseInRectangle(Rectangle)
  • Fixed possible mod reload crash
  • Refactored to remove some needless code warnings
  • Fixed possible crash with BuildPropertiesEditor (hopefully)
  • Added 'TmlLoadHelpers.AddPostGameLoadPromise(Action)'
  • Altered WorldHelpers.GetUniqueId with an optional parameter to output a filename-safe string
v1.4.4.1
  • Refactored control panel UI code structure
  • Added WorldFileHelpers.EraseWorld(WorldFileData, bool); obsoletes existing EraseWorld
  • Added PlayerFileHelpers.ErasePlayer(PlayerFileData), similarly
  • Added MiscHelpers.DataFileHelpers
  • Fixed some missing stuff with PlayerHelpers.FullVanillaReset(...)
  • Changed BuildPropertiesInterface to BuildPropertiesEditor
  • Fixed a possible mod unload crash
  • Added Utilities.InboxMessages (untested; WIP)
  • Internal refactoring to use finalizers for some classes
v1.4.4
  • Obsoleted UITheme.ApplyList with ApplyListContainer
  • Fixed a possible functionality issue with Timers
  • Added PlayerFileHelpers and WorldFileHelpers
v1.4.2.7
  • Slight tweak to control panel to link mod browser
  • Added InfoHelpers.GetCurrentVanillaEvents()
  • NPCInversionHelpers.GetCurrentEventTypes() obsoletes GetCurrentInvasionType()
  • UITheme now handles UIWebUrl colors
  • Server browser displays a world's 'event' better
v1.4.2.6
  • Added SystemHelpers.TimeStamp() (and corrected SystemHelpers.TimeStampInSeconds())
  • Fixed server browser ping indicator
  • Added server browser passworded server indicator
  • Added server browser filtering of non-port forwarded servers (unless otherwise specified via config)
v1.4.2.5
  • Fixed another server browser net code issue
v1.4.2.4
  • Fixed server browser prompt
v1.4.2.2
  • Delayed proof-of-work reply to avoid hammering
  • Fixed prompt for server browser listing
v1.4.2.1
  • Changed 'UseCustomModeLogging' to 'UseCustomLoggingPerNetMode' config
  • Added SystemHelpers.ConvertDecimalToRadix(long, int) and ComputeSHA256Hash(string)
  • Refactored server browser reporting to include proof-of-work validator
v1.4.2
  • Added InfoHelpers.GetAveragePingOfServer() - Server-side only
  • Cleaned up some net code redundancy and excess
  • Added some asynchronous code crash prevention measures
  • Refactored LogHelpers to use its own logging separate from ErrorLogger (enabled via. config settings)
  • Fixed server ping gathering
v1.4.1.1
  • Added methods for repositioning dialogs
v1.4.1
  • Added Utilities.Menu.MenuItem
  • Fixed SystemHelpers.TimeStampInSeconds()
  • Fixed NetHelpers public IP request
  • Further refined net code
  • Private server command now operates by console only after grace period
  • Assorted tweaks
v1.4.0.9
  • Further improved net code
v1.4.0.8
  • Added one further refinement to net error handling
  • Removed some redundant net calls
v1.4.0.6
  • Added better error handling for net code
v1.4.0.2
  • Added Utilities.Timers
  • Added "hhprivateserver" command (console and server)
  • Added SystemHelpers.TimeStampInSeconds()
  • Added TmlLoadHelpers.AddWorldLoadPromise(Action)
  • Added PacketProtocol.IsVerbose property
  • Refactored web requests
  • Added InfoHelpers
  • Added NetHelpers
  • Much extended TmlLoadHelpers (now replaces TmlWorldHelpers)
  • Added UITextField
  • Added WorldHelpers.GetElapsedPlayTime()
  • Added DisableControlPanelHotkey config setting
  • Begun implementing support for Server Browser (WIP!)
  • Lots of assorted refactoring
v1.3.7
  • Added TmlLoadHelpers (implements OnLoad promises)
  • Added config setting to adjust issue report lines
  • Internal refactoring
v1.3.6.1
  • (Hopefully) fixed linux issue with PacketProtocol
v1.3.6
  • Improved unhandled exception output
  • Added FileHelpers.SanitizePath(string)
  • WorldHelpers.GetUniqueId() may produce a different output (world name portion is sanitized)
v1.3.5.2
  • Added 'DebugModeUnhandledExceptionLogging' to config options (on by default)
v1.3.5.1
  • Added 'FileExists()' to JsonConfig
  • Removed exception handling for JsonConfig.LoadFile()
v1.3.5
  • Fixed all NameToIds to include modded stuff (Note: Now loads via. PostAddRecipes)
  • Added TmlWorldHelpers
  • Minor internal refactoring
v1.3.4
  • Fixed mod issue report chat command
  • Fixed LogHelpers.Log(...) sometimes failing
  • Added FileHelpers
  • Improved PacketProtocol
  • Added functionality to all 'NameToId' stuff to allow lookups for duplicate-named things (Get(), TryGetValues())
  • Removed/relabeled some unimplemented/vestigial stuff
  • NPCHelpers.CurrentPlayerKillsOfNpc() deprecated; now exists as CurrentPlayerKillsOfBannerNpc()
  • Added WebHelpers (was Utilities/Web)
  • Added stream functions to FileHelpers
  • Added PacketProtocol.ReadData and WriteData overrideables
  • Assorted refactoring
v1.3.3.1
  • Added HamstarException (logged exceptions)
v1.3.3
  • Added PacketProtocol
  • Added debug setting for config
  • Assorted tweaks and refactoring
v1.3.2
  • Altered ItemIdentityHelpers.GetVanillaSnapshotHash()
  • Fixed TmlHelpers ExitToDesktop and ExitToMenu (again...)
  • Added WorldHelpers.VanillaDayDuration and VanillaNightDuration constants
  • Fixed PlayerIdentityHelpers.GetUniqueId()
  • Added BuffIdentityHelpers
  • Added SystemHelpers
  • Added NPCHelpers.CurrentPlayerKillsOfNpc(int)
  • Added NPCIdentityHelpers.NamesToIds
  • Added PlayerHelpers.FullVanillaReset(Player)
  • Added ProjectileIdentityHelpers
  • Added UIDialog and UIPromptDialog
  • Improved issue reports
  • Fixed web urls sometimes failing
  • Minor internal refactoring
v1.3.1
  • Fixed network bugs & bogus packet sending
  • Refactored PlayerMessage into PlayerMessages
  • Added PlayerMessages flag for messages to float or else follow player
  • Added EntityHelpersGetVanillaSnapshotHash(Entity, bool)
  • Added ItemHelpersGetVanillaSnapshotHash(Entity, bool)
  • Added PlayerHelpersGetVanillaSnapshotHash(Entity, bool, bool)
  • Moved/altered TmlPlayerHelpers.GetUnique() to PlayerHelpers.GetUnique(Player, out bool)
  • Added some info to issue submits
  • Added WorldHelpers.GetElapsedHalfDays()
  • Internal refactoring (including net code)
v1.3.0.1
  • Refactored some UI code
  • Added checks for new versions of existing mods in the control panel
  • Added Utilities.AnimatedColors
  • Added Utilities.Web (ModIssueReporter, ModVersionGet)
  • Mod issues reports now include recent content from Logs.txt
v1.2.9.3
  • Fixed possible crash/exception with NPC categories (again?)
v1.2.9.2
  • Fixed possible crash/exception with ReadOnlySets
v1.2.9.1
  • Fixed /hhgetitemid command not accepting input correctly
v1.2.9
  • Added GetItemIdByNameCommand (/hhgetitemid)
  • Added hotkey to open control panel ('O' by default)
  • Wrapped mod issue report command with thread
v1.2.8
  • Added CommandHelpers
  • Improved mod description
  • Added ModCallCommand (/hhmodcall)
  • Added DotNetHelpers.ParseToInferredPrimitiveType(string)
v1.2.7
  • Added MiscHelpers.GetRarityColor(int)
  • Added NPCInvasionHelpers
  • Split some of PlayerItemHelpers into PlayerItemFinderHelpers
v1.2.6
  • Added World Mod Lock control panel button
  • Added TmlHelpers.ModHelpers
  • Improved TmlHelpers exit methods
  • Added commands 'hhconfigsrefresh', 'hhcpopen', 'hhmodissuereport', ''hhmodlockworldtoggle'
  • 'DebugHelpers.Log(string)' is now 'LogHelpers.Log(string)'
  • Added SteamHelpers (use responsibly!)
  • Added ModHelpers.GetAllMods()
  • Added enumerations to mod list in control panel
  • Added UserHelpers (admin stuff)
  • Changed control panel toggler to a small icon in the far right corner by default
  • Added control panel close button
  • Refactored some UI code
  • Added config file (mostly for control panel settings)
  • Improved control panel internal code
  • Internal refactoring
v1.2.5.3
  • Refactored code to ensure better mod compatibility/info correctness/crash resistance from reloading mods
  • Set AltNpcInfo, AltProjectileInfo classes obsolete
v1.2.5.1
  • Fixed npc banners mod incompatibility (for real)
v1.2.5
  • Added 'WorldHelpers.GetUniqueId()'
  • Added 'ItemIdentityHelpers.NamesToIds'
  • Fixed mod compatibility error from npcs with invalid banners
v1.2.4.2
  • Fixed PlayerHelpers.KillWithPermadeath()
v1.2.4.1
  • Changed 'TmlHelpers.Exit' to 'ExitToMenu' and 'ExitToDesktop'
v1.2.4
  • Added BuffHelpers
  • Added PlayerHelpers.KillWithPermadeath(...)
  • Added TmlHelpers.Exit(...)
v1.2.3.2
  • Set config file open button to not crash if a .json handler not assigned
v1.2.3.1
  • Set UITheme to be properly extensible
v1.2.3
  • Added more item and recipe groups
  • Revised and corrected PlayerItemHelpers.IsPlayerNaked(...)
  • Added TmlPlayerHelpers: Adds new player hooks (currently only buff expire and armor equip/unequip)
  • Added a crafting recipe for Leather to the game using Vertabrae (for crimson worlds)
  • Added player info to issue reports
v1.2.2.1
  • Fixed control panel not working during auto-pause
  • Lightened URL color and (attempted to) align underscore better
  • Added control panel link for mod recommendation tool
  • Fixed HudHelpers.GetTopHeartPosition() to get correct positions
  • Added ItemIdentityHelpers categories for common vanilla npc groupings
  • Refactored npc banners stuff
  • Added recipe group presets (RecipeHelpers)
  • Added New! alert to control panel button
v1.2.1
  • Added ConfigurationDataBase hooks OnLoad(bool) and OnSave()
  • Improved config load error reporting
v1.2.0.3
  • Fixed possible redundant mod listing bug
v1.2.0.2
  • Updated homepage in build.txt
  • Updated readme
  • Added instruction for issue submits in control panel
v1.2.0
  • Added control panel UI button (issue reporting, mod config reloads, etc.)
  • Added UITextArea, UIModData, UITextPanelButton, UIWebUrl
  • Added GetActive() to NPCHelpers, ItemHelpers, and DustHelpers
  • Added WorldHelpers.GetSize()
  • Moved 'Utilities/UI' to 'UIHelpers/Elements'
  • Added UI theming
  • Added TmlHelpers.BuildPropertiesInterface
 

Attachments

Last edited:

hamstar

Steampunker
I can't seem to close the control panel, any help?
It should be closeable by pressing Escape (same key that accesses your inventory). Did you click on any of the text input fields?

If none of these work, please tell me what mods your using, what your log.txt output contains, and whether this occurs from the start of the game, or only after you activate the panel.
 
Last edited:

ReusableLime20

Slime Collector
Well, I never clicked on any of the input fields, but my inventory key was switched to 'F' (for faster access). Also, is there any way to move the button to open it, or hide it all-together? It would normally be helpful, but it gets slightly in the way of my UI due to me using the Dual-Wielding mod.
Mod list:

  • The Antiaris
  • Unleveled Mod
  • Loot Bags
  • Leveled Mod
  • Boss Checklist
  • Enemy Affixes
  • Hamstar's Helpers
  • Wormholes
  • Cheat Sheet
  • Better Buffs
  • Dynamic Invasions
  • Wing Slot
  • Evil Swapper
  • Magic Storage
  • Material Swapper
  • Painted Hills
  • Dowsing
  • Alternate Swapper
  • Accessory Swapper
  • Item Checklist
  • More Chest Loot
  • MoreAccesories
  • Boss Expertise
  • Banner Bonanza
  • WorldGen Previewer
  • Colored Damage Types
  • Shorter Respawn Time
  • Yet Another Boss Health Bar
  • Wireless
  • Helpful NPCs
  • Double-Player Example
  • Boss Materials Plus
  • Fun Death Sounds
  • Drop Your Weapon
  • Mod Settings Configurator
  • Expeditions Content Pack + Base Mod
  • RPG Classes
  • Dual Wielding
  • Antisocial
Thanks for helping!
 

hamstar

Steampunker
Since a fair number of people use this mod already (and to come), would it make sense to use this mod to generate a list of live servers for a server browsing website?

The list would include all mods running, the list of players, player stats, world size, world stats (progression, time spent, hardmode, corruption-only, etc.), server latency, and maybe other goodies like player K/D ratios, player latency, and any notable mod settings (e.g. Revengeance mode on, Lunatic duration, etc.)
 
Last edited:

SickBoy

Terrarian
Sounds really useful (I'm always in favor of website-driven lists and databases), though it seems like the overhead might be killer even on a beefy dedicated web server. How were you thinking of having the info updated? Or were you going to make it truly live where every visit is pulling info from active servers?

Or did you mean that it'd generate a site specifically for the server ops to use, rather than a mega-database site you'd host?
 
Last edited:

hamstar

Steampunker
Sounds really useful (I'm always in favor of website-driven lists and databases), though it seems like the overhead might be killer even on a beefy dedicated web server. How were you thinking of having the info updated? Or were you going to make it truly live where every visit is pulling info from active servers?

Or did you mean that it'd generate a site specifically for the server ops to use, rather than a mega-database site you'd host?
A hosted site will exist with a REST API that the mod calls every 15 or so seconds while running on a server to update the server's status on the site.

It'll be up to them to connect to the servers in-game.
 
Last edited:

SickBoy

Terrarian
Should work pretty well then. It also seems like it could be expanded in all kinds of really interesting ways, which is always a good thing!

Is there any chance you'd be willing to supply public JSON output for some of the data? I'd love to integrate some of it into my tModLoader: Browserfied project. What exactly that would include, I'm not entirely sure. Off the top of my head I can think of listing servers that use a particular mod, or at least showing the amount that do with a link to a page on your site that effectively does the same thing.
 

hamstar

Steampunker
In getting ready for the server browser, I'm now wrapping up v1.4.0 (part 1, part 2). I'd appreciate it if someone could help test this version by hosting a server with active players with this running. Please report any issues via. the issue reporter, or else posting Logs.txt to this thread.

Edit: See head post for latest version.
 

Attachments

Last edited:

CoronaKing

Steampunker
I'm getting immediate crashes when I load the most current version of this. (I eliminated all other recently updated via elimination) Maybe something to do with checking updated mods in the menu?
 

hamstar

Steampunker
I'm getting immediate crashes when I load the most current version of this. (I eliminated all other recently updated via elimination) Maybe something to do with checking updated mods in the menu?
Could you tell me if your Logs.txt report anything? I'll be patching this shortly to try to catch a few of these problems.
 

Geniusenie

Terrarian
I am also having these problems. The second a world loads and I pop in-game, it hangs and gives a "Terraria.exe has stopped working" crash.
Here are the logs.
0:000:00007 - 000223.60 UNHANDLED crash? True
Sender: Name:Terraria.exe
There are no context policies.
Message: System.NullReferenceException: Object reference not set to an instance of an object.
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__0()
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__1(IDictionary`2 versions, Boolean found) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\ControlPanel\ControlPanelUI_Issue.cs:line 64
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 21
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

0:000:00008 - 000244.03 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.03 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.04 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.05 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.05 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.06 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.07 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.07 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.08 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.08 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.13 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
0:000:00008 - 000244.13 Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 18
Silently Caught Exception: Object reference not set to an instance of an object. at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__0() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__0()
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__1(IDictionary`2 versions, Boolean found) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\ControlPanel\ControlPanelUI_Issue.cs:line 64
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 21
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Object reference not set to an instance of an object. at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__0() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__0()
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__1(IDictionary`2 versions, Boolean found) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\ControlPanel\ControlPanelUI_Issue.cs:line 64
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 21
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Object reference not set to an instance of an object. at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__0() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__0()
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__1(IDictionary`2 versions, Boolean found) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\ControlPanel\ControlPanelUI_Issue.cs:line 64
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 21
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Silently Caught Exception: Object reference not set to an instance of an object. at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__0() at Terraria.ModLoader.ModCompile.<>c.<ActivateExceptionReporting>b__15_0(Object sender, FirstChanceExceptionEventArgs exceptionArgs)
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__0()
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass3.<GetLatestKnownVersion>b__1(IDictionary`2 versions, Boolean found) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\ControlPanel\ControlPanelUI_Issue.cs:line 64
at HamstarHelpers.WebRequests.ModVersionGet.<>c__DisplayClass8.<RetrieveLatestKnownVersions>b__5(String output) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NetHelpers\NetHelpers_Requests.cs:line 21
at HamstarHelpers.NetHelpers.NetHelpers.<>c__DisplayClass9.<MakeGetRequestAsync>b__8(Object sender, RunWorkerCompletedEventArgs args) in c:\Users\Spinach\Documents\My Games\Terraria\ModLoader\Mod Sources\HamstarHelpers\Helpers\NPCHelpers\NPCHelpers_Obsolete.cs:line 10
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
"AlchemistNPC",
"BossChecklist",
"Fargowiltas",
"FKBossHealthBar",
"HamstarHelpers",
"imkSushisMod",
"Infinity",
"LootBags",
"Luiafk",
"MagicStorage",
"MaxStackPlus",
"MoreAccessories",
"MorePotions",
"RecipeBrowser",
"ReducedGrinding",
"SimpleAutoChests",
"ThoriumMod",
"WMITF",
"Wormholes"
 

Angellus Mortis

Terrarian
JSON parse error inside of the Web requests leading to a null reference error. I do not have the logs anymore, but that was definitely the error. It probably has to do with the fact that URL you are using to check for mod version updates is giving an error:

https://script.googleusercontent.com/macros/echo?user_content_key=Owhg1llbbzrzST1eMJvfeO2IxGCHpigWMQZOsv1llpGT7ySYkY8EIxaJk0AVD_8Aegr6CiO9znq24nrES8NyTgg99q5WPQbwm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnBSjTGNl2m1Kws9l1N8jgtgHBs4_KqXHF12fqfuynNZuDJVLqqr8NLJ1-kzKtsTLVrxy_u9Yn2NR&lib=MLDmsgwwdl8rHsa0qIkfykg_ahli_ZfP5

> Limit Exceeded: DriveApp. (line 6, file "Code", project "tModLoader Mod Browser Data")
 

hamstar

Steampunker
I'm just chipping away at the errors thus far. I added a semi-major change in preparation for an upcoming server browser, but my time is being divided the last few days, so progress is a bit choppy.

Tell me if the new v1.4.0.6 improves things.
 
Last edited:

CoronaKing

Steampunker
It seems to pause for 5 seconds or so when I first start up and load up a world. After that, I can exit a world and load it back in just fine, without the pause. Just seems to pause when you first load a world after starting the program.
 

hamstar

Steampunker
It seems to pause for 5 seconds or so when I first start up and load up a world. After that, I can exit a world and load it back in just fine, without the pause. Just seems to pause when you first load a world after starting the program.
Should be fixed.
 
Top Bottom