Fix exception when getPrice() returns NaN
Use customer's perspective in chat messages for consistency
Mark an empty chest as SOLD OUT when a customer tries to open it
Protect against new inventory gestures
Refactor ShopSign into separate class
Refactor ShopSign related events into SignListener
Make shop signs optional
Abstract signs via the ShopData interface and provide ShopInventoryName as (preferred) alternative
Make shop codes and admin shop name configurable