diff --git a/CHANGELOG.md b/CHANGELOG.md index c7a1e596..34992433 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * Do not forget to sign every line you change with your name. (@hakusaro) * If there is no section called "Upcoming changes" below this line, please add one with `## Upcoming changes` as the first line, and then a bulleted item directly after with the first change. +## Upcoming changes +* Fixed rejection check inside of `HandlePaintTile` to account for the Paint Sprayer (or Architect Gizmo Pack) being inside your inventory, rather than on an accessory slot. (@drunderscore) + ## TShock 4.5.12 * Fixed the ability to spawn Zenith projectile with non-original items. (@AgaSpace) * Added hook `GetDataHandlers.OnNpcTalk` for NpcTalk and a handler for it that stops unregistered and logged out players from interacting with NPCs, preventing them from smuggling or duplicating items via NPC item slots. (@tru321) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index a860596d..45e13183 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -3549,6 +3549,11 @@ namespace TShockAPI return true; } + bool hasPaintSprayerAbilities(Item item) => + item != null + && item.stack > 0 + && (item.type == ItemID.PaintSprayer || item.type == ItemID.ArchitectGizmoPack); + // Not selecting paintbrush or paint scraper or the spectre versions? Hacking. if (args.Player.SelectedItem.type != ItemID.PaintRoller && args.Player.SelectedItem.type != ItemID.PaintScraper && @@ -3556,8 +3561,8 @@ namespace TShockAPI args.Player.SelectedItem.type != ItemID.SpectrePaintRoller && args.Player.SelectedItem.type != ItemID.SpectrePaintScraper && args.Player.SelectedItem.type != ItemID.SpectrePaintbrush && - !args.Player.Accessories.Any(i => i != null && i.stack > 0 && - (i.type == ItemID.PaintSprayer || i.type == ItemID.ArchitectGizmoPack))) + !args.Player.Accessories.Any(hasPaintSprayerAbilities) && + !args.Player.Inventory.Any(hasPaintSprayerAbilities)) { TShock.Log.ConsoleDebug("GetDataHandlers / HandlePaintTile rejected select consistency {0}", args.Player.Name); args.Player.SendData(PacketTypes.PaintTile, "", x, y, Main.tile[x, y].color()); diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index e6ceac32..00ff790b 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -898,6 +898,18 @@ namespace TShockAPI } } + /// + /// Gets the player's inventory (first 5 rows) + /// + public IEnumerable Inventory + { + get + { + for (int i = 0; i < 50; i++) + yield return TPlayer.inventory[i]; + } + } + /// /// Gets the player's accessories. ///