Buggy code:
if ( result ) { if ( ! ( res . isSecondPlotSelectionActive ( ) ) ) { ChatUtils . sendLocalizedChat ( ev . entityPlayer , LocalizationProxy . getLocalization ( ) , "mytown.notification.plot.selectionStart" ) ; } else { ChatUtils . sendLocalizedChat ( ev . entityPlayer , LocalizationProxy . getLocalization ( ) , "mytown.notification.plot.selectionEnd" ) ; } } else ChatUtils . sendLocalizedChat ( ev . entityPlayer , LocalizationProxy . getLocalization ( ) , "mytown.cmd.err.plot.selectionFailed" ) ; } } else if ( description . equals ( EDIT_TOOL_DESCRIPTION_BLOCK_WHITELIST ) ) { town = MyTownUniverse . getInstance ( ) . getTownsMap ( ) . get ( MyTownUtils . getTownNameFromLore ( ev . entityPlayer ) ) ; Town townAt = MyTownUtils . getTownAtPosition ( ev . world . provider . dimensionId , ( ( ev . x ) > > 4 ) , ( ( ev . z ) > > 4 ) ) ; if ( ( town == null ) || ( town != townAt ) ) { res . sendMessage ( LocalizationProxy . getLocalization ( ) . getLocalization ( "mytown.cmd.err.blockNotInTown" ) ) ; } else { FlagType flagType = FlagType . valueOf ( MyTownUtils . getFlagNameFromLore ( ev . entityPlayer ) ) ; ev . entityPlayer . setCurrentItemOrArmor ( 0 , null ) ; BlockWhitelist bw = town . getBlockWhitelist ( ev . world . provider . dimensionId , ev . x , ev . y , ev . z , flagType ) ; if ( bw == null ) { bw = new BlockWhitelist ( ev . world . provider . dimensionId , ev . x , ev . y , ev . z , flagType ) ; res . sendMessage ( LocalizationProxy . getLocalization ( ) . getLocalization ( "mytown.notification.perm.town.whitelist.added" ) ) ; DatasourceProxy . getDatasource ( ) . saveBlockWhitelist ( bw , town ) ; } else { res . sendMessage ( LocalizationProxy . getLocalization ( ) . getLocalization ( "mytown.notification.perm.town.whitelist.removed" ) ) ; DatasourceProxy . getDatasource ( ) . deleteBlockWhitelist ( bw , town ) ; } ev . setCanceled ( true ) ; } } } else if ( ( currentStack . getItem ( ) . equals ( wooden_hoe ) ) && ( currentStack . getDisplayName ( ) . equals ( SIGN_SHOP_NAME ) ) ) { ForgeDirection direction = ForgeDirection . getOrientation ( ev . face ) ; int x = ( ev . x ) + ( direction . offsetX ) ; int y = ( ev . y ) + ( direction . offsetY ) ; int z = ( ev . z ) + ( direction . offsetZ ) ; if ( ( ev . world . getBlock ( x , y , z ) ) != ( Blocks . air ) ) return ; if ( ( direction == ( ForgeDirection . DOWN ) ) || ( ( ev . face ) == 1 ) ) { int i1 = ( MathHelper . floor_double ( ( ( ( double ) ( ( ( ( ev . entityPlayer . rotationYaw ) + 180.0F ) * 16.0F ) // 360.0F ) ) + 0.5 ) ) ) & 15 ; ev . world . setBlock ( x , y , z , standing_sign , i1 , 3 ) ; } else { ev . world . setBlock ( x , y , z , wall_sign , ev . face , 3 ) ; } TileEntitySign te = ( ( TileEntitySign ) ( ev . world . getTileEntity ( x , y , z ) ) ) ; NBTTagList tagList = currentStack . getTagCompound ( ) . getCompoundTag ( "display" ) . getTagList ( "Lore" , 8 ) ; int amount = Integer . parseInt ( tagList . getStringTagAt ( 0 ) . split ( "<seq2seq4repair_space>" ) [ 1 ] ) ; int price = Integer . parseInt ( tagList . getStringTagAt ( 0 ) . split ( "<seq2seq4repair_space>" ) [ 3 ] ) ; ShopType shopType = ShopType . fromString ( tagList . getStringTagAt ( 1 ) . split ( "<seq2seq4repair_space>" ) [ 1 ] ) ; String itemString = tagList . getStringTagAt ( 2 ) . split ( "<seq2seq4repair_space>" ) [ 1 ] ; Shop shop = new Shop ( itemString , amount , price , shopType , ev . world . provider . dimensionId , x , y , z ) ; DatasourceProxy . getDatasource ( ) . saveShop ( shop ) ; String [ ] signText = new String [ 4 ] ; signText [ 0 ] = ( ( ( EnumChatFormatting . BLACK ) + "[<seq2seq4repair_space>" ) + ( shopType . toString ( ) ) ) + "<seq2seq4repair_space>]" ; for ( int i = 0 ; i < ( ( 15 - ( signText [ 0 ] . length ( ) ) ) // 2 ) ; i ++ ) signText [ 0 ] = "<seq2seq4repair_space>" + ( signText [ 0 ] ) ; signText [ 1 ] = ( amount > 1 ? amount + "x" : "" ) + ( EnumChatFormatting . DARK_BLUE ) ; <START_BUG> signText [ 1 ] += shop . itemStack . getDisplayName ( ) . substring ( 0 , ( 15 - ( signText [ 1 ] . length ( ) ) ) ) ; <END_BUG> for ( int i = 0 ; i < ( ( 15 - ( signText [ 1 ] . length ( ) ) ) // 2 ) ; i ++ ) signText [ 1 ] = "<seq2seq4repair_space>" + ( signText [ 1 ] ) ; signText [ 2 ] = ( "" + ( EnumChatFormatting . GOLD ) ) + price ; signText [ 3 ] = ( Constants . SIGN_ID_TEXT ) + ( shop . db_ID ) ; te . signText = signText ; } } } @ SubscribeEvent public void onPlayerBreaksBlock ( BlockEvent . BreakEvent ev ) { } @ SubscribeEvent public void onPlayerInteract ( PlayerInteractEvent ev ) { } }

Fix:
signText [ 1 ] += ( ( ( signText [ 1 ] . length ( ) ) + ( shop . itemStack . getDisplayName ( ) . length ( ) ) ) > 15 ) ? shop . itemStack . getDisplayName ( ) . substring ( 0 , ( 15 - ( signText [ 1 ] . length ( ) ) ) ) : shop . itemStack . getDisplayName ( ) ;