Chris' Tutorials
Docs/Item Vault

Item Vault v1.0

FAQ Troubleshooting

Answer common Item Vault setup and integration questions.

StatusDraft
Versionv1.0
UpdatedDevelopment docs generated from GDScript source

This is unreleased documentation in active development. APIs, class names, and behavior may change before the final release.

Draft — Unreleased:This page is in active development. APIs, class names, and behavior may change before the release is finalized. Use it as a preview of what's coming — not as a stable integration target.

This page answers common questions that come up while integrating ItemVault.

How should I add ItemVault services to a scene?

Add an ItemVaultRuntime node to scenes that need an item database and pickup-to-inventory routing. The runtime owns scoped services for the scene and keeps tests, menus, split-screen scenes, and demos isolated.

If your game already has a global inventory service, keep it in the game layer and pass the relevant inventory target into ItemVaultRuntime.

Where do game-specific item terms go?

Use ItemDefinition.id, category, and tags for item-type vocabulary. Use ItemStack.instance_id when a specific stack needs to link to game-owned instance data.

Use WorldItemStackMeta only for the spawned world-node handoff of an ItemVault ItemStack.

What happens if a pickup disappears or the world unloads?

WorldItemStackMeta stores the stack on the pickup node's Godot metadata. It is not a global registry.

If the pickup node is freed, the stack metadata is freed with the node. If the world unloads, unsaved pickup-node metadata is gone. No registry cleanup is required.

If dropped pickups need to persist, save the stack before removing the node:

var stack := WorldItemStackMeta.read(pickup)
if stack != null:
	save_world_drop(pickup.global_position, stack.to_dict())

On load, recreate the pickup node, rebuild the stack from saved data, and write it back with WorldItemStackMeta.write(pickup, stack).

Why is the pickup connector called a bridge?

Pickup nodes emit PickupEvent values. InventoryPickupBridge consumes those events and mutates the configured Inventory or Wallet.

That keeps pickup nodes simple while keeping the default flow tightly integrated:

PickupEvent -> InventoryPickupBridge -> Inventory or Wallet

Why is SpawnEvent.dimension not a routing key?

The field is diagnostic. Your code should branch on the actual node type when it needs dimension-specific behavior:

if event.spawner is Node3D:
	var position: Vector3 = event.spawner.global_position
elif event.spawner is Node2D:
	var position: Vector2 = event.spawner.global_position

See dimension-neutral-handling.md.

Why is SpawnEvent.stack null?

The spawned pickup node probably did not carry ItemVault stack metadata. If you spawn pickup scenes manually, attach the stack before the event is emitted:

WorldItemStackMeta.write(pickup, stack)

If you use RandomDrops or InventoryDrop, ItemVault writes this metadata for you when a valid Droppable or inventory item resolves an ItemStack.

Why did an item disappear when loading a save?

ItemVault drops stacks whose id cannot be resolved by ItemDatabase. This keeps old saves loadable after an item is removed or renamed, but stable ids matter.

Fix:

  • Keep ItemDefinition.id stable after release.
  • Register every item definition in ItemDatabase.
  • Add migration code before changing save ids.

What 3D support is in 1.0?

ItemVault 1.0 scopes core 3D item flow:

  • SceneSpawner3D
  • SpawnSceneAtPoint3D
  • Pickup3D
  • PickupsCollector3D
  • 3D move-on-spawn
  • pickup-to-inventory routing

3D convenience spawners ShapeEdgeSceneSpawner3D and LaunchForceSceneSpawner3D are deferred to 1.1.

My inventory is full. How do I show feedback?

Connect the bridge rejection signal:

runtime.bridge.pickup_rejected.connect(_on_pickup_rejected)

func _on_pickup_rejected(event: PickupEvent, overflow: ItemStack) -> void:
	print("Inventory full: %s x%s" % [overflow.item.id, overflow.quantity])

Where should I start?

Start with getting-started.md, then read item-data-and-stack-metadata.md, json-catalogs-and-saves.md, and drop-tables.md.

Source

addons/item_vault/guides/faq.md

Plugin docs root:gdscript/plugins/item_vault_dev/addons/item_vault/guides