LootAPI
LootAPI finds and works with LootingLevelObject instances in the Unity scene. These are the physical loot objects placed in the world — different from server-side loot tracked by ActorAPI.
Getting loot
GetAllLoot()
public static LootingLevelObject[] GetAllLoot()
All active (visible) loot objects in the scene.
var loot = LootAPI.GetAllLoot();
MelonLogger.Msg($"{loot.Length} loot objects active");
GetInactiveLoot()
public static LootingLevelObject[] GetInactiveLoot()
Loot that exists in the scene but is currently hidden/disabled.
GetLootByName()
public static LootingLevelObject[] GetLootByName(string name)
Partial name match against the GameObject name.
var medkits = LootAPI.GetLootByName("medkit");
Finding nearby loot
GetLootNearby()
public static LootingLevelObject[] GetLootNearby(float maxDistance, Vector3? searchCenter = null)
searchCenter defaults to the local player position.
var nearby = LootAPI.GetLootNearby(15f);
MelonLogger.Msg($"{nearby.Length} loot items within 15m");
GetNearestLoot()
public static LootingLevelObject? GetNearestLoot(Vector3? searchCenter = null)
var nearest = LootAPI.GetNearestLoot();
if (nearest != null)
{
float dist = LootAPI.GetDistanceToLoot(nearest);
MelonLogger.Msg($"Nearest loot: {nearest.gameObject.name} at {dist:F1}m");
}
GetNearestLootInRange()
public static LootingLevelObject? GetNearestLootInRange(float maxDistance, Vector3? searchCenter = null)
Like GetNearestLoot() but only considers loot within maxDistance.
FilterLootByDistance()
public static LootingLevelObject[] FilterLootByDistance(float minDistance, float maxDistance, Vector3? searchCenter = null)
Find loot in a distance band — useful for ignoring loot that's too close or too far.
var midRange = LootAPI.FilterLootByDistance(5f, 30f);
Checking for loot
HasLoot()
public static bool HasLoot()
HasLootNearby()
public static bool HasLootNearby(float maxDistance, Vector3? searchCenter = null)
if (LootAPI.HasLootNearby(10f))
MelonLogger.Msg("Loot nearby!");
Position and distance
GetLootPosition()
public static Vector3 GetLootPosition(LootingLevelObject loot)
GetDistanceToLoot()
public static float GetDistanceToLoot(LootingLevelObject loot, Vector3? center = null)
center defaults to the local player position.
Full example — loot HUD
public override void OnGUI()
{
if (!LootAPI.HasLoot()) return;
var allLoot = LootAPI.GetAllLoot()
.OrderBy(l => LootAPI.GetDistanceToLoot(l))
.Take(5)
.ToArray();
GUILayout.BeginArea(new Rect(10, 100, 280, 200));
GUILayout.Label("Nearby loot:");
foreach (var loot in allLoot)
{
float dist = LootAPI.GetDistanceToLoot(loot);
GUILayout.Label($" {loot.gameObject.name} {dist:F0}m");
}
GUILayout.EndArea();
}