В целом всё правильно. Ошибка думаю в том что логика closeInventory() отрабатывает на стороне клиента, а не на сервере.
Стандартный GUI сундука не подходит для сумок: надо ещё реализовать блокировку слота с сумкой, проверку её наличия в руке и там же реализовать логику финального сохранения при...