Самый простой способ - наследовать от ванильного класса BlockSign, в нем почти вся нужная логика есть.
Чтобы заменить текстуры или рендер текста можно зарегать свой тайл, наследующий ванильный TileEntitySign и для него зарегать свою реализацию TileEntitySpecialRenderer. Оригинанльную можно найти в TileEntitySignRenderer