Не так понял ваш предыдущий вариант, да, он верный. Должно выйти что-то вроде такого:
if(slot == Inventory.PAPERDOLL_GLOVES && _activeChar.hasVisual(Inventory.PAPERDOLL_GLOVES)){
writeD(_activeChar.visualId(Inventory.PAPERDOLL_GLOVES));
}
else if(slot == Inventory.PAPERDOLL_BOOTS && _activeChar.hasVisual(Inventory.PAPERDOLL_BOOTS)){
writeD(_activeChar.visualId(Inventory.PAPERDOLL_BOOTS));
}
else{
writeD(_activeChar.getInventory().getPaperdollObjectId(slot));
}
(Это конечно можно еще параметризировать (и нужно), чтобы избавиться от громоздкости.)
В PcInstance (вроде так называется Player в лыже) сделать метод visualId(ид слота), который возвращает подмененный ид итема. hasVisual(ид слота) - тоже самое, только если ид итема не пуст, то возвращает true.