1111using LabExtended . API . Custom . Items . Enums ;
1212using LabExtended . API . Custom . Items . Events ;
1313
14+ using LabExtended . Core ;
1415using LabExtended . Core . Configs . Objects ;
1516
1617using LabExtended . Events ;
@@ -360,6 +361,8 @@ public bool Register()
360361 Registered ? . Invoke ( this ) ;
361362
362363 OnRegistered ( ) ;
364+
365+ ApiLog . Info ( "Custom Items" , $ "&2Registered&r custom item &3{ Name } &r (&6{ Id } &r)") ;
363366 return true ;
364367 }
365368
@@ -376,6 +379,8 @@ public bool Unregister()
376379 Unregistered ? . Invoke ( this ) ;
377380
378381 OnUnregistered ( ) ;
382+
383+ ApiLog . Info ( "Custom Items" , $ "&1Unregistered&r custom item &3{ Name } &r (&6{ Id } &r)") ;
379384 return true ;
380385 }
381386
@@ -1699,6 +1704,7 @@ internal static void Internal_Init()
16991704 {
17001705 // is this what adhd is??
17011706 PlayerEvents . PickingUpItem += Internal_PickingUpItem ;
1707+ PlayerEvents . PickedUpItem += Internal_PickedUp ;
17021708
17031709 PlayerEvents . TogglingFlashlight += Internal_TogglingFlashlight ;
17041710 PlayerEvents . ToggledFlashlight += Internal_ToggledFlashlight ;
@@ -1792,6 +1798,69 @@ private static void Internal_Collided(PickupCollidedEventArgs args)
17921798 }
17931799 }
17941800
1801+ private static void Internal_PickedUp ( PlayerPickedUpItemEventArgs args )
1802+ {
1803+ if ( args . Item ? . Base == null )
1804+ return ;
1805+
1806+ if ( args . Player is not ExPlayer player )
1807+ return ;
1808+
1809+ if ( ! Internal_GetCustomItem ( args . Item . Serial , out var customItem , out var tracker ) )
1810+ return ;
1811+
1812+ if ( customItem . InventoryType == args . Item . Type )
1813+ {
1814+ var eventArgs = new CustomItemAddedEventArgs ( player , customItem , CustomItemAddReason . PickedUp , args . Item . Base , tracker . Data , tracker . Pickup , tracker . Data ) ;
1815+
1816+ customItem . OnItemAdded ( eventArgs ) ;
1817+
1818+ tracker . Data = eventArgs . AddedData ;
1819+
1820+ tracker . Item = args . Item . Base ;
1821+ tracker . Owner = player ;
1822+
1823+ tracker . Pickup = null ;
1824+ }
1825+ else
1826+ {
1827+ if ( customItem . InventoryType is ItemType . None )
1828+ {
1829+ ApiLog . Warn ( "Custom Items" , $ "&3{ customItem . Id } &r has not defined it's inventory type!") ;
1830+ return ;
1831+ }
1832+
1833+ if ( customItem . InventoryType . IsAmmo ( ) )
1834+ {
1835+ ApiLog . Warn ( "Custom Items" , $ "&3{ customItem . Id } &r has defined it's inventory type as ammo, which is not supported!") ;
1836+ return ;
1837+ }
1838+
1839+ var itemInstance = customItem . InventoryType . GetItemInstance < ItemBase > ( args . Item . Serial ) ;
1840+
1841+ if ( itemInstance == null )
1842+ {
1843+ ApiLog . Warn ( "Custom Items" , $ "&3{ customItem . Id } &r failed to create an item instance for item &3{ args . Item . Serial } &r!") ;
1844+ return ;
1845+ }
1846+
1847+ args . Item . Base . DestroyItem ( ) ;
1848+
1849+ itemInstance . TransferItem ( player . ReferenceHub ) ;
1850+
1851+ var eventArgs = new CustomItemAddedEventArgs ( player , customItem , CustomItemAddReason . PickedUp , itemInstance , tracker . Data , tracker . Pickup , tracker . Data ) ;
1852+
1853+ customItem . OnItemAdded ( eventArgs ) ;
1854+
1855+ tracker . Data = eventArgs . AddedData ;
1856+
1857+ tracker . Item = itemInstance ;
1858+ tracker . Owner = player ;
1859+
1860+ tracker . Pickup = null ;
1861+ }
1862+ }
1863+
17951864 private static void Internal_TogglingFlashlight ( PlayerTogglingFlashlightEventArgs args )
17961865 {
17971866 if ( args . LightItem ? . Base != null )
0 commit comments