In Barracoon.cs you have the base.OnDeath contained within a random occurrence..
public override void OnDeath(Container c)
if (Utility.RandomDouble() < 0.2) //was 0.3
The only thing that really stands out to me, is this loop check (below) is being run in ServUO ahead of the one you have here, and is missing in 'Open' of Corpse.cs
for (int k = 0; k < EquipItems.Count; ++k)
Item item2 =...
Gotcha.. I understand better now. Not a different looking container, an actual different container.
You may find some ideas looking at how corpses are handled, or even better I think there is a Bag of Sending in the resources or somewhere, maybe.
Add this override to any container, and adjust the conditional to your need.. I used Name prop as an example..
public override void DisplayTo(Mobile to)
NetState ns = to.NetState;
if (ns == null)
Where you were targeting, and what you were calculating were different spots.
So it was where your char was standing, not what you were targeting that was being processed.
The fix I showed works perfect.
Statics are handled above where LandTarget is in HarvestTarget.cs..
The issue you are encountering is due to checking the mobiles Location instead of your targeted location...
LandTile lt = map.Tiles.GetLandTile(from.X, from.Y);
&& lt.Z == from.Z
else if (targeted is LandTarget lt && IsSandTile(lt.TileID))