Here is what Ive done:
public class ShadowItemTaskManager implements Runnable
{
private static final int DELAY = 1; // 1 second
private final Map<ItemInstance, L2PcInstance> _shadowItems = new ConcurrentHashMap<>();
public static final ShadowItemTaskManager getInstance()
{
return SingletonHolder._instance;
}
protected ShadowItemTaskManager()
{
// Run task each second.
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(this, 1000, 1000);
}
public final void addItem(int slot, ItemInstance item, L2Playable playable)
{
// Must be a shadow item.
if (!item.isShadowItem())
return;
// Must be a player.
if (!(playable instanceof L2PcInstance))
return;
_shadowItems.put(item, (L2PcInstance) playable);
}
And the full code: