tModLoader Mod Helpers

hamstar

Terrarian
IMPORTANT: Mod Libs will soon obsolete and replace this mod!




Mod Helpers
v5.14.0

Mirror

Overview

This is a library/helper mod designed to offload code from other mods (mainly my own) into a central place, and therefore avoid redundancy. It also acts as a general "helper" mod for users to manage their mod lists 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.
qi7fuFk.png




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";


Want to contribute? Here's a handy guide on making pull requests:
Here's a tutorial. Otherwise:

First, if you use Windows, learn how to use Git Bash (a Linux-style command prompt):

To contribute to a Github project (AKA make Pull Requests, or PRs):

Here's a handy written guide that also might help.



HamstarHelpers.png




 
Last edited:
v5.14.0
  • Added missing cheat mode checks
v5.13.2
  • Set main menu info to be hidden when ModLibsCore mod is active
  • Disabled control panel toggler when ModControlPanel mod is active
  • Fixed logic error with PlayerNewIdProtocol
v5.13.1.1
  • Fixed net code logic errors (PlayernewID, WorldData)
v5.13.1
  • Added CollectionExtensions
  • Fixed single param DebugHelpers.Print
  • Added TileHelpers.ToString and FromStream
  • Fixed tile stream methods (and renamed code files)
  • Added IsNoisy attribute for NetIO payloads
  • Fixed Client.StartBroadcastingMyCursorPosition getting interrupted from unmoving mouse
  • Fixed logic error with 'SyncToMe' code
  • Succeeded NetIO with SimplePacket
  • Replaced PacketProtocolSyncClient with PacketProtocolSyncBetweenClients (still deprecated, though)
  • Disabled mod tags
v5.12.0
  • Fixed PlayerItemHelpers.RemoveInventoryItemQuantity for mouse held items
  • Added ToString override to TilePattern
  • Improved DebugHelpers.GetContextSlice for some stacks
  • Tweaked npc dialogue map markers alignment
  • Added TileFrameHelpers constants for common chest types
  • Changed FloatInputElement to hide input until hover
  • Finished WorldChestHelpers
  • Restructured some code files
  • Added failsafe to DebugHelpers.GetContextSlice(...)
  • Reverted improper changes to UIControlPanel Recalculate
  • Tweaked control panel Recalculate in attempt to fix alignment bug
  • Added HUDHelpers.IsMouseInterfacingWithUI
  • Fixed HUDElementHelpers.GetVanillaAccessorySlotScreenPosition for high res
  • Added SimpleLayeredConfig
  • Refactored ItemMoneyHelpers.RenderMoneyDenominations to enable color tinting or pulsing
  • Refactored ItemMoneyHelpers.RenderMoneyDenominations to output money in Terraria's usual order (plat, gold, silv, copp)
  • Tweaked inbox message count mouse text offset
  • Improved CustomPlayerData debug outputs
  • Fixed logic error with (and added optimizations/tweaks) to TileFinderHelpers.GetAllContiguousMatchingTilesAt
  • Refactored `TileFinderHelper.GetAllContiguousMatchingTiles(...)
  • Fixed TileDrawDefinition wall framing
  • Added TileFinderHelpers.FindBoxesOfAllContiguousMatches(...)
v5.11.0
  • Added TileHelpers.KillContainerTileSynced(...)
  • Improved behavior of TileHelpers.KillTileSynced(...)
  • Changed ItemInformationAttributeHelpers.AppendTooltip to AppendTooltipToFurthest
  • Added Scraper service
v5.10.0
  • Added ExtendedItemHooks
  • Fixed ItemHelpers.ReduceStack sync
  • Added ItemMoneyHelpers.GetMoneyDenominations(long)
  • Added FreeHUD.RefreshElements()
  • Modified UIThemedText to allow colored text without line breaks (ugh!)
  • Removed bad bit flag in ItemInformationAttributeHelpers.ApplyTooltipAt(...)
  • Fixed dialogue alert scale, display, and cleanup
  • Added MapMarkers.SetFullScreenMapMarker (replaces AddFullScreenMapMarker)
  • Added ItemInformationAttributeHelpers.AppendTooltip(...)
  • Fixed AnyForge group
  • Set more group names to use constants
  • Obsoleted ItemMoneyHelpers.RenderMoney(bool)
  • Added ItemMoneyHelpers.RenderMoneyDenominations(int, bool, bool)
  • Tweaked HUDMapHelpers.GetFullMapPositionAsScreenPosition
  • Fixed NPC alert map markers not tracking NPCs
  • Set npc dialogue alert icons larger
  • Added scale param to map markers
  • Replaced MapMarkers GetFullScreenMapMarker with TryGetFullScreenMapMarker
  • Prevented menu support UI from being interactive when tabbed out
  • Added overloads of DictionaryExtensions AddOrSet, AddToValue2D
  • Added AnyFishingPole to EntityGroups
  • Added BossChecklist service
  • Services/Debug folder renamed to Debugging
  • Fixed actual error with WorldHelpers.GetRegion
v5.9.6
  • Added WorldGenHelpers
  • Cleaned up risky assorted lock use
  • Replaced TileHelpers.KillTileSynced with a better version
v5.9.5.2
  • Minor optimization to map alert icons
v5.9.5.1
  • Fixed a possible issue with dialogue map icons for duplicate town npcs
v5.9.5
  • Implemented missing tab alerts
  • Added TileHelpers.KillTileSynced(...) failsafes
  • Tweaked npc chat alert icon
  • Implemented new CustomPlayerData.OnEnter
  • Changed CollisionHelpers.CastRay to indicate if to halt a ray cast on both conditions or either
  • Added Maps service (MapMarkers; WIP)
  • Added TileFinderHelpers/TileWorldHelpers.FindBoxForAllOf(TilePattern, int)
  • Restructured NPCChat code files
  • Renamed NPCChat service to DialogueEditor
  • Begun remaking 'priority chats' into 'dynamic dialogue handlers' (WIP)
  • Finished implementing DialogueEditor (and dynamic handlers)
  • Implemented dialogue alert icon drawing on the map
  • Added DustHelpers.CreateMany(...)
  • Added ParticleFxHelpers.MakeGoldGlitter(...)
  • Added ItemMoneyHelpers
  • Added SoundHelpers.PlaySound(...)
  • Moved SoundHelpers and MusicHelpers to Audio
  • Added PlayerAppearanceHelpers
  • Added DialogueEditor.RemoveDynamicDialogueHandler(int)
  • Fixed issue with incompatible alternate ILoadable types
  • Added Timers.RunUntil(Func, int, bool)
v5.9.4
  • Restructured ItemGroupIdentityHelpers files
  • Added ItemGroupIdentityHelpers.Banners group
  • Added PlayerItemFinderHelpers.CountTotalOfEach(Player, ISet, bool)
  • Set control panel toggler button to avoid hotbar lock button
  • Restructured UIControlPanel toggler code files
  • Implemented control panel per-tab alerts
  • Fixed issue with CustomPlayerData's Update behavior (reverted to Main.OnTick)
v5.9.3.1
  • Fixed a logic error in ReflectionHelpers.RunMethod/SafeCall
v5.9.3
  • Added setters from CameraAnimator
  • Changed CameraAnimator.OnTraversed to OnRun
  • Added EntityGroups.IsLoaded
  • Added EntityGroup group Counts
  • Obsoleted CustomPlayerData.OnEnter(object) (is now OnEnter(bool, object)
  • Added UIHideableScrollbar (untested)
  • Changed CustomPlayerData.Update to work via Mod.PostUpdateEverything (instead of Main.OnTick)
  • Refactored ReflectionHelpers.RunMethod to accept nullable parameters wrapped with TypedMethodParameter
v5.9.2
  • Added pause, reset, skip, and fro camera animation functions
  • Refactored camera animations to use a base class
  • Refactored camera animations into separate classes
  • Fixed NetIO
  • Added CameraAnimator.Stop
  • Renamed CameraAnimator.Skip to Seek
  • Fixed camera animation behavior on reaching end
  • Restructured CameraAnimator code files
  • Fixed CameraAnimator sequence finish
  • Added Camera.Reset methods
  • Fixed logic error with camera animator update
  • Restructure TileStructure code files
  • Moved CameraAnimation to Classes
  • Added TileStructure parameter 'respectLiquids'
  • Added CameraAnimator.OnStop
  • Added TileObjectHelpers
  • Extended SimpleMessage to allow position, color, and bordering
  • Added failsafes to TileStructure.PaintTileToWorld(...)
  • Added TileWorldHelpers.RequestChunkFromServer(int, int)
  • Added TileWorldHelpers.RequestChunksFromServer(Rectangle, int, int, int, int)
  • Enabled cheats without "priviledged" mode (only needs DebugModeCheats)
  • Added TilePattern.IsNotAnyOfType and IsNotAnyOfWallType
  • Added TilePattern.Invert
  • Added offsets to CameraMover
  • Added UIZoomHelpers.ConvertToScreenPosition(Vector2, bool?, bool?)
  • Fixed CameraMover.GetMovePosition(...)
  • Tweaked ModCustomDataFileHelpers failsafing
  • Added PropNPC (WIP?)
  • Modified Camera.ApplyPosition(...) to accept 2 nullable parameters for coord
  • Added MathHelpers
  • Added IsSmoothed parameter for Camera animators
v5.9.1.2
  • Reverted NetIO use to PacketProtocol (needs a new serializer?)
  • Removed unsafe code from NetSerializer
  • Corrected NetIO.HandlePacket fallthrough
v5.9.1.1
  • Set NetSerializer inline (!)
v5.9.1
  • Added naming for camera animation sequences
  • Altered NetProtocolBroadcastPayload to allow manual per-client broadcasts
  • Added AnimatedCamere linger elapsed props
  • Fixed and refactored NetIO requests
  • Added 'PreReply' option to interrupt NetIO requests
  • Added error catching for NetIO.Send(...) (!)
  • Fixed invalid net protocol spillover from serialization failure
  • Fixed NetIO deserialization (sorted payload subtypes)
v5.9.0
  • Added AnimatedCamera service
  • Tweaked ReadOnlyDictionaryOfSets to return "default" values for empty sets during enumeration
  • Added Camera.ApplyPosition(Vector2), ApplyShake(float), ApplyZoom(float) (also obsoleted originals)
  • Obsoleted StackableModConfig and ModConfigStack service
  • Fixed premature camera locking
  • Added EntityControls
  • Restructured NPC code
  • Added NetSerializer library
  • Added TileStructure
  • Added SaveTilesCommand (untested)
  • Added TileStructure sampler constructor
  • Added TileStructure.Load(string)
  • Added DebugModeMouseInfo setting
  • Refactored ModifyInterfaceLayers structure
  • Tweaked checkbox sprite
  • Added XNAHelpers.IsSpriteBatchBegun(...)
  • Removed cursed bramble item and tile
  • Removed magitech scrap and geo orb items
  • Added FreeHUD service
  • Added LayerDisable service
  • Added NetIO (WIP) service
  • Finished internally porting PacketProtocol subclasses to NetIO (untested)
  • Added HashSetSerializer (for NetSerializer use)
  • Added TileStructure.PaintToWorld(int, int, bool, bool)
  • Added TilePattern.AnyForeground, AnyWall, AnyLiquid
  • Added FileHelpers.DecompressFileData( byte[] )
  • Added TileStateHelpers.FlipSlopeHorizontally(Tile), FlipSlopeVertically(Tile)
  • Implemented PlayerCheats service
  • Implemented assorted cheats chat commands and DebugModeCheats setting
  • Fixed issue with privileged user check (!!!)
  • Added DictionaryExtensions.Compare(...)
  • Suppressed fx of degreelessness buff while "bilbo" mode on
  • Restructured project base folder
  • Added icon stuff to a project folder
  • Added EncodingHelpers
  • Set all JSON parsing to sanitize inputs for unicode
v5.8.2
  • Fixed TileFinderHelpers's GetFloorWidth, GetCeilingWidth widths
  • Set sliders to call Update for child elements
  • Restructured code files for UITextInputAreaPanel, UITextInputElement
  • Disabled click activation for UITextInputAreaPanel when disabled
  • Added UIHelpers.IsUIAvailable(...)
  • Set UITextInputAreaPanel, UITextInputElement to interrupt when UI not available
  • Failsafed against chat window appearing when pressing Enter in UITextInputElement
  • Set UITextInputElement to force input mode
  • Added Focus() and Unfocus() to UITextInputElement
v5.8.1
  • Added UIZoomHelpers (obsoleted old UIHelpers zoom stuff)
  • Fixed improper UIDialog centering at non-default UI zoom
v5.8.0
  • Tweaked checkbox checkmark
  • Added ItemHelpers.CreateCoins( long, Vector2 )
  • Fixed UITextInputAreaPanel not being enabled by default
  • Fixed pings to not spam (one from current player only, per player)
  • Tweaked checkbox sprite
  • Added IsVerbose check to DebugModePacketInfo output
  • Added (public) UITextInputAreaPanel.SetTextDirect(string)
  • Restructured UITextInputAreaPanel code files
  • Fixed UITextInputAreaPanel to not invoke OnPreChangeText constantly
  • Fixed dialog vertical offset excess default
  • Removed UIDialog's RecalculateMe()
  • Removed recalc from UIDialog.SetLeftPosition, SetTopPosition
  • Added OriginPercentHorizontal, OriginPercentVertical to UIDialog
  • Fixed UIDialog layout recalc behavior
  • Restructured UIDialog code files
  • Tweaked UIDialog layout recalculation behavior
  • Tweaked slider input area to show click box
  • Set UIThemedElement and UIThemedPanel to be IToggleable
  • Fixed tag requisite type for 'Friends Emphasis'
v5.7.3
  • Fixed improper try/catch in WebConnectionHelpers.MakePostRequestAsync(...)
  • Restructured UISlider code files
  • Fixed "Open Mod Config Folder" button alignment
  • Added entity group "Any Ore"
  • Implemented IToggleable for UISlider, UITextInputAreaPanel, UITextInputElement, UITextInputPanel, UITextPanelButton
  • Added MiscHelpers coin text color definitions
  • Added entity group "AnyVanillaGem"
  • Obsoleted TileFinderHelpers.GetTilesInWorldRectangle (use GetTileMatchesInWorldRectangle)
  • Added Timers.SetTimer( int, bool, Func )
  • Added XNAExtensions.Expand
  • Fixed incorrect behavior with TileFinderHelpers.GetTileMatchesInWorldRectangle (weird!)
v5.7.2
  • Changed UISlider's PreOnChange event to return a nullable float value
  • Changed UIState.DrawSlider to accept a nullable bool highlight param
  • Modified UISlider behavior to better indicate hover selected parts
  • Separated UISlider's arrows and moved off to the right
  • Blocked UISlider mouse interactions while inputting text
  • Added UITextInputElement.IsSelected
  • Fixed improper try/catch in WebConnectionHelpers.MakePostRequestAsync(...)
  • Restructured UISlider code files
v5.7.1
  • Suppressed compiler warnings for internal obsoletes
  • Refactored magic numbers into named constants
  • Adjusted UISlider to better indicate how text input occurs
  • Assorted code style cleanup
  • Changed TileAttributeHelpers.IsBreakable to use VanillaTileCuttingContext
  • Removed obsoleted TileAttributeHelpers.IsBreakable
  • Added PreOnChange to UISlider
  • Fixed UISlider interactivity zoom with UI scale changes
v5.7.0
  • Added cursed brambles (item and tile)
  • Improved identity snapshot hash getters
  • Added SoundHelpers
  • Changed OverlaySound to allow specifying Pan and Pitch
  • Tweaked OverlaySound to use a defined delegate type
  • Fixed OverlaySound fade
  • Added clamping to SoundHelpers.GetSoundDataFromSource(...) outputs
  • Moved CameraHelpers to Services.Camera
  • Added parameter to Camera.ApplyShake to skip ahead into shake sequence
  • Removed mod lock enforcing while setting disabled
v5.6.3
  • Fixed UISlider (has own subfolder now)
  • Set ContextConfig and TilePatternConfig to use Ref<bool> for bool?
  • Set ContextConfig and TilePatternConfig to not use interfaces
  • Added 'Lowers Difficulty' tag
  • Added TilePatternConfig constructor accepting a TilePatternBuilder
  • Added some primitive type Ref wrappers with nullability
v5.6.1.1
  • Fixed PlayerWarpHelpers.Teleport(...) (bad sync)
v5.6.1
  • Fixed UISlider scroll to use single int values as scroll units
  • Added ModConfigStack.GetConfigAtOrDefault(int)
  • Added "User Friendly" tag, removed "Adds Convenience"
  • Restructured Services.Network.Client code files
  • Added Client.SubscribeToTileSectionPackets(TileSectionPacketSubscriber)
  • Obsoleted TileChunkHelpers
v5.6.0
  • Implemented UITextInputElement disabling and hiding
  • Refactored some UITextInputElement code layout
  • Added UITextInputElement.Enable(bool)
  • Fixed UITextInputAreaPanel crashing when dealing with an empty input string (?)
  • Added Timers.RunUntil(Func, bool)
  • Implemented a general-use UI slider element
  • Added map scale getters to HUDMapHelpers
  • Updated 'map position as screen position' methods to use value tuples
  • Added HUDMapHelpers.FindTopLeftTileOfFullscreenMap()
  • Restructured HUDMapHelpers code files
  • Changed ParticleFxHelpers.MakeDustCloud to scale properly
  • Fixed NPCFinderHelpers.FindFirstNpcByType
  • Added NPCFinderHelpers.FindNPCsNearby(Vector2, int, int, bool?)
  • Added Client.StopBroadcastingMyCursorPosition()
  • Added docs for Services.Network.Client
  • Added Services.Network.Client
  • Moved Servers.Server to Services.Network.Server
  • Tweaked mod tags submit error slightly
v5.5.2
  • Added "MP Unstable" tag and cleaned up list
  • Changed mod's custom data to save on changes (not on exit)
  • Fixed issue with StackableModConfig not correctly merging IEnumerable fields/props
v5.5.1.2
  • Disabled OnExit hook; incompatible with FNA?
v5.5.1.1
  • Minor tweak (fix) to CustomPlayerData locks
v5.5.1
  • Updated mod tags URL
  • Added TileHelpers.IsEqual(Tile, Tile)
  • Modified TileChunkHelpers.IsTileSyncedForCurrentClient(...) to failsafe against unsynced tiles (TODO)
  • Added ShaderHelpers (Misc)
  • Added locks for CustomPlayerData internals (unnecessary?)
  • Fixed CustomPlayerData.UpdateAll "collection modified" error
  • Added JsonHelpers
  • Filtered null tasks from TaskLauncher's unloader
  • Updated mod info URL for google's script engine update
  • Added json validator for bad mods list
  • Added error output for failing to save MH's own data to file
  • Improved method of saving MH's own data (saves on game exit)
  • Condensed player draw code
  • Added mouse interface failsafe for inbox controls
  • Added error failsafe with OnExit callback
v5.5.0.2
  • Updated mod tags URL
v5.5.0.1
  • Added "Any Heal Potion" entity group (fixed Any Potion group)
v5.5.0
  • Added HUDMapHelpers.GetFullscreenMapTileOfScreenPosition
  • Added Context (class)
  • Added TileChunkHelpers (helper)
  • Set ModConfigStack.GetMergedConfigsForType(Type) to only warn from a failure (no exception)
  • Added AnyPattern field to TilePattern class
  • Added ConfigContext
  • Added TilePatternContext
  • Added FloatRef
  • Removed TileRegions from Context (TilePattern already has those)
  • Added BuffHUDHelpers
  • Added HUDElementHelpers.GetVanillaBuffIconRectanglesByPosition(bool)
  • Tweaked UIHelpers.GetWorldFrameOfScreen()
  • Added MiscHelpersRenderTickDuration(int), RenderCondensedTickDuration(int), RenderColorHex(Color)
  • Added XNAColorHelpers.RenderHex(Color)
  • Added discord link to support info
v5.4.3
  • Added TilePattern.NonActive
  • Added TileGroupIdentityHelpers.VanillaEarthTiles entry for ash blocks
  • Added missing accessories to "Any Non Ore Crafted Equipment" group
  • Removed 'Core Game' implicit tag from Mechanics tags
  • Added ItemInformationAttributeHelpers.ApplyTooltipAt(...) overload for string insertAt
  • Set UI elements to wrap all Draw-embedded event hook calls with Timers.RunNow(...)
  • Added Timers.RunNow(Action)
  • Added assorted preventative measures against UI element Draw "collection modified" errors
  • Modified LogHelpers to use Logger.Warn for Alerts, Logger.Error for Warns
  • Set menu context "no UIState" errors to only occur during DebugModeMenuInfo
  • Implemented cancellation tokens with all tasks
  • Added Helpers.DotNET.Threading.TaskLauncher
  • Added crash failsafe for disposal failure for LogHelpers.CanOutputOnceMessage(...)
  • Reduced issue report log entries to 15 (avoids packet string limit overflow?)
  • Fixed TileHelpers.KillTileSynced against unused mod tiles (also fixes Cleanup Unused Tiles CP button)
v5.4.2
  • Set XNAColorHelpers.AddGlow to respect input alpha
  • Disabled "Low Effort" tag nonsense
  • Added XNAColorHelpers.AddGlow(...)
  • Set GetMergedConfigsForType to failsafe singleton creation failure
  • Added some entity group constants
  • Made entity group definitions more readable
  • Added grappling hooks to AnyNonOreCraftedEquipment group
  • Added grappling items to Any Equipment group
  • Added ItemInformationAttributeHelpers
  • Fixed noGrabItem delay for PlayerItemHelpers Drop methods
  • Fixed PlayerInteractionHelpers.IsWithinTilePlacementReach(...)
  • Added PlayerInteractionHelpers (IsWithinTilePlacementReach(...)
v5.4.1
  • Added TileAttributeHelpers.GetChestTypeCode(int)
  • Refactored TileHelpers.KillTileSynced(...) to sync chest kills
  • Set CustomLoadHooks to use ConcurrentDictionaries
  • Fixed CustomPlayerData fail for players on server
v5.4.0
  • Updated mod icon
  • Added DegreelessnessBuff
  • Added TileCollisionHelpers.FindPathSimple((int, int), (int, int), int, out IList<(int, int)>)
  • Internal tweak to PacketProtocol to improve debugging broadcast-style packets (if needed)
  • Fixed issues with PlayerItemHelpers methods not syncing no grab properly
  • Fixed issue with UIModTagsEditorInterface.CheckForAndApplyLowEffortTag and ModMenuHelpers.GetModDescriptionFromCurrentMenuUI making every mod have the "Low Effort" tag
  • Fixed sync with ItemHelpers.CreateItem(...), DestroyWorldItem(...), ReduceStack(...)
  • Fixed sync with NPCHelpers.RawHurt(...), Kill(...)
  • Fixed sync with PlayerItemHelpers.DropInventoryItem(...), DropEquippedArmorItem(...), DropEquippedMiscItem(...)
  • Fixed sync with ProjectileHelpers.Hit(...)
  • Converted PlayerDataProtocol to a PacketProtocolBroadcast
  • Added PacketProtocolBroadcast
  • Restructured ModHelpersNPC
  • Implemented priority NPC messages (shows alert icon for the NPC)
  • Renamed DictionaryExtentions.Add2D to AddToValue2D
  • Reorganized DictionaryExtentions 2D add and append
  • Added service NPCChat
  • Added Geo-Resonant Orb and Dryad shop sale setting
  • Added ExtendedTileHooks.NonGameplayKillTileCondition
  • Added some entity groups
  • Added ExtendedTileHooks.KillMultiTile(KillMultiTileDelegate)
  • Added "Any Ore Bar" entity group
  • Added LogHelpers.Info(...)
  • Added alerts for empty entity groups
  • Finished implementing entity groups debug mode
  • Restructured entity groups computing code files
  • Further refined threaded computing to better ensure fail state tracking and entity group locking
  • Fixed some (e.g. Any Dyes) bad entity groups (WIP)
  • Implemented DebugModeEntityGroupDisplay
  • Added tile frame squaring to TilePlacementHelpers.Place
  • Added TileDrawDefinition
  • Refactored TileDraw helpers to use TileDrawDefinition
  • Added Tiles.Draw (TileDrawFillHelpers, TileDrawPrimiitivesHelpers)
  • Added PlayerItemHelpers.GetFirstVanitySlot(Player)
  • Relocated ModTagsManager to Services
  • Set StackableModConfig.OverlayChanges to be virtual
  • Fixed TilePattern.AbsoluteAir
  • Added IsActive to TilePattern
  • Cleaned up TilePattern combines for shape/slope stuff
  • Adjusted TilePattern template patterns for correctness
  • Added wall kill hooks to ExtendedTileHooks
  • Fixed references Activator.CreateInstance sometimes acquiring static constructors (which apparently are callable)
  • Added some ILoadable failsafes
  • Set LogHelpers to load from the beginning (Mod.ctor)
  • Renamed TmlHelpers.SafelyGetInstance(Type) to SafelyGetInstanceForType(Type) and refactored
  • Added thread locks to TmlHelpers.SafelyGetInstance(...)
  • Removed duplicate entries in TileFrameHelpers.VanillaChestTypeNamesByFrame
  • Added ExtendedTileHooks.RemoveSafeKillTileHook(KillTileDelegate)
  • Renamed TileWallHelpers to TileWallGroupIdentityHelpers
  • Added TilePlacementHelpers.Place(...)
  • Added TilePlacementHelpers.TryPlace(...)
  • Moved Tile helpers wall stuff to Wall subfolder
  • Moved Tile attributes stuff to Attributes subfolder
  • Renamed TileHelpers PlaceTile, KillTile, Swap1x1 to PlaceTileSynced, KillTileSynced, Swap1x1Synced
  • Added CustomPlayerData.GetPlayerData(int)
  • Some internal refactoring for CustomPlayerData
  • Added TileAttributeHelpers.IsBreakable(int, int, TileCuttingContext?)
  • Moved IsNotVanillaBombable, IsNotVanillaBombableType, GetDamageScale from TileHelpers to TileAttributeHelpers
  • Added XNAExtensions
  • Refactored ModConfigStack to separate generics and explicit type methods (internal use)
  • Added ModConfigPrintCommand
  • Added DictionaryExtensions.Contains2D(...) and overloads
  • Improved TileFinderHelpers.GetFloorWidth(...) and GetCeilingWidth(...)
  • Fixed some TileHelpers multi tile Place bindings
  • Added ReflectionHelpers.RunMethod(...) overload for running methods with generic parameters
  • Added TileGroupIdentityHelpers.VanillaShrubTiles
  • Restructured TileHelpers code files
  • Added TileHelpers bindings for placing non-1x1 tiles to exacting specifications
  • Obsoleted TileIdentityHelpers and TileWallIdentityHelpers properly
  • Renamed StackableModConfig.CopyFrom to OverlayChanges
  • Tweaked CollisionHelpers.CastRay to prevent callbacks from overlapping each other
  • Moved DrawHelpers.AddPostDrawTilesAction to DrawHooks.AddPostDrawTilesHook
  • Moved HUDHelpers to DrawHelpers
  • Fixed ConfigHelpers.MergeConfigs incorrectly comparing field/property values
  • Fixed an issue with ModConfigStack.GetMergedConfigs
  • Added StackableModConfig convenience method CopyFrom
  • Added CollisionHelpers
  • Added NPCHelpers.RawHurt overload for knockback
  • Refined WorldLocationHelpers giant tree locator
  • Corrected ModConfigStack and ConfigHelpers.MergeConfigs to set defaults for their template objects
  • Added WorldLocationHelpers
  • Added PrimitiveExtensions
  • Fixed incorred KillTileDelegate return value
  • Added ExtendedTileHook
  • Fixed ILoadable.OnModsLoad
  • Renamed FX namespace to Fx
  • Restructured some obsolete stuff
  • Tweaked some docs
  • Removed float value recoloring (did not support transparency)
  • Fixed HUDElementHelpers.GetVanillaAccessorySlotScreenPosition(...) not accounting for minimaps and larger resolutions
  • Fixed ModConfigStack.GetMergedConfigStacks()
  • Updated ModConfig stuff to use StackableModConfig
  • Defined StackableModConfig
  • Improved exception reports from ReflectionHelpers Set stuff
  • Fixed ConfigHelpers.MergeConfigs and set it to throw errors instead of return false
  • Added TmlHelpers.SafelyGetInstance(...)
  • Added TmlHelpers.SafelyGetInstance()
  • Added world boundary checking to TilePattern.CheckArea(...)
  • Tweaked ReflectionHelpers.GetCachedInfoMember(...) to cache null members (they wouldn't be changing any time soon, anyway)
  • Fixed DrawHelpers PostDrawTile actions not being called within a spritebatch session
  • Renamed FxHelpers to LightningFxHelpers
  • Added DrawHelpers (only adds AddPostDrawTilesAction(Func) for now)
  • Added Services/ModConfigStack
  • Updated ILoadable classes to hide base methods behind the interface names
  • Added DictionaryExtensions.Set2DSorted(...)
  • Added ConfigHelpers.MergeConfigs(...), MergeConfigsAndTheirCollections(...)
  • Fixed control panel mod list
  • Set UIModData to more formally represent and display its list position index
  • Attempting to correctly order mods in control panel list
  • Updates to TileFrameHelpers lists and variable names
  • Added SetTimer overload for bool actions
  • Added TileFrameHelpers
  • Modified SetTimer callback to specify duration of next call
  • Added CameraHelpers
v5.3.3
  • Begun adding entity group definition labels
  • Renamed EntityGroupDefs to EntityGroupDefinitions (internal change)
  • Added Entity Groups AnyOreEquipment, AnyNonOreCraftedEquipment
  • Added more entity group item ids
  • Removed some redundant item entity groups
  • Fixed TilePattern checks for IsAnyOfType against inactive blocks
  • Added DebugHelpers.Print overloads for simpler parameters
  • Added LogHelpers.LogAndPrintOnce(string, Color), AlertAndPrintOnce(...), WarnAndPrintOnce(...)
v5.3.2
  • Added thread locking for Matchers list (EntityGroups)
  • Added CleanupModTilesCommand
  • Fixed issue with control panel unused tiles cleanup
  • Added log output of failed entity groups
  • Fixed multithreading for mod tiles cleanup (untested)
  • Reduced issue report log lines default setting to fix issue with oversized packets (?)
  • Fixed issue with issue report log lines incorrectly rendering
  • Fixed FormattedGameInfoHelpers.GetFormattedGameInfo(...); invalid .NET framework version report
  • Fixed CustomPlayerData.OnEnter MP fail
  • Added LoadHelpers.IsCurrentPlayerInGame
v5.3.1.2
  • Implemented concurrency for entity groups
  • Added FileHelpers binary load and save overloads for returning (not outputting) status
  • Fixed mod tags for TML64 (somehow?)
  • Fixed LogHelpers Once messages to also run once per context
  • Added LogHelpers.FormatMessageFull(...)
v5.3.1.1
  • Fixed issue with CustomPlayerData.UpdateAll
v5.3.1
  • Fixed TilePattern IsSolid checks
  • Fixed "Any Wood Equipment" entity group
  • Restructured TileFinderHelpers code
  • Added ParticleFxHelpers.MakeFireEmbers(...), MakeTeleportFx(...)
  • Added TileHelpers.Swap1x1(...)
  • Added TileFinderHelpers.GetAllContiguousMatchingTiles(...)
  • Updated TilePattern to replace IsSolid with HasSolidProperties
  • Added world edge detection to TilePattern checks
  • Added TileFinderHelpers.GetFloorWidth(...) and GetCeilingWidth(...)
  • Added TileFinderHelpers.GetFloorWidth, GetCeilWidth leftmost tile param
  • Fixed TileFinderHelpers.GetAllContiguousMatchingTiles(...)
  • Improved/fixed local player into-game load check (still hackish, though)
  • Added CustomPlayerData class
  • Fixed issue (and typo) with DisableAllInternetFeatures super setting
  • Removed CustomLoadHook for player load and save
  • Implemented CustomPlayerData for internal use (replaces use of ModPlayer.OnEnterWorld)
  • Fixed ILoadable loading
  • Skipped error-prone projectile types (102, 221) in EntityGroups load
  • Set ModHelpersCustomPlayer.OnEnter to work only locally
v5.3.0
  • Added tile-coord overload for TileFinderHelpers.GetNearestTile(...)
  • Relocated DisableAllInternaFeatures config super-setting
  • Added a Remove2D overload (IList, no index)
  • Renamed Mod.Config to ModHelpers.Config
  • Fixed TilePattern IsSolid checks
  • Fixed WebConnectionHelpers to avoid acquiring "results" when an error is occurring
  • Minor web error log tweaks
  • Added IsAnyOfWallType to TilePattern
  • Obsoleted TileWallIdentityHelpers
  • Added TileWallHelpers.UnsafeDungeonWallTypes
  • Added custom function (CustomCheck) field to TilePattern
  • Fixed TilePattern combine functions
  • Implemented OverlaySound service
  • Fixed FloatInputElement to not use placeholder text
  • Added StringExtensions (just Trunc(int), for now)
  • Set web request errors to truncate returned strings
  • Updated mod list getter for TML11.5
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

  • HamstarHelpers v1.2.0.1.zip
    256.2 KB · Views: 2,709
  • HamstarHelpers v1.2.0.2.zip
    256.6 KB · Views: 628
  • HamstarHelpers v1.2.0.3.zip
    256.1 KB · Views: 562
  • HamstarHelpers v1.2.1.zip
    256.9 KB · Views: 564
  • HamstarHelpers v1.2.2.1.zip
    263.5 KB · Views: 500
  • HamstarHelpers v1.2.3.zip
    269.1 KB · Views: 511
  • HamstarHelpers v1.2.3.1.zip
    269.5 KB · Views: 554
  • HamstarHelpers v1.2.3.2.zip
    270.1 KB · Views: 505
  • HamstarHelpers v1.2.4.zip
    279.2 KB · Views: 549
  • HamstarHelpers v1.2.4.1.zip
    279 KB · Views: 537
  • HamstarHelpers v1.2.4.2.zip
    279.5 KB · Views: 542
  • HamstarHelpers v1.2.5.zip
    280.2 KB · Views: 509
  • HamstarHelpers v1.2.5.1.zip
    280.8 KB · Views: 515
  • HamstarHelpers v1.2.5.3.zip
    281.3 KB · Views: 491
  • HamstarHelpers v1.2.6.zip
    305.5 KB · Views: 485
  • HamstarHelpers v1.2.7.zip
    309 KB · Views: 508
  • HamstarHelpers v1.2.8.zip
    310.8 KB · Views: 473
  • HamstarHelpers v1.2.9.zip
    313.3 KB · Views: 475
  • HamstarHelpers v1.2.9.1.zip
    313 KB · Views: 501
  • HamstarHelpers v1.2.9.2.zip
    313 KB · Views: 506
  • HamstarHelpers v1.2.9.3.zip
    313.2 KB · Views: 483
  • HamstarHelpers v1.3.0.1.zip
    322.2 KB · Views: 545
  • HamstarHelpers v1.3.1.zip
    332.9 KB · Views: 494
  • HamstarHelpers v1.3.2.zip
    344.5 KB · Views: 515
  • HamstarHelpers v1.3.3.zip
    351 KB · Views: 534
  • HamstarHelpers v1.3.3.1.zip
    348.1 KB · Views: 477
  • HamstarHelpers v1.3.4.zip
    357.4 KB · Views: 505
  • HamstarHelpers v1.3.5.zip
    358.7 KB · Views: 578
  • HamstarHelpers v1.3.5.1.zip
    358.6 KB · Views: 516
  • HamstarHelpers v1.3.5.2.zip
    359 KB · Views: 703
  • HamstarHelpers v1.3.6.zip
    359.5 KB · Views: 525
  • HamstarHelpers v1.3.6.1.zip
    359.5 KB · Views: 541
  • HamstarHelpers v1.3.7.zip
    362.2 KB · Views: 594
  • HamstarHelpers v1.4.0.2.zip
    381.4 KB · Views: 558
  • HamstarHelpers v1.4.0.6.zip
    382.8 KB · Views: 490
  • HamstarHelpers v1.4.0.8.zip
    384.1 KB · Views: 557
  • HamstarHelpers v1.4.0.9.zip
    384.8 KB · Views: 516
  • HamstarHelpers v1.4.1.zip
    390.1 KB · Views: 533
  • HamstarHelpers v1.4.1.1.zip
    391 KB · Views: 521
  • HamstarHelpers v1.4.2.zip
    393.6 KB · Views: 502
  • HamstarHelpers v1.4.2.1.zip
    398.6 KB · Views: 481
  • HamstarHelpers v1.4.2.2.zip
    398.7 KB · Views: 501
  • HamstarHelpers v1.4.2.4.zip
    398.8 KB · Views: 469
  • HamstarHelpers v1.4.2.5.zip
    398.6 KB · Views: 502
  • HamstarHelpers v1.4.2.6.zip
    399.3 KB · Views: 482
  • HamstarHelpers v1.4.2.7.zip
    401.8 KB · Views: 566
  • HamstarHelpers v1.4.4.zip
    406.9 KB · Views: 502
  • HamstarHelpers v1.4.4.1.zip
    414.8 KB · Views: 487
  • HamstarHelpers v1.4.5.zip
    464.4 KB · Views: 472
  • HamstarHelpers v1.4.6.zip
    464.8 KB · Views: 527
  • HamstarHelpers v1.4.6.1.zip
    464.9 KB · Views: 528
  • HamstarHelpers v1.4.7.zip
    474.4 KB · Views: 485
  • HamstarHelpers v1.4.7.1.zip
    474.9 KB · Views: 483
  • HamstarHelpers v1.4.8.zip
    477.9 KB · Views: 456
  • HamstarHelpers v1.4.9.zip
    479.3 KB · Views: 455
  • HamstarHelpers v1.4.10.zip
    481.5 KB · Views: 455
  • HamstarHelpers v1.4.10.1.zip
    481.9 KB · Views: 446
  • HamstarHelpers v1.4.10.2.zip
    479.8 KB · Views: 469
  • HamstarHelpers v1.4.11.zip
    489.3 KB · Views: 465
  • HamstarHelpers v1.4.12.zip
    490.4 KB · Views: 445
  • HamstarHelpers v1.4.14.zip
    491.2 KB · Views: 436
  • HamstarHelpers v1.4.15.1.zip
    492 KB · Views: 453
  • HamstarHelpers v1.4.16.zip
    492.3 KB · Views: 442
  • HamstarHelpers v1.4.17.zip
    496.1 KB · Views: 446
  • HamstarHelpers v1.4.18.zip
    498.7 KB · Views: 469
  • HamstarHelpers v1.5.0.zip
    533.6 KB · Views: 492
  • HamstarHelpers v1.6.0.zip
    593 KB · Views: 487
  • HamstarHelpers v1.6.1.zip
    568.6 KB · Views: 570
  • HamstarHelpers v1.6.2.zip
    578 KB · Views: 454
  • HamstarHelpers v1.6.3.zip
    579.4 KB · Views: 450
  • HamstarHelpers v1.6.4.zip
    580.9 KB · Views: 454
  • HamstarHelpers v1.6.5.zip
    582.3 KB · Views: 448
  • HamstarHelpers v1.6.5.1.zip
    582.3 KB · Views: 457
  • HamstarHelpers v1.6.5.2.zip
    583.4 KB · Views: 457
  • HamstarHelpers v1.6.5.3.zip
    583.5 KB · Views: 464
  • HamstarHelpers v1.1.1.4.zip
    583.9 KB · Views: 412
  • HamstarHelpers v1.6.6.zip
    587 KB · Views: 530
  • HamstarHelpers v1.6.6.2.zip
    587 KB · Views: 604
  • HamstarHelpers v1.6.6.3.zip
    590 KB · Views: 520
  • HamstarHelpers v2.0.2.zip
    329.2 KB · Views: 581
  • HamstarHelpers v2.0.2.2.zip
    331.1 KB · Views: 455
  • HamstarHelpers v2.0.3.zip
    332.7 KB · Views: 584
  • HamstarHelpers v2.0.3.1.zip
    333.1 KB · Views: 505
  • HamstarHelpers v2.0.3.2.zip
    333.2 KB · Views: 645
  • HamstarHelpers v2.1.0.zip
    338.9 KB · Views: 461
  • HamstarHelpers v2.1.0.2.zip
    339.7 KB · Views: 1,133
  • HamstarHelpers v3.0.0.zip
    633 KB · Views: 540
  • HamstarHelpers v3.0.1.1.zip
    638.8 KB · Views: 428
  • HamstarHelpers v3.0.1.2.zip
    639.8 KB · Views: 480
  • HamstarHelpers v3.0.1.3.zip
    644.5 KB · Views: 411
  • HamstarHelpers v3.0.1.4.zip
    641.1 KB · Views: 495
  • HamstarHelpers v3.0.2.zip
    644.4 KB · Views: 456
  • HamstarHelpers v3.1.0.zip
    655.1 KB · Views: 415
  • HamstarHelpers v3.1.0.2.zip
    616.6 KB · Views: 428
  • HamstarHelpers v3.1.0.3.zip
    618.4 KB · Views: 426
  • HamstarHelpers v3.1.0.4.zip
    618.5 KB · Views: 1,344
  • ModHelpers v4.0.0.zip
    369.8 KB · Views: 811
  • ModHelpers v4.0.1.zip
    373.1 KB · Views: 544
  • ModHelpers v4.1.0.zip
    392.7 KB · Views: 472
  • ModHelpers v4.1.0.1.zip
    393.3 KB · Views: 1,067
  • ModHelpers v4.2.0.zip
    405.9 KB · Views: 450
  • HamstarHelpers v4.2.1.zip
    440.6 KB · Views: 628
  • Mod helpers v4.2.1.1.zip
    440.7 KB · Views: 418
  • ModHelpers v4.2.1.3.zip
    440.5 KB · Views: 385
  • ModHelpers v4.2.1.4.zip
    440.7 KB · Views: 419
  • ModHelpers v4.2.2.zip
    441.8 KB · Views: 463
  • ModHelpers v4.2.2.1.zip
    442.1 KB · Views: 509
  • ModHelpers v4.2.3.zip
    448.3 KB · Views: 402
  • ModHelpers v4.2.3.1.zip
    448.3 KB · Views: 484
  • ModHelpers v4.2.3.2.zip
    449 KB · Views: 487
  • ModHelpers v4.2.4.zip
    453 KB · Views: 436
  • ModHelpers v4.2.4.1.zip
    453.5 KB · Views: 460
  • ModHelper v4.2.4.2.zip
    454 KB · Views: 401
  • ModHelpers v4.2.5.zip
    454.8 KB · Views: 589
  • ModHelpers v4.2.6.zip
    465.4 KB · Views: 480
  • ModHelpers v4.2.6.1.zip
    465.8 KB · Views: 421
  • ModHelpers v4.2.7.zip
    467.7 KB · Views: 730
  • ModHelpers v4.3.0.zip
    476.6 KB · Views: 587
  • ModHelpers v4.4.0.zip
    488.2 KB · Views: 904
  • ModHelpers v4.4.0.1.zip
    488.3 KB · Views: 1,172
  • ModHelpers v4.4.0.2.zip
    488.4 KB · Views: 1,403
  • ModHelpers v5.0.0.1.zip
    1.1 MB · Views: 455
  • ModHelpers v5.0.0.2.zip
    1.2 MB · Views: 330
  • ModHelpers v5.0.0.3.zip
    1.2 MB · Views: 298
  • ModHelpers v5.0.0.4.zip
    1.2 MB · Views: 403
  • ModHelpers v5.0.1.zip
    1.2 MB · Views: 709
  • ModHelpers v5.1.0.zip
    1.2 MB · Views: 483
  • ModHelpers v5.2.0.zip
    1.3 MB · Views: 624
  • ModHelpers v5.2.0.1.zip
    1.3 MB · Views: 717
  • ModHelpers v5.3.0.zip
    1.3 MB · Views: 549
  • ModHelpers v5.3.1.zip
    1.3 MB · Views: 287
  • ModHelpers v5.3.1.1.zip
    1.3 MB · Views: 285
  • ModHelpers v5.3.1.2.zip
    1.3 MB · Views: 313
  • ModHelpers v5.3.2.zip
    1.3 MB · Views: 374
  • ModHelpers v5.3.3.zip
    1.3 MB · Views: 1,102
  • ModHelpers v5.4.0.zip
    1.4 MB · Views: 405
  • ModHelpers v5.4.1.zip
    1.4 MB · Views: 461
  • ModHelpers v5.4.2.zip
    1.4 MB · Views: 435
  • ModHelpers v5.4.3.zip
    1.4 MB · Views: 1,375
  • ModHelpers v5.5.0.zip
    1.5 MB · Views: 273
  • ModHelpers v5.5.0.1.zip
    1.5 MB · Views: 285
  • ModHelpers v5.5.0.2.zip
    1.5 MB · Views: 503
  • ModHelpers v5.5.1.zip
    1.5 MB · Views: 247
  • ModHelpers v5.5.1.1.zip
    1.5 MB · Views: 243
  • ModHelpers v5.5.1.2.zip
    1.5 MB · Views: 286
  • ModHelpers v5.5.2.zip
    1.5 MB · Views: 731
  • ModHelpers v5.6.0.zip
    1.5 MB · Views: 393
  • ModHelpers v5.6.1.zip
    1.5 MB · Views: 269
  • ModHelpers v5.6.1.1.zip
    1.5 MB · Views: 440
  • ModHelpers v5.6.3.zip
    1.6 MB · Views: 301
  • ModHelpers v5.7.0.zip
    1.6 MB · Views: 323
  • ModHelpers v5.7.1.zip
    1.5 MB · Views: 315
  • ModHelpers v5.7.2.zip
    1.6 MB · Views: 397
  • ModHelpers v5.7.3.zip
    1.6 MB · Views: 358
  • ModHelpers v5.8.0.zip
    1.6 MB · Views: 228
  • ModHelpers v5.8.1.zip
    1.6 MB · Views: 318
  • ModHelpers v5.8.2.zip
    1.6 MB · Views: 480
  • ModHelpers v5.9.0.zip
    1.7 MB · Views: 246
  • ModHelpers v5.9.1.zip
    1.7 MB · Views: 205
  • ModHelpers v5.9.1.1.zip
    1.7 MB · Views: 228
  • ModHelpers v5.9.1.2.zip
    1.7 MB · Views: 388
  • ModHelpers v5.9.2.zip
    1.8 MB · Views: 226
  • ModHelpers v5.9.3.zip
    1.8 MB · Views: 216
  • ModHelpers v5.9.3.1.zip
    1.8 MB · Views: 247
  • ModHelpers v5.9.4.zip
    1.8 MB · Views: 613
  • Mod Helpers v5.9.5.zip
    1.8 MB · Views: 234
  • Mod Helpers v5.9.5.1.zip
    1.8 MB · Views: 219
  • Mod Helpers v5.9.5.2.zip
    1.8 MB · Views: 330
  • ModHelpers v5.9.6.zip
    1.8 MB · Views: 546
  • ModHelpers v5.10.0.zip
    1.8 MB · Views: 308
  • ModHelpers v5.11.0.zip
    1.8 MB · Views: 511
  • ModHelpers v5.12.0.zip
    1.8 MB · Views: 936
  • ModHelpers v5.13.1.zip
    1.9 MB · Views: 125
  • ModHelpers v5.13.1.1.zip
    1.9 MB · Views: 238
  • ModHelpers v5.13.2.zip
    1.9 MB · Views: 576
  • ModHelpers v5.14.0.zip
    1.8 MB · Views: 5,638
Last edited:
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:
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!
 
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:
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:
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:
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.
 
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

  • HamstarHelpers v1.4.0 RC1.zip
    378 KB · Views: 500
Last edited:
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?
 
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.
 
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"
 
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:
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.
 
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.
 
Back
Top Bottom