Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 34 additions & 2 deletions TShockAPI/Bouncer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ You should have received a copy of the GNU General Public License
using System.Collections.Generic;
using System.Linq;
using Terraria.ID;
using TShockAPI.Net;
using Terraria;
using Microsoft.Xna.Framework;
using TShockAPI.Localization;
Expand All @@ -29,6 +28,7 @@ You should have received a copy of the GNU General Public License
using Terraria.Localization;
using TShockAPI.Models.PlayerUpdate;
using System.Threading.Tasks;
using OTAPI;
using Terraria.GameContent.Tile_Entities;

namespace TShockAPI
Expand Down Expand Up @@ -137,6 +137,7 @@ internal Bouncer()
GetDataHandlers.KillMe += OnKillMe;
GetDataHandlers.FishOutNPC += OnFishOutNPC;
GetDataHandlers.FoodPlatterTryPlacing += OnFoodPlatterTryPlacing;
OTAPI.Hooks.Chest.QuickStack += OnQuickStack;


// The following section is based off Player.PlaceThing_Tiles_PlaceIt and Player.PlaceThing_Tiles_PlaceIt_GetLegacyTileStyle.
Expand Down Expand Up @@ -2505,7 +2506,7 @@ internal void OnPlaceItemFrame(object sender, GetDataHandlers.PlaceItemFrameEven
Main.item[num].playerIndexTheItemIsReservedFor = args.Player.Index;
NetMessage.SendData((int)PacketTypes.ItemDrop, args.Player.Index, -1, NetworkText.Empty, num, 1f);
NetMessage.SendData((int)PacketTypes.ItemOwner, args.Player.Index, -1, NetworkText.Empty, num);

TShock.Log.ConsoleDebug(GetString("Bouncer / OnPlaceItemFrame rejected permissions from {0}", args.Player.Name));
NetMessage.SendData((int)PacketTypes.UpdateTileEntity, -1, -1, NetworkText.Empty, args.ItemFrame.ID, 0, 1);
args.Handled = true;
Expand Down Expand Up @@ -2871,6 +2872,37 @@ internal void OnFoodPlatterTryPlacing(object sender, GetDataHandlers.FoodPlatter
}
}

/// <summary>
/// Called when a player is trying to put an item into chest through Quick Stack.
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
internal void OnQuickStack(object sender, OTAPI.Hooks.Chest.QuickStackEventArgs args)
{
var id = args.ChestIndex;
var plr = TShock.Players[args.PlayerId];

if (plr is not { Active: true })
{
args.Result = HookResult.Cancel;
return;
}

if (plr.IsBeingDisabled())
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnQuickStack rejected from disable from {0}", plr.Name));
args.Result = HookResult.Cancel;
return;
}

if (!plr.HasBuildPermission(Main.chest[id].x, Main.chest[id].y) && TShock.Config.Settings.RegionProtectChests)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnQuickStack rejected from region protection? from {0}", plr.Name));
args.Result = HookResult.Cancel;
return;
}
}

internal void OnSecondUpdate()
{
Task.Run(() =>
Expand Down
Loading