Follow-up deep dive after the util/service split (PAR-282).
Dead @Deprecated code (0 callers):
MaterialUtil.LONG_NAME, SHORT_NAME, MAXIMUM_SIGN_LETTERSShopBlockService.isShopChest(Block) + isShopChest(InventoryHolder)PlayerInteract.canOpenOtherShops(Player)ChestShopSign.isValidPreparedSign(String[])Legacy multi-version cruft: ImplementationAdapter reflectively probes for Inventory.getHolder(boolean) / Block.getState(boolean) and falls back to the snapshot API if absent — but ChestShop compiles against Paper 1.21.11 where those overloads always exist (the upstream multi-version matrix was folded away). The reflection static-init, the dead fallback, and the utils/compat/ indirection (NonSnapshotInventoryHolder, NonSnapshotState) are all dead. Simplify ImplementationAdapter to direct getHolder(useSnapshot) / getLeftSide/getRightSide/getState(useSnapshot) calls; delete utils/compat/. Keep the 4 public methods (14 consumers unchanged).